29.1. ÐпÑеделение иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð¸Ñка #
ÐÐ»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ ÑаблиÑÑ ÑоздаÑÑÑÑ Ð¿ÐµÑвиÑнÑй диÑковÑй Ñайл кÑÑи (heap), в коÑоÑом Ñ ÑаниÑÑÑ Ð±Ð¾Ð»ÑÑÐ°Ñ ÑаÑÑÑ Ð´Ð°Ð½Ð½ÑÑ . ÐÑли в ÑаблиÑе еÑÑÑ ÑÑолбÑÑ Ñ Ð¿Ð¾ÑенÑиалÑно болÑÑими знаÑениÑми, Ñо Ñакже Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¸ аÑÑоÑииÑованнÑй Ñ ÑÑой ÑаблиÑей Ñайл TOAST, коÑоÑÑй иÑполÑзÑеÑÑÑ Ð´Ð»Ñ Ñ ÑÐ°Ð½ÐµÐ½Ð¸Ñ ÑлиÑком болÑÑÐ¸Ñ Ð·Ð½Ð°Ñений, не ÑмеÑаÑÑÐ¸Ñ ÑÑ Ð² главной ÑаблиÑе (Ñм. Раздел 73.2). Ðа каждÑÑ ÑаблиÑÑ TOAST, еÑли она ÑÑÑеÑÑвÑеÑ, бÑÐ´ÐµÑ ÑÑÑеÑÑвоваÑÑ Ð¾Ð´Ð¸Ð½ индекÑ. Также Ñам могÑÑ Ð±ÑÑÑ Ð¸ индекÑÑ, аÑÑоÑииÑованнÑе Ñ Ð±Ð°Ð·Ð¾Ð²Ð¾Ð¹ ÑаблиÑей. ÐÐ°Ð¶Ð´Ð°Ñ ÑаблиÑа и Ð¸Ð½Ð´ÐµÐºÑ Ñ ÑанÑÑÑÑ Ð² оÑделÑном диÑковом Ñайле â возможно более Ñем в одном Ñайле, еÑли ÑÐ°Ð·Ð¼ÐµÑ ÑÑого Ñайла пÑевÑÑÐ°ÐµÑ Ð¾Ð´Ð¸Ð½ гигабайÑ. ÐÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð¼Ñн Ð´Ð»Ñ ÑÑÐ¸Ñ Ñайлов опиÑÑваÑÑÑÑ Ð² Разделе 73.1.
ÐÑ Ð¼Ð¾Ð¶ÐµÑе оÑÑÑеÑÑвлÑÑÑ Ð¼Ð¾Ð½Ð¸ÑоÑинг диÑкового пÑоÑÑÑанÑÑва ÑÑÐµÐ¼Ñ ÑпоÑобами: иÑполÑзÑÑ SQL-ÑÑнкÑии, пеÑеÑиÑленнÑе в ТаблиÑе 9.96, иÑполÑзÑÑ Ð¼Ð¾Ð´ÑÐ»Ñ oid2name или пÑоÑмаÑÑÐ¸Ð²Ð°Ñ ÑиÑÑемнÑе каÑалоги вÑÑÑнÑÑ. ÐÑÑеÑпомÑнÑÑÑе SQL-ÑÑнкÑии ÑвлÑÑÑÑÑ Ð½Ð°Ð¸Ð±Ð¾Ð»ÐµÐµ пÑоÑÑÑми и ÑекомендÑÑÑÑÑ Ð´Ð»Ñ Ð¸ÑполÑзованиÑ. РпÑодолжении ÑÑого Ñаздела ÑаÑÑказÑваеÑÑÑ, как пÑоÑмаÑÑиваÑÑ ÑиÑÑемнÑе каÑалоги.
ÐÑполÑзÑÑ psql поÑле недавнего пÑÐ¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´ VACUUM или ANALYZE, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе вÑполниÑÑ Ñакой запÑоÑ, ÑÑÐ¾Ð±Ñ ÑвидеÑÑ ÑколÑко диÑкового пÑоÑÑÑанÑÑва иÑполÑзÑÐµÑ ÐºÐ°ÐºÐ°Ñ-либо ÑаблиÑа:
SELECT pg_relation_filepath(oid), relpages FROM pg_class WHERE relname = 'customer'; pg_relation_filepath | relpages ----------------------+---------- base/16384/16806 | 60 (1 row)
ÐÐ°Ð¶Ð´Ð°Ñ ÑÑÑаниÑа обÑÑно Ñавна 8Ðб. (ÐомниÑе, ÑÑо relpages обновлÑеÑÑÑ ÑолÑко командами VACUUM, ANALYZE, и неÑколÑкими командами DDL, Ñакими как CREATE INDEX). ÐÑÑÑ Ðº ÑÐ°Ð¹Ð»Ñ Ð¿ÑедÑÑавлÑÐµÑ Ð¸Ð½ÑеÑеÑ, еÑли Ð²Ñ Ñ
оÑиÑе пÑоанализиÑоваÑÑ Ð½ÐµÐ¿Ð¾ÑÑедÑÑвенно Ñайл на диÑке.
ЧÑÐ¾Ð±Ñ Ð¿Ð¾ÑмоÑÑеÑÑ Ð¿ÑоÑÑÑанÑÑво, иÑполÑзÑемое ÑаблиÑами TOAST, иÑполÑзÑйÑе ÑледÑÑÑий запÑоÑ:
SELECT relname, relpages
FROM pg_class,
(SELECT reltoastrelid
FROM pg_class
WHERE relname = 'customer') AS ss
WHERE oid = ss.reltoastrelid OR
oid = (SELECT indexrelid
FROM pg_index
WHERE indrelid = ss.reltoastrelid)
ORDER BY relname;
relname | relpages
----------------------+----------
pg_toast_16806 | 0
pg_toast_16806_index | 1ÐÑ Ð¼Ð¾Ð¶ÐµÑе легко поÑмоÑÑеÑÑ ÑазмеÑÑ Ð¸Ð½Ð´ÐµÐºÑов:
SELECT c2.relname, c2.relpages
FROM pg_class c, pg_class c2, pg_index i
WHERE c.relname = 'customer' AND
c.oid = i.indrelid AND
c2.oid = i.indexrelid
ORDER BY c2.relname;
relname | relpages
-------------------+----------
customer_id_index | 26Также легко найÑи ÑамÑе болÑÑие ÑаблиÑÑ Ð¸ индекÑÑ, иÑполÑзÑÑ ÑÑÑ Ð¸Ð½ÑоÑмаÑиÑ:
SELECT relname, relpages
FROM pg_class
ORDER BY relpages DESC;
relname | relpages
----------------------+----------
bigtable | 3290
customer | 3144