Документация по PostgreSQL 9.1.1 | ||||
---|---|---|---|---|
Prev | Fast Backward | Chapter 28. Мониторинг использования диска | Fast Forward | Next |
Каждая таблица имеет первичный дисковый файл кучи, в котором хранится большая часть данных. Если таблица имеет какие-либо колонки с потенциально широкими значениями, то также может быть TOAST файл, ассоциированный с этой таблицей, который используется для хранения значений, которые слишком широки, чтобы комфортабельно размещаться в главной таблице (см. Section 55.2). На каждую TOAST таблицу, если она существует, будет существовать один индекс. Также там могут быть и индексы, ассоциированные с базовой таблицей. Каждая таблица и индекс хранятся в отдельном дисковом файле — возможно более чем в одном файле, если размер этого файла превышает один гинабайт. Преобразования имён для этих файлов, описываются в Section 55.1.
Вы можете мониторить дисковое пространство тремя способами: используя SQL функции перечисленные в Table 9-59, используя модуль 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)
Каждая страница обычно равна 8kb. (Помните, что 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 reltoastidxid FROM pg_class WHERE oid = 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_indexdex | 26
Также легко найти наиболее большие таблицы и индексы используя эту информацию:
SELECT relname, relpages FROM pg_class ORDER BY relpages DESC; relname | relpages ----------------------+---------- bigtable | 3290 customer | 3144