Документация по PostgreSQL 8.4.2 | ||||
---|---|---|---|---|
Prev | Fast Backward | Chapter 27. Мониторинг использования диска | Fast Forward | Next |
Каждая таблица имеет первичный дисковый файл кучи, в котором хранится большая часть данных. Если таблица имеет какие-либо колонки с потенциально широкими значениями, то существует также TOAST файл, ассоциированный с этой таблицей, который используется для хранения значений, которые слишком широки, чтобы комфортабельно размещаться в главной таблице (см. Section 53.2). На каждую TOAST таблицу, если она существует, будет существовать один индекс. Также там могут быть и индексы, ассоциированные с базовой таблицей. Каждая таблица и индекс хранятся в отдельном дисковом файле — возможно более чем в одном файле, если размер этого файла превышает один гинабайт. Преобразования имён для этих файлов, описываются в Section 53.1.
Вы можете мониторить дисковое пространство тремя способами: используя SQL функции перечисленные в Table 9-57, используя информацию от VACUUM и из командной строки, используя инструменты в contrib/oid2name. Вышеупомянутые SQL функции являются наиболее простыми для использования и получения информации о таблицах, таблицах с индексами и хранением длинных значений (TOAST), а также базах данных и табличных пространствах.
Используя psql после недавнего применения команд VACUUM или ANALYZE, вы можете выполнить такой запрос, чтобы увидеть сколько дискового пространства использует какая-либо таблица:
SELECT relfilenode, relpages FROM pg_class WHERE relname = 'customer'; relfilenode | relpages -------------+---------- 16806 | 60 (1 row)
Каждая страница обычно равна 8kb. (Помните, что relpages обновляется только командами VACUUM, ANALYZE, и несколькими DDL командами, такими как CREATE INDEX). Значение relfilenode представляет интерес, если вы хотите напрямую анализировать дисковый файл таблицы.
Чтобы посмотреть пространство, используемое TOAST таблицами, используйте следующий запрос:
SELECT relname, relpages FROM pg_class, (SELECT reltoastrelid FROM pg_class WHERE relname = 'customer') 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
Вы также можете использовать contrib/oid2name чтобы посмотреть использование дискового пространтсва. См. примеры в файле README.oid2name, в указанном каталоге. Они включают сценарий, который показывает использование диска для каждой базы данных.