Получаем размер таблицы, базы данных, индекса, табличного пространства и размер значения в PostgreSQL
Администратор базы данных часто задумывается — чем в данный момент занята система, куда делось место на диске, какая база “распухла” и т.д. Для мониторинга работы СУБД и анализа её производительности существуют различные инструменты. Большая часть этой главы посвящена описанию работы сборщика статистики 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)
В этом руководстве вы изучили различные удобные функции для получения размера базы данных, таблицы, индексов, табличного пространства и значения.
Только полноправные пользователи могут оставлять комментарии. Аутентифицируйтесь пожалуйста, используя сервисы.