Получаем размер таблицы, базы данных, индекса, табличного пространства и размер значения в PostgreSQL

  • Михаил
  • 15 мин. на прочтение
  • 460
  • 23 Feb 2023
  • 26 Aug 2023

Администратор базы данных часто задумывается — чем в данный момент занята система, куда делось место на диске, какая база “распухла” и т.д. Для мониторинга работы СУБД и анализа её производительности существуют различные инструменты. Большая часть этой главы посвящена описанию работы сборщика статистики PostgreSQL, однако не следует пренебрегать и обычными командами мониторинга Unix, такими как ps, top, iostat, и vmstat. Кроме того, после обнаружения запроса с низкой производительностью может потребоваться дополнительное исследование с использованием PostgreSQL.

Размер таблицы Postgres Pro

Чтобы получить размер конкретной таблицы, вы используете функцию pg_relation_size(). Например, вы можете получить размер таблицы items в zabbix

select pg_relation_size('items');

Функция pg_relation_size()возвращает размер конкретной таблицы в байтах:

pg_relation_size ------------------             12.779.520

 

Чтобы сделать результат более понятным для человека, вы используете функцию pg_size_pretty(). Функция pg_size_pretty()берет результат другой функции и форматирует его, используя байты, кБ, МБ, ГБ или ТБ в зависимости от ситуации. Например:

SELECT pg_size_pretty(pg_relation_size('items'));

Ниже приведен вывод в килобайтах.

Функция pg_relation_size()возвращает только размер таблицы, не включая индексы или дополнительные объекты.

Чтобы получить общий размер таблицы, вы используете функцию pg_total_relation_size(). Например, чтобы получить общий размер таблицы items, вы используете следующую инструкцию:

SELECT
    pg_size_pretty(
        pg_total_relation_size('items')
    );

Ниже показан вывод:

 

Вы можете использовать эту pg_total_relation_size()функцию, чтобы найти размер самых больших таблиц, включая индексы.

Например, следующий запрос возвращает 5 самых больших таблиц в zabbix базе данных:

SELECT
    relname AS "relation",
    pg_size_pretty (
        pg_total_relation_size (C .oid)
    ) AS "total_size"
FROM
    pg_class C
LEFT JOIN pg_namespace N ON (N.oid = C .relnamespace)
WHERE
    nspname NOT IN (
        'pg_catalog',
        'information_schema'
    )
AND C .relkind <> 'i'
AND nspname !~ '^pg_toast'
ORDER BY
    pg_total_relation_size (C .oid) DESC
LIMIT 5;

Вот результат:

 

Размер базы данных PostgreSQL

Чтобы получить размер всей базы данных, вы используете функцию pg_database_size(). Например, следующий оператор возвращает размер базы zabbix данных:

SELECT pg_size_pretty(pg_database_size('zabbix'));

Оператор возвращает следующий результат:

Чтобы получить размер каждой базы данных на текущем сервере базы данных, вы используете следующую инструкцию:

SELECT
    pg_database.datname,
    pg_size_pretty(pg_database_size(pg_database.datname)) AS size
    FROM pg_database;

 

Размер индекса PostgreSQL

Чтобы получить общий размер всех индексов, прикрепленных к таблице, вы используете функцию pg_indexes_size().

Функция pg_indexes_size()принимает OID или имя таблицы в качестве аргумента и возвращает общее дисковое пространство, используемое всеми индексами, прикрепленными к этой таблице.

Например, чтобы получить общий размер всех индексов, прикрепленных к filmтаблице, вы используете следующую инструкцию:

SELECT pg_size_pretty (pg_indexes_size('items'));

Вот результат:

 

Размер табличного пространства PostgreSQL

Чтобы получить размер табличного пространства, вы используете функцию pg_tablespace_size(). Функция pg_tablespace_size()принимает имя табличного пространства и возвращает размер в байтах.

Следующий оператор возвращает размер табличного пространства pg_default:

SELECT
    pg_size_pretty (
        pg_tablespace_size ('pg_default')
    );

Оператор возвращает следующий вывод:

 

Размер значения PostgreSQL

Чтобы узнать, сколько места необходимо для хранения определенного значения, вы используете функцию pg_column_size(), например:

select pg_column_size(5::smallint);
pg_column_size
----------------
             2
(1 row)

select pg_column_size(5::int);
pg_column_size
----------------
             4
(1 row)

select pg_column_size(5::bigint);
pg_column_size
----------------
             8
(1 row)

В этом руководстве вы изучили различные удобные функции для получения размера базы данных, таблицы, индексов, табличного пространства и значения.