Документация по PostgreSQL 8.0.1 | ||||
---|---|---|---|---|
Prev | Fast Backward | Fast Forward | Next |
Данная глава обсуждает как отслеживать использование диска СУБД PostgreSQL.
Каждая таблица имеет первичный дисковый файл кучи, в котором хранится большая часть данных. Если таблица имеет какие-либо колонки с потенциально широкими значениями, то существует также TOAST файл, ассоциированный с этой таблицей, который используется для хранения значений, которые слишком широки, чтобы комфортабельно размещаться в главной таблице (см. Section 49.2). На каждую TOAST таблицу, если она существует, будет существовать один индекс. Также там могут быть и индексы, ассоциированные с базовой таблицей. Каждая таблица и индекс хранятся в отдельном дисковом файле — возможно более чем в одном файле, если размер этого файла превышает один гинабайт. Преобразования имён для этих файлов, описываются в Section 49.1.
Вы можете мониторить дисковое пространство в трёх местах: через psql используя информацию от VACUUM, через psql используя инструменты в contrib/dbsize и через командную строку, используя инструмент в contrib/oid2name. Используя 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/dbsize загружает в вашу базу данных функции, которые позволяют вам найти размер таблицы или базы данных изнутри psql без выполнения VACUUM или ANALYZE.
Вы также можете использовать contrib/oid2name чтобы посмотреть использование дискового пространтсва. См. примеры в файле README.oid2name, в указанном каталоге. Они включают сценарий, который показывает использование диска для каждой базы данных.