Определение использования диска

27.1. Определение использования диска

Каждая таблица имеет первичный дисковый файл кучи, в котором хранится большая часть данных. Если таблица имеет какие-либо колонки с потенциально широкими значениями, то существует также 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, в указанном каталоге. Они включают сценарий, который показывает использование диска для каждой базы данных.

Back to top

(С) Виктор Вислобоков, 2008-2023