Содержание
Размер таблиц и базы данных
PostgreSQL
SecretSilent
Чтоб узнать размер всех таблиц схемы базы данных достаточно выполнить вот такой запрос:
select table_name, pg_size_pretty( pg_total_relation_size(table_name)) from information_schema.tables where table_schema = 'table_schema_name' and table_catalog = 'database_name';
Этот запрос вернет полный размер таблицы, включая индексы и данные TOAST. Чтоб узнать размер таблицы без индексов ( но включая TOAST, карту свободного места и карту видимости ) воспользуйтесь функцией pg_table_size. pg_relation_size() — чтоб узнать объём, который занимает на диске указанный слой (‘main’, ‘fsm’, ‘vm’, ‘init’) заданной таблицы или индекса. Про некоторые другие функции получения размера объектов можно почитать в документации.
Узнать размер баз данных на сервере:
select datname, pg_size_pretty(pg_database_size(datname)) from pg_database;
pg_size_pretty возвращает значение размера объектов в удобочитаемом для человека виде, например 36 MB. Однако можно использовать выше указанные функции напрямую. Тогда размер объектов вернется в байтах.
Понравилось это:
Нравится Загрузка…
Отмечено pg_database_size, pg_relation_size, pg_size_pretty, PostgreSQL, размер базы данных, размер таблицы
Смотреть все записи автора SecretSilent
Свежие записи
- Государственный школьный стандарт — разбор
07.10.2022 - PostgreSQL: Установка пользовательских параметров базы данных и/или сессии
30.09.2022 - Аналог UNNEST в SQLite
09.08.2022 - Не подпиской на Яндекс.Музыку единой
16.06.2022 - PostgreSQL: Запрос на получение списка комментариев к колонкам таблицы
14.06.2022 - Ветка сакуры упала на грудь…
23.05.2022 - PostgreSQL: Результаты запроса в JSON
28.03.2022
- Love sux but music doesn’t
01.03.2022 - Прервать соединения IP с базой данных в PostgreSQL
12.06.2020 - Лирическое отступление
29.05.2020 - Динамическое создание виджетов Qt. QGridLayout
24.05.2020 - DBServerWizard — автоматизация работы с базами данных PostgreSQL
20.05.2020 - Приятное с полезным: Starset & English
20.05.2020 - Настроение Starset — Ricochet
13.05.2020 - Немного леса
21.04.2020
Популярные записи и страницы
- PostgreSQL: unnest(array)
- PostgreSQL: Размер таблиц и базы данных
- PostgreSQL: Узнать данные о колонках таблицы
- Функция, возвращающая таблицу returns table — в PostgreSQL и MS SQL Server
- Подключение к базе данных в Qt
- Количество подключений к БД PostgreSQL
- Добавление данных в таблицу QTableWidget.
Очистка таблицы
- Основы баз данных. ER-модель (сущность-связь)
- PostgreSQL: Результаты запроса в JSON
- Что быстрее: where или join?
Рубрики
РубрикиВыберите рубрикуC++ (11)Delphi (2)Qt (29)SQL (32) Microsoft SQL Server (8) PostgreSQL (24) SQLite (1)Базы данных (29)Будни (13) «Нет» выгоранию (5)О том о сём (31) Музыка♥ (7) Мысли вслух (7) Фотография (3)Портфолио (11)Что творится (1)
sql — Изменение размера таблицы при удалении колонок в postgres
Почему когда я удаляю колонку из таблицы в postres, размер её (таблицы, 20 млн строк) не уменьшается??? Колонка varchar, удаляю обычной командой
alter table … drop column
Можно как-то исправить эту ситуацию??
Как смотрю размер:
select pg_size_pretty( pg_total_relation_size( ‘items_fin’ ) )
Как удаляю:
alter table items_fin drop column user_id
Базу обновляю, конечно, после удаления колонки.
(Прим.: когда создаю новую колонку и задаю значения для новой колонки — конечно, размер увеличивается.)
- sql
- postgresql
6
Удаление поля из определения таблицы не затрагивает саму таблицу. Вообще не затрагивает, лишь в системном каталоге pg_attribute проставляется свойство attisdropped
.
Это хорошо и плохо одновременно. Хорошо потому что операция быстрая и не зависит от объёма данных. Плохо — потому что уменьшить размер таблицы за счёт удаления удалённых данных бывает нетривиально.
Для небольших таблиц или если есть возможность заблокировать таблицу на заметное время — поможет vacuum full
— внимание, именно full
. Просто вакуум, как и автовакуум не будут вычищать данные из неизменившихся и видимых версий строк.
Для таблиц сильно побольше, которые блокировать нельзя — можно использовать pg_repack. Необходимо только учитывать, что repack
не имеет никаких настроек производительности и в работе даст ощутимую нагрузку на диски и на реплики (если таковые есть).
Третий вариант без длительной блокировки — небольшими транзакциями вида
update testtable set any_column = any_column where ...;
обновить все записи в таблице, делая время от времени vacuum tablename
(не full
). Во время update
содержимое удалённых колонок не копируется. В конце может иметь смысл запустить pgcompacttable
для проверки таблицы и индексов на раздутость и автоматическое сжатие без длинных блокировок. Опций по удалению удалённых колонок у этой утилиты нет, но зато она спроектирована оказывать минимальное влияние на производительность базы.
Зарегистрируйтесь или войдите
Регистрация через Google
Регистрация через Facebook
Регистрация через почту
Отправить без регистрации
Почта
Необходима, но никому не показывается
Отправить без регистрации
Почта
Необходима, но никому не показывается
Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки
sql — postgresql список и порядок таблиц по размеру
Так будет понятнее.
pg_size_pretty(
— преобразует количество байтов в удобочитаемый формат.
pg_database_size(
— получает размер базы данных в байт .
pg_total_relation_size(
— получает общий размер таблицы и ее индекс в байт .
pg_relation_size(
— получает размер отношения (таблица/индекс) в байт .
pg_indexes_size(<имя_отношения>)
— получает размер индекса отношения в байтах .
current_database()
— получает текущую используемую базу данных, к которой выполняется этот запрос.
Запрос:
выберите current_database() в качестве базы данных, pg_size_pretty(total_database_size) как total_database_size, имя_схемы, имя_таблицы, pg_size_pretty(total_table_size) как total_table_size, pg_size_pretty(table_size) как table_size, pg_size_pretty(index_size) как index_size из ( выберите имя_таблицы, table_schema как имя_схемы, pg_database_size(current_database()) как total_database_size, pg_total_relation_size(table_name) как total_table_size, pg_relation_size(table_name) как table_size, pg_indexes_size(table_name) как index_size из information_schema.tables где table_schema=current_schema() и table_name, например 'table_%' упорядочить по total_table_size ) как размеры;
Результат:
база данных | общий_размер_базы_данных | имя_схемы | имя_таблицы | общий_размер_таблицы | размер_таблицы | index_size --------------------------+-----------------------------------+--------------+-- -------------------------+----+-------------+------- ----- виннешдб | 1586 МБ | корпданные | таблица_ааа | 16 КБ | 0 байт | 8192 байта виннешдб | 1586 МБ | корпданные | таблица_bbb | 24 КБ | 0 байт | 16 КБ виннешдб | 1586 МБ | корпданные | таблица_ccc | 640 КБ | 112 КБ | 488 КБ виннешдб | 1586 МБ | корпданные | таблица_ddd | 9760 КБ | 3152 КБ | 6568 КБ виннешдб | 1586 МБ | корпданные | table_ee | 1120 МБ | 311 МБ | 808 МБ
Гуманизированный формат представлен в байт
, КБ
, МБ
, ГБ
и ТБ
.
байт с
до КБ
— начинается с 10240 байтов
байт
до МБ
— начинается с 10485248 байтов
= 10239.
~ 5 KB
10 MB
bytes
to GB
— begins from 10736893952 bytes
= 10239.5 MB
~ 10 BG
bytes
to TB
— begins from 10994579406848 bytes
= 10239.5 GB
~ 10 ТБ
Все преобразования единиц измерения начинаются с 10 +
.
Для справки — официальная документация Postgres
база данных — размер столбца PostgreSQL и размер таблицы
Я пытаюсь получить только один размер таблицы, а затем размер каждой строки.
Пока я использовал
SELECT pg_table_size(*mytable*) as DATA;
получаю 393216 байт.
Использование
SELECT (SUM(pg_column_size(t) - 24)) FROM *mytable* AS t;
(как написано здесь Как получить размер каждой строки конкретной таблицы в postgresql..?)
Я получаю 560669 байт.
560669 против 393216 байт — какой из них настоящий?
- база данных
- postgresql
- размер
6
Из https://www. postgresql.org/docs/14/functions-admin.html
pg_table_size — вычисляет дисковое пространство, используемое указанной таблицей,
исключая индексы (но включая его таблицу TOAST, если таковая имеется, свободное место
карту и карту видимости).
Итак, pg_table_size дает вам объем диска, который postgres использует для таблицы, и для некоторых метаданных, которые postgres хранит о таблице (карта видимости и карта свободного пространства). Удаление строки не уменьшит это число (если только вы не выполните VACUUM FULL), поэтому мы не ожидаем, что диск, используемый таблицей, будет соответствовать сумме данных в каждой видимой строке. Вместо этого диск, используемый таблицей, будет больше.
pg_column_size — показывает количество байтов, используемых для хранения отдельных
значение данных. Если применяется непосредственно к значению столбца таблицы, это отражает
любое сжатие, которое было сделано.
Таким образом, возвращается размер каждой строки на диске (включая информацию о заголовках строк, хранящуюся на диске).