Postgresql размер таблицы: Заметки веб-разработчика/админа ← Роман Теличко
Как узнать размер таблиц в postgresql
postgresql
Потоковая репликация (streaming replication) является передачей записей из WAL (Write-Ahead Log) от мастера к
postgresql
В статье рассмотрим установку и первоначальную настройку различных версий сервера PostgreSQL на ОС CentOS
Линукс
Команда grep (Global Regular Expression Print – глобальный поиск по регулярному выражению с печатью
Линукс
В UNIX-системах, к которым относится и Linux, используется принцип «все является файлом» (собственно файлы,
Линукс
Одной из важнейших задач в системном администрировании является управление пользователями. Не менее важно также
Линукс
Практически все сервисные подсистемы, будь то графическая подсистема X Window, службы резервного копирования и
Определение размеров таблиц в базе данных PostgreSQL | Gilev.ru
SELECT tableName, pg_size_pretty(pg_total_relation_size(CAST(tablename as text))) as size
from pg_tables
where tableName not like ‘sql_%’
order by size;
или
SELECT
table_name,
pg_size_pretty(table_size) AS table_size,
pg_size_pretty(indexes_size) AS indexes_size,
pg_size_pretty(total_size) AS total_size
FROM (
SELECT
table_name,
pg_table_size(table_name) AS table_size,
pg_indexes_size(table_name) AS indexes_size,
pg_total_relation_size(table_name) AS total_size
FROM (
SELECT ('"' || table_schema || '"."' || table_name || '"') AS table_name
FROM information_schema.tables
) AS all_tables
ORDER BY total_size DESC
) AS pretty_sizes
или
Размер таблиц и индексов
SELECT
t.tablename,
indexname,
c.reltuples::integer AS num_rows,
pg_size_pretty(pg_relation_size(quote_ident(t.tablename)::text)) AS table_size,
pg_size_pretty(pg_relation_size(quote_ident(indexrelname)::text)) AS index_size,
CASE WHEN x.is_unique = 1 THEN 'Y'
ELSE 'N'
END AS UNIQUE,
idx_scan AS number_of_scans,
idx_tup_read AS tuples_read,
idx_tup_fetch AS tuples_fetched
FROM pg_tables t
LEFT OUTER JOIN pg_class c ON t.tablename=c.relname
LEFT OUTER JOIN
(SELECT indrelid,
max(CAST(indisunique AS integer)) AS is_unique
FROM pg_index
GROUP BY indrelid) x
ON c.oid = x.indrelid
LEFT OUTER JOIN
( SELECT c.relname AS ctablename, ipg.relname AS indexname, x.indnatts AS number_of_columns,
idx_scan, idx_tup_read, idx_tup_fetch,indexrelname FROM pg_index x
JOIN pg_class c ON c.oid = x.indrelid
JOIN pg_class ipg ON ipg.oid = x.indexrelid
JOIN pg_stat_all_indexes psai ON x.indexrelid = psai.indexrelid )
AS foo
ON t.tablename = foo.ctablename
WHERE t.schemaname='public'
ORDER BY pg_relation_size(quote_ident(indexrelname)::text) desc;
Postgresql размер таблиц (байт) на основе столбца в таблице [duplicate]
Математическая математика с плавающей запятой такова. В большинстве языков программирования он основан на стандарте IEEE 754 . JavaScript использует 64-битное представление с плавающей запятой, которое совпадает с Java double
. Суть проблемы состоит в том, что числа представлены в этом формате как целое число раз в два раза; рациональные числа (такие как 0.1
, который является 1/10
), знаменатель которого не является степенью двух, не могут быть точно представлены.
Для 0.1
в стандартном формате binary64
представление может записывается в точности как
-
0.1000000000000000055511151231257827021181583404541015625
в десятичной форме или -
0x1.999999999999ap-4
в нотации C99 hexfloat .
Напротив, рациональное число 0.1
, которое является 1/10
, может быть записано точно как
-
0.1
в десятичной форме или -
0x1.99999999999999...p-4
в аналоге обозначения гексафлоата C99, где...
представляет собой бесконечную последовательность 9.
Константы 0.2
и 0.3
в вашей программе также будут приближенными к их истинные ценности. Бывает, что ближайший double
до 0.2
больше, чем рациональное число 0.2
, но ближайший double
до 0.3
меньше, чем рациональное число 0.3
. Сумма 0.1
и 0.2
заканчивается выше, чем рациональное число 0.3
и, следовательно, не согласуется с константой в вашем коде.
Достаточно полное рассмотрение арифметических вопросов с плавающей запятой Что каждый компьютерный ученый должен знать о арифметике с плавающей точкой . Для более простого объяснения см. floating-point-gui.de .
задан a_horse_with_no_name 13 February 2016 в 23:34
поделиться
PostgreSQL : Документация: 12: Приложение K. Ограничения PostgreSQL : Компания Postgres Professional
Приложение K. Ограничения PostgreSQL
В Таблице K.1 описываются различные жёсткие ограничения PostgreSQL. Однако раньше этих абсолютных лимитов на практике могут достигаться другие, например, предел производительности или доступного объёма дискового хранилища.
Таблица K.1. Ограничения PostgreSQL
Объект | Верхний предел | Комментарий |
---|---|---|
размер базы данных | без ограничений | |
количество баз данных | 4 294 950 911 | |
отношений в базе данных | 1 431 650 303 | |
размер отношения | 32 ТБ | со значением BLCKSZ по умолчанию, равным 8192 байта |
строк в таблице | ограничивается количеством кортежей, которое может уместиться в 4 294 967 295 страниц | |
столбцов в таблице | 1600 | дополнительно ограничивается размером кортежа, который может уместиться в одной странице; см. примечание ниже |
размер поля | 1 ГБ | |
длина идентификатора | 63 байта | может быть увеличена при перекомпиляции PostgreSQL |
индексов в таблице | без ограничений | ограничивается максимальным количеством отношений в базе данных |
столбцов в индексе | 32 | может быть увеличена при перекомпиляции PostgreSQL |
ключей секционирования | 32 | может быть увеличена при перекомпиляции PostgreSQL |
Максимальное количество столбцов таблицы дополнительно уменьшается в связи с тем, что сохраняемый кортеж должен умещаться в одной странице размером 8192 байта. Например, если не учитывать размер заголовка, кортеж, состоящий из 1600 столбцов int
, будет занимать 6400 байт и поместится в странице кучи, тогда как 1600 столбцов bigint
займут 12800 байт и в одной странице не поместятся. Поля переменной длины, например типов text
, varchar
и char
, могут храниться отдельно, в таблице TOAST, когда их значения достаточно велики для этого. При этом внутри кортежа кучи должен остаться только 18-байтовый указатель. Для более коротких значений полей переменной длины используется заголовок из 1 или 4 байт, и само значение сохраняется внутри кортежа в куче.
Максимальное количество столбцов может также зависеть от числа столбцов, удалённых из таблицы. И хотя значения удалённых столбцов для создаваемых впоследствии кортежей не хранятся, а только помечаются как NULL в специальной битовой карте, эта карта тоже занимает место.
Postgres Pro Standard : Документация: 9.5: 63.6. Компоновка страницы базы данных : Компания Postgres Professional
63.6. Компоновка страницы базы данных
В данном разделе рассматривается формат страницы, используемый в таблицах и индексах Postgres Pro. Последовательности и таблицы TOAST форматируются как обычные таблицы.
В дальнейшем подразумевается, что байт содержит 8 бит. В дополнение, термин элемент относится к индивидуальному значению данных, которое хранится на странице. В таблице элемент — это строка; в индексе — элемент индекса.
Каждая таблица и индекс хранятся как массив страниц фиксированного размера (обычно 8 kB, хотя можно выбрать другой размер страницы при компиляции сервера). В таблице все страницы логически эквивалентны, поэтому конкретный элемент (строка) может храниться на любой странице. В индексах первая страница обычно резервируется как метастраница, хранящая контрольную информацию, а внутри индекса могут быть разные типы страниц, в зависимости от метода доступа индекса.
Таблица 63.2 показывает общую компоновку страницы. Каждая страница имеет пять частей.
Таблица 63.2. Общая компоновка страницы
Элемент | Описание |
---|---|
Данные заголовка страницы | Длина — 24 байта. Содержит общую информацию о странице, включая указатели свободного пространства. |
Данные идентификаторов элементов | Массив идентификаторов, указывающих на фактические элементы. Каждый идентификатор представляет собой пару «смещение, длина» и занимает 4 байта. |
Свободное пространство | Незанятое пространство. Новые идентификаторы элементов размещаются с начала этой области, сами новые элементы — с конца. |
Элементы | Сами элементы данных как таковые. |
Специальное пространство | Специфические данные метода доступа. Для различных методов хранятся различные данные. Для обычных таблиц таких данных нет. |
Первые 24 байта каждой страницы образуют заголовок страницы (PageHeaderData
). Его формат подробно описан в Таблице 63.3. В первом поле отслеживается самая последняя запись в WAL, связанная с этой страницей. Второе поле содержит контрольную сумму страницы, если включён режим data checksums. Затем идёт двухбайтовое поле, содержащее биты флагов. За ним следуют три двухбайтовых целочисленных поля (pd_lower
, pd_upper
и pd_special
). Они содержат смещения в байтах от начала страницы до начала незанятого пространства, до конца незанятого пространства и до начала специального пространства. В следующих 2 байтах заголовка страницы, в поле pd_pagesize_version
, хранится размер страницы и индикатор версии. Начиная с PostgreSQL 8.3, используется версия 4; в PostgreSQL 8.1 и 8.2 использовалась версия 3; в PostgreSQL 8.0 — версия 2; в PostgreSQL 7.3 и 7.4 — версия 1; а в предыдущих выпусках — версия 0. (Основная структура страницы и формат заголовка почти во всех этих версиях одни и те же, но структура заголовка строк в куче изменялась.) Размер страницы присутствует, в основном, только для перекрёстной проверки; возможность использовать в одной инсталляции разные размеры страниц не поддерживается. Последнее поле подсказывает, насколько вероятна возможность получить выигрыш, произведя очистку страницы: оно отслеживает самый старый XMAX на странице, не подвергавшийся очистке.
Всю подробную информацию можно найти в src/include/storage/bufpage.h
.
За заголовком страницы следуют идентификаторы элемента (ItemIdData
), каждому из которых требуется 4 байта. Идентификатор элемента содержит байтовое смещение до начала элемента, его длину в байтах и несколько битов атрибутов, которые влияют на его интерпретацию. Новые идентификаторы элементов размещаются по мере необходимости от начала свободного пространства. Количество имеющихся идентификаторов элементов можно определить через значение pd_lower
, которое увеличивается при добавлении нового идентификатора. Поскольку идентификатор элемента никогда не перемещается до тех пор, пока он не освобождается, его индекс можно использовать в течение длительного периода времени, чтобы ссылаться на элемент, даже когда сам элемент перемещается по странице для уплотнения свободного пространства. Фактически каждый указатель на элемент (ItemPointer
, также известный как CTID
), созданный Postgres Pro, состоит из номера страницы и индекса идентификатора элемента.
Сами элементы хранятся в пространстве, выделяемом в направлении от конца к началу незанятого пространства. Точная структура меняется в зависимости от того, каким будет содержание таблицы. Как таблицы, так и последовательности используют структуру под названием HeapTupleHeaderData
, которая описывается ниже.
Последний раздел является «особым разделом», который может содержать всё, что необходимо методу доступа для хранения. Например, индексы-B-деревья хранят ссылки на страницы слева и справа, равно как и некоторые другие данные, соответствующие структуре индекса. Обычные таблицы не используют особый раздел вовсе (что указывается установкой значения pd_special
равным размеру страницы).
Все строки таблицы имеют одинаковую структуру. Они включают заголовок фиксированного размера (занимающий 23 байта на большинстве машин), за которым следует необязательная битовая карта пустых значений, необязательное поле идентификатора объекта и данные пользователя. Подробное описание заголовка представлено в Таблице 63.4. Актуальные пользовательские данные (столбцы строки) начинаются после смещения, заданного в t_hoff
, которое должно всегда быть кратным величине MAXALIGN для платформы. Битовая карта пустых значений имеется тогда, когда бит HEAP_HASNULL установлен в значении t_infomask
. В случае наличия, она начинается сразу после фиксированного заголовка и занимает достаточно байтов, чтобы иметь один бит на столбец (т. е. t_natts
битов всего). В этом списке битов установленный в единицу бит означает непустое значение, а установленный в ноль соответствует пустому значению. Когда битовая карта отсутствует, все столбцы считаются непустыми. Идентификатор объекта присутствует, если только бит HEAP_HASOID установлен в значении t_infomask
. Если он есть, он расположен сразу перед началом t_hoff
. Любое заполнение, необходимое для того, чтобы сделать t_hoff
кратным MAXALIGN, будет расположено между битовой картой пустых значений и идентификатором объекта. (Это в свою очередь гарантирует, что идентификатор объекта будет правильно выровнен.)
Всю подробную информацию можно найти в src/include/access/htup_details.h
.
Интерпретация текущих данных может быть проведена с помощью информации, полученной из других таблиц, в основном из pg_attribute
. Ключевые значения, необходимые для определения расположения полей attlen
и attalign
. Не существует способа непосредственного получения заданного атрибута кроме случая, когда имеются только поля фиксированной длины, и при этом нет пустых значений. Все эти особенности учитываются в функциях heap_getattr, fastgetattr и heap_getsysattr.
Чтобы прочитать данные, необходимо просмотреть каждый атрибут по очереди. В первую очередь нужно проверить, является ли значение поля пустым согласно битовой карте пустых значений. Если это так, можно переходить к следующему полю. Затем следует убедиться, что выравнивание является верным. Если это поле фиксированной ширины, берутся просто все его байты. Если это поле переменной длины (attlen = -1), всё несколько сложнее. Все типы данных с переменной длиной имеют общую структуру заголовка struct varlena
, которая включает общую длину сохранённого значения и некоторые биты флагов. В зависимости от установленных флагов, данные могут храниться либо локально, либо в таблице TOAST. Также, возможно сжатие данных (см. Раздел 63.2).
postgresql список и порядок таблиц по размеру — sql
Есть ли простой способ перечислить все таблицы из базы данных PostgreSQL и упорядочить их по размеру?
Псевдокод
SELECT * FROM tables
ORDER by tables.size
Я использую PostgreSQL
9.3.2
.
sql
postgresql
postgresql-9.3
Поделиться
Источник
nothing-special-here
12 февраля 2014 в 20:02
6 Ответов
87
select table_name, pg_relation_size(quote_ident(table_name))
from information_schema.tables
where table_schema = 'public'
order by 2
Это показывает размер всех таблиц в схеме public
если у вас есть несколько схем, вы можете использовать:
select table_schema, table_name, pg_relation_size('"'||table_schema||'"."'||table_name||'"')
from information_schema.tables
order by 3
SQLFiddle пример: http://sqlfiddle.com/#!15/13157/3
Список всех функций размера объекта в руководстве:
https://www.postgresql.org/docs/current/static/functions-admin.html#FUNCTIONS-ADMIN-DBSIZE
Поделиться
a_horse_with_no_name
12 февраля 2014 в 20:07
51
Это покажет вам имя схемы, имя таблицы, размер и размер (необходимый для сортировки).
SELECT
schema_name,
relname,
pg_size_pretty(table_size) AS size,
table_size
FROM (
SELECT
pg_catalog.pg_namespace.nspname AS schema_name,
relname,
pg_relation_size(pg_catalog.pg_class.oid) AS table_size
FROM pg_catalog.pg_class
JOIN pg_catalog.pg_namespace ON relnamespace = pg_catalog.pg_namespace.oid
) t
WHERE schema_name NOT LIKE 'pg_%'
ORDER BY table_size DESC;
Я строю это на основе решений из приведенного здесь списка схем с размерами (относительными и абсолютными) в базе данных PostgreSQL
Поделиться
Kuchi
12 февраля 2014 в 20:19
9
Это будет более понятно.
pg_size_pretty(<numeric_value>)
-преобразует no.of байт в удобочитаемый формат.
pg_database_size(<db_name>)
-возвращает размер базы данных в байтах .
pg_total_relation_size(<relation_name>)
-получает общий размер таблицы и ее индекс в байтах .
pg_relation_size(<relation_name>)
-возвращает размер отношения в байтах .
pg_index_size(<relation_name>)
-возвращает размер индекса отношения в байтах .
current_database()
-возвращает используемую в данный момент базу данных, по которой выполняется данный запрос.
Запрос:
select current_database() as database,
pg_size_pretty(total_database_size) as total_database_size,
schema_name,
table_name,
pg_size_pretty(total_table_size) as total_table_size,
pg_size_pretty(table_size) as table_size,
pg_size_pretty(index_size) as index_size
from ( select table_name,
table_schema as schema_name,
pg_database_size(current_database()) as total_database_size,
pg_total_relation_size(table_name) as total_table_size,
pg_relation_size(table_name) as table_size,
pg_indexes_size(table_name) as index_size
from information_schema.tables
where table_schema=current_schema() and table_name like 'table_%'
order by total_table_size
) as sizes;
Результат:
database | total_database_size | schema_name | table_name | total_table_size | table_size | index_size
-----------+---------------------+-------------+------------+------------------+------------+------------
vigneshdb | 1586 MB | corpdata | table_aaa | 16 kB | 0 bytes | 8192 bytes
vigneshdb | 1586 MB | corpdata | table_bbb | 24 kB | 0 bytes | 16 kB
vigneshdb | 1586 MB | corpdata | table_ccc | 640 kB | 112 kB | 488 kB
vigneshdb | 1586 MB | corpdata | table_ddd | 9760 kB | 3152 kB | 6568 kB
vigneshdb | 1586 MB | corpdata | table_eee | 1120 MB | 311 MB | 808 MB
Гуманизированный формат представлен в bytes
, kB
, MB
, GB
и TB
.
bytes
to kB
-начинается с 10240 bytes
bytes
to MB
-начинается с 10485248 bytes
= 10239.5 kB
~ 10 MB
bytes
to GB
-начинается с 10736893952 bytes
= 10239.5 MB
~ 10 BG
bytes
to TB
-начинается с 10994579406848 bytes
= 10239.5 GB
~ 10 TB
Все преобразования единиц измерения начинаются с 10 + <unit>
.
Для справки- официальная документация Postgres
Поделиться
Vignesh Raja
08 октября 2018 в 16:44
Поделиться
aki
10 марта 2017 в 14:11
2
select table_name,n_live_tup, pg_size_pretty(pg_relation_size(table_name))
from information_schema.tables
inner join pg_stat_user_tables on table_name=relname
where table_schema = 'public'
order by 2 desc
Другая альтернатива
Поделиться
Lauri Lüüs
27 апреля 2015 в 01:38
0
select uv.a tablename, pg_size_pretty(uv.b) sizepretty from
(select tb.tablename a, pg_table_size('schemaname.'||tb.tablename::text) b from pg_tables tb where tb.schemaname ilike 'schemaname' order by 2 desc) uv
Поделиться
Spike
12 января 2016 в 06:00
Похожие вопросы:
Список таблиц в схеме PostgreSQL
Когда я делаю \dt в psql, я получаю только список таблиц в текущей схеме ( public по умолчанию). Как я могу получить список всех таблиц во всех схемах или конкретной схеме?
postgreSql и Rails порядок
Использование PostgreSQL в моем приложении Rails, но порядок метода rails не работает. @[email protected](created_at DESC) Это дает мне те же результаты, что и…
PostgreSQL список таблиц без таблиц схемы
После прочтения документации PostgreSQL я решил, что могу создать абсолютный список имен таблиц в PostgreSQL, используя следующий запрос… SELECT tablename FROM pg_catalog.pg_tables ORDER BY…
Порядок сортировки в postgresql для японских слов в хирагане
У меня есть версия базы данных 9.6.2 postgresql с кодировкой UTF8 и сортировкой en_GB.UTF8. В одной из моих таблиц есть поле, содержащее только японские символы хираганы. Проблема в том, что…
Показывать только имена таблиц при просмотре postgresql таблиц
Поэтому я понятия не имею, как это сделать, и я читал документацию и искал вокруг, но я не могу ничего найти. \d дает мне хороший список всех таблиц и информацию о них, но я хочу иметь возможность…
Bash-список и сортировка файлов и их размеров, а также по имени и размеру
Я пытаюсь понять, как отсортировать список файлов по имени и размеру. Как я могу сортировать файлы по имени и размеру с помощью du-a и не показывать каталоги? Использование du-a 1 ./locatedFiles…
Windows Dir команда-порядок подкаталогов по размеру
Как я могу отобразить подкаталоги папки от самого большого до самого маленького с помощью команды dir? Я пробовал использовать команду dir /O:-S , и хотя она отлично сортирует файлы, похоже, что она…
Mysql список таблиц и размеров-порядок по размеру
Каков будет запрос для перечисления всех таблиц в порядке базы данных по их размеру в mysql?
Имеет ли значение порядок столбцов в таблицах PostgreSQL?
Например, у меня есть таблица users(id, username, email). Есть ли разница между следующими запросами ? (может быть, производительность, или что-нибудь еще) SELECT id, username, email FROM users и…
В google-bigquery, как я могу получить список таблиц порядок по размеру?
Мне нужно перечислить все таблицы BQ в порядке набора данных по размеру, чтобы узнать, что таблицы занимают больше места. Как этого добиться? Спасибо!
Как вывести список баз данных и таблиц PostgreSQL с помощью psql
При администрировании серверов баз данных PostgreSQL одной из наиболее распространенных задач, которую вы, вероятно, будете выполнять, является перечисление баз данных и их таблиц.
PostgreSQL поставляется с интерактивным инструментом, psqlкоторый позволяет вам подключаться к серверу и выполнять запросы к нему. При использовании psqlвы также можете воспользоваться его мета-командами. Эти команды полезны для сценариев и администрирования командной строки. Все мета-команды начинаются с обратного слэша без кавычек и также известны как команды обратного слэша.
В этой статье объясняется, как использовать базы данных и таблицы на сервере PostgreSQL psql.
Листинг баз данных
Вы можете подключиться к серверу PostgreSQL, используя psqlкоманду как любой системный пользователь. В зависимости от конфигурации сервера пользователю может потребоваться ввести свой пароль для подключения к терминалу psql. Чтобы получить доступ к терминалу psql от имени пользователя, в который вы вошли, просто введите psql.
Когда пакет PostgreSQL установлен, создается административный пользователь с именем «postgres». По умолчанию этот пользователь может подключиться к локальному серверу PostgreSQL без пароля.
Чтобы получить доступ к psqlтерминалу как пользователь «postgres», запустите:
sudo -u postgres psql
Команда sudo позволяет запускать команды в качестве другого пользователя.
Из терминала psql выполните мета-команду \l или \list, чтобы вывести список всех баз данных:
\l
Вывод будет включать количество баз данных, имя каждой базы данных, ее владельца, кодирование и привилегии доступа:
List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+----------+----------+---------+---------+----------------------- odoo | odoo | UTF8 | C | C.UTF-8 | postgres | postgres | UTF8 | C.UTF-8 | C.UTF-8 | template0 | postgres | UTF8 | C.UTF-8 | C.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | C.UTF-8 | C.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres (4 rows)
Сервер PostgreSQL имеет три базы данных, созданные по умолчанию: template0, template1 и postgres. Первые два – это шаблоны, которые используются при создании новых баз данных.
Если вы хотите получить информацию о размерах баз данных, табличных пространствах по умолчанию и описаниях, используйте \l+ или \list+. Размер базы данных будет показан, только если текущий пользователь может подключиться к нему.
Чтобы получить список всех баз данных без доступа к оболочке psql, используйте переключатель -c, как показано ниже:
sudo -u postgres psql -c "\l"
Другой способ составить список баз данных – использовать следующий оператор SQL:
SELECT datname FROM pg_database;
В отличие от мета-команды \l, приведенный выше запрос покажет только имена баз данных:
datname ----------- postgres odoo template1 template0 (4 rows)
Таблицы списков
Чтобы получить список всех таблиц конкретной базы данных сначала необходимо подключиться к нему с помощью мета-команды \c или \connect. Пользователь, вошедший в систему как терминал psql, должен иметь возможность подключаться к базе данных.
Например, чтобы подключиться к базе данных с именем «odoo», вы должны набрать:
\c odoo
Как только база данных переключена, используйте мета-команду \dt для вывода списка всех таблиц базы данных:
Вывод будет включать количество таблиц, имя каждой таблицы и ее схему, тип и владельца:
List of relations Schema | Name | Type | Owner --------+-----------------------------------------------------+-------+------- public | base_import_import | table | odoo public | base_import_mapping | table | odoo public | base_import_tests_models_char | table | odoo ... public | web_editor_converter_test_sub | table | odoo public | web_tour_tour | table | odoo public | wizard_ir_model_menu_create | table | odoo (107 rows)
Если база данных пуста, вывод будет выглядеть так:
No relations found.
Для получения информации о размерах таблиц и описаний используйте \dt+.
Заключение
Вы узнали, как составлять список баз данных и таблиц PostgreSQL с помощью команды psql.
Не стесняйтесь оставлять комментарии, если у вас есть какие-либо вопросы.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
postgresql — получить размер разделенной таблицы (Postgres 10+)
Переполнение стека
- Около
Продукты
- Для команд
Переполнение стека
Общественные вопросы и ответыПереполнение стека для команд
Где разработчики и технологи делятся частными знаниями с коллегамиВакансии
Программирование и связанные с ним технические возможности карьерного ростаТалант
Нанимайте технических специалистов и создавайте свой бренд работодателяРеклама
Обратитесь к разработчикам и технологам со всего мира- О компании
Загрузка…
- Авторизоваться
зарегистрироваться текущее сообщество
.
Учебник: размеры таблиц и баз данных в PostgreSQL
Насколько велики таблицы PostgreSQL с точки зрения строк и дискового пространства? Вот некоторые
запросы, чтобы получить их размеры.
Количество строк таблицы
Правильное, но тоже низкопроизводительное решение — подсчитать все строки в таблице.
с таким запросом, как:
ВЫБРАТЬ количество (*)
ОТ table_to_count;
Когда таблица становится большой, подсчет занимает много времени и тем меньше
значащие цифры могут не иметь полезного значения.Например. разница между
3384012984 и 3384012841. Трудно даже увидеть.
Приблизительное, но очень быстрое решение требует одной простой проверки
системная таблица pg_stat_user_tables
, содержащая статистические данные о таблице, которую мы
хотите количество строк. Статистика включает столбец с оценкой
количество активных строк в таблице.
SELECT schemaname,
relname,
n_live_tup
ИЗ pg_stat_user_tables
ГДЕ schemaname = current_schema
ЗАКАЗАТЬ ПО n_live_tup DESC;
Взято из Stackoverflow.
Размер на диске
Наиболее полезными функциями для получения размеров различных объектов на диске являются:
pg_database_size (имя_базы_данных)
pg_relation_size (имя_таблицы)
pg_column_size (имя_столбца)
Для удобства чтения все это можно заключить в
pg_size_pretty ()
функция для получения кБ / МБ / ГБ вместо байтов.
Собираем все вместе
Давайте объединим то, что мы знаем до сих пор, в один запрос для размеров базы данных и один для
размеры стола.Запросы очень полезны как представления .
Размер всех баз данных PostgreSQL
Следующий запрос вычисляет, сколько места в кластере базы данных PostgreSQL.
занимает на вашем диске, а общий итог — в последней строке.
ВЫБРАТЬ pg_database.datname
AS имя_базы_данных,
pg_database_size (pg_database.datname)
AS database_size_bytes,
pg_size_pretty (pg_database_size (pg_database.datname))
AS database_size
ИЗ pg_database
СОЮЗ ВСЕ
ВЫБЕРИТЕ "ИТОГО"
AS имя_базы_данных,
сумма (pg_database_size (pg_database.имя))
AS database_size_bytes,
pg_size_pretty (сумма (pg_database_size (pg_database.datname)))
AS database_size
ИЗ pg_database
ЗАКАЗАТЬ database_size_bytes ASC;
На основе Stackoverflow.
Пример результата
имя_базы_данных | database_size_bytes | database_size
--------------- + --------------------- + ------------ ---
template0 | 7111172 | 6945 кБ
template1 | 7233708 | 7064 кБ
postgres | 7250092 | 7080 кБ
db1 | 7307436 | 7136 кБ
db2 | 7315628 | 7144 кБ
деньги | 8052908 | 7864 кБ
тестирование | 8143020 | 7952 кБ
матязь | 12984492 | 12 МБ
работа | 16572588 | 16 МБ
another_db | 32669868 | 31 МБ
ИТОГО | 114640912 | 109 МБ
Размер всех таблиц в схеме с количеством строк
Вот хороший запрос, который показывает размеры каждой таблицы и связанных с ней объектов
(Данные TOAST,
индексы) для людей, включая количество строк и сумму всех размеров.
Количество строк берется из статистики таблицы, чтобы было быстрее.
ВЫБРАТЬ stats.relname
Таблица AS,
pg_size_pretty (pg_relation_size (statsio.relid))
Как размер_таблицы,
pg_size_pretty (pg_total_relation_size (statsio.relid)
- pg_relation_size (statsio.relid))
AS related_objects_size,
pg_size_pretty (pg_total_relation_size (statsio.relid))
AS total_table_size,
stats.n_live_tup
AS live_rows
ИЗ pg_catalog.pg_statio_user_tables AS statsio
ПРИСОЕДИНЯЙТЕСЬ к pg_stat_user_tables AS stats
ИСПОЛЬЗУЕТСЯ (relname)
WHERE stats.schemaname = current_schema - Заменить любым именем схемы
СОЮЗ ВСЕ
ВЫБЕРИТЕ "ИТОГО"
Таблица AS,
pg_size_pretty (сумма (pg_relation_size (statsio.relid)))
Как размер_таблицы,
pg_size_pretty (сумма (pg_total_relation_size (statsio.relid)
- pg_relation_size (statsio.relid)))
AS related_objects_size,
pg_size_pretty (сумма (pg_total_relation_size (statsio.relid)))
AS total_table_size,
сумма (стат.n_live_tup)
AS live_rows
ИЗ pg_catalog.pg_statio_user_tables AS statsio
ПРИСОЕДИНЯЙТЕСЬ к pg_stat_user_tables AS stats
ИСПОЛЬЗУЕТСЯ (relname)
WHERE stats.schemaname = current_schema - Заменить любым именем схемы
ЗАКАЗАТЬ live_rows ASC;
На основе wiki-bsse.ethz.ch.
Пример результата
стол | table_size | related_objects_size | total_table_size | live_rows
------------------ + ------------ + ------------------ ---- + ------------------ + -----------
пользователи | 25 кБ | 24 кБ | 49 кБ | 100
авторы | 60 кБ | 24 кБ | 84 кБ | 120
книги | 800 кБ | 8192 байта | 8992 кБ | 500
авторы_книг | 1000 кБ | 8192 байта | 9192 кБ | 800
ИТОГО | 1885 кБ | 64 кБ | 1949 кБ | 1520
Повышение точности оценок
Со временем счетчик активных строк может все больше и больше отклоняться от истинного значения.
ценность.Запуск ANALYZE имя_таблицы
обновляет статистику до текущей ситуации.
Когда дело доходит до размеров таблиц и баз данных, удаляет и обновляет кортежи
увеличить размер таблицы по очень простой причине: ее легче (быстрее)
занимают больше места, оставляя в нем пустые разделы после удаления, которые можно
затем используется повторно. Чтобы снова сделать таблицу компактной, команда VACUUM имя_таблицы
имеет
использоваться.
Команды также могут быть объединены в VACUUM ANALYZE имя_таблицы
или даже в
VACUUM FULL ANALYZE
, который будет выполняться для всех таблиц в базе данных за счет
требования исключительной блокировки таблицы.
.
Получить размеры базы данных, таблиц и индексов PostgreSQL
Вот несколько примеров SQL для получения базы данных postgres, размеров индексов таблиц, все они протестированы для postgres 9.1, 9.2 и 9.3.
Получить размеры БД.
ВЫБРАТЬ
pg_database.datname, pg_database_size (pg_database.datname),
pg_size_pretty (pg_database_size (pg_database.datname))
ИЗ pg_database ORDER BY pg_database_size DESC;
имя данных | pg_database_size | pg_size_pretty
-------------- + ------------------ + -------------- -
billing_2012 | 123630289720 | 115 ГБ
биллинг | 114415821624 | 107 ГБ
billing_2011 | 76438053688 | 71 ГБ
pgbench | 6308664 | 6161 Кбайт
template1 | 6308664 | 6161 kB
postgres | 6308664 | 6161 Кбайт
template0 | 6201860 | 6057 кБ
Получить размеры таблиц и индексов
Показывать таблицы и индексы в отдельных строках
ВЫБРАТЬ
nspname, relname, pg_size_pretty (pg_relation_size (c.oid)) как "размер"
из pg_class c левое соединение pg_namespace n на (n.oid = c.relnamespace)
, где nspname не входит в ('pg_catalog', 'information_schema')
порядок по pg_relation_size (c.oid) desc limit 30;
nspname | relname | размер
--------- + -------------------------------- + ----- ----
общественное | t_dirs | 4187 МБ
общедоступные | t_locationinfo | 3874 МБ
общедоступные | t_inodes | 3209 МБ
общедоступные | t_level_2 | 2859 МБ
публично | t_dirs_pkey | 2766 МБ
общедоступных | t_locationinfo_pkey | 2726 МБ
общедоступный | t_acl | 2017 МБ
публичный | i_dirs_iparent | 1856 МБ
общедоступный | i_dirs_ipnfsid | 1833 МБ
общедоступный | i_locationinfo_ipnfsid | 1773 МБ
общедоступные | t_inodes_checksum | 1700 МБ
Чтобы получить размеры таблицы и индекса в одной строке
Поместите таблицу и индексы в одну строку, количество индексов — общее количество для одной таблицы
SELECT
имя_таблицы,
pg_size_pretty (table_size) AS table_size,
pg_size_pretty (indexes_size) AS indexes_size,
pg_size_pretty (total_size) AS total_size (размер_таблицы) AS,
sizeg_таблицы (
size) имя_таблицы
, имя_таблицы indexes_size,
pg_total_relation_size (table_name) AS total_size
FROM (
SELECT ('"' || table_schema || '"."'|| table_name ||'" ') AS table_name
FROM information_schema.tables
) AS all_tables
ORDER BY total_size DESC
) AS pretty_sizes limit 10;имя_таблицы | table_size | indexes_size | total_size
--------------------------------- + ------------ + - ------------- + ------------
"public". "Doorinfo" | 41 ГБ | 12 ГБ | 53 ГБ
"общедоступный". "Billinginfo" | 30 ГБ | 20 ГБ | 50 ГБ
«общедоступный»."billinginfo_tmp" | 1328 МБ | 1174 МБ | 2502 МБ
"общедоступный". "Storageinfo" | 526 МБ | 379 МБ | 904 МБ
"общедоступный". "Billinginfo_stats" | 36 МБ | 21 МБ | 57 МБ
"общедоступный". "Doorinfo_stats" | 12 МБ | 8144 кБ | 20 МБ
"общедоступный". "Storageinfo_stats" | 7568 кБ | 10 МБ | 18 МБ
"pg_catalog". "Pg_statistic" | 1856 кБ | 40 кБ | 1896 kB
"общедоступный". "Billinginfo_tm_daily" | 1440 кБ | 16 кБ | 1456 КБ
«общедоступный»."billinginfo_rd_daily" | 1080 кБ | 16 кБ | 1096 кБ
Получить таблицу, размеры индекса, включая внешний размер
ВЫБЕРИТЕ
relname как "Таблица",
pg_size_pretty (pg_total_relation_size (relid)) как "Размер",
pg_size_pretty (pg_total_relation_size (relid) - pg_total_relation_size (relid) - pg_relation_size (relid_relation_000)) как "Внешний размер" ) DESC limit 10;
Стол | Размер | Внешний размер
---------------------- + --------- + -------------- -
doorinfo | 53 ГБ | 12 ГБ
billinginfo | 50 ГБ | 20 ГБ
billinginfo_tmp | 2502 МБ | 1174 МБ
storageinfo | 904 МБ | 379 МБ
billinginfo_stats | 57 МБ | 21 МБ
doorinfo_stats | 20 МБ | 8184 КБ
storageinfo_stats | 18 МБ | 11 МБ
billinginfo_tm_daily | 1456 кБ | 48 КБ
billinginfo_rd_daily | 1096 кБ | 48 КБ
billinginfo_wr_daily | 888 кБ | 48 кБ
Внешний размер — размер, который принимают связанные объекты этой таблицы, такие как индексы, так называемые всплывающие данные
Быстрый и расчетный номер для БД, размеры таблиц
Если вы хотите быстро получить приблизительные цифры, вот их
Для dbs, чтобы получить размер БД
billing = # \ l + Список баз данных
Имя | Владелец | Кодирование | Сортировка | Ctype | Права доступа | Размер | Табличное пространство |
-------------- + ----------- + ----------- + --------- + ------ + ----------------- + -------- + ------------ +
биллинг | srmdcache | SQL_ASCII | C | C | | 107 ГБ | pg_default |
billing_2011 | srmdcache | SQL_ASCII | C | C | | 71 ГБ | pg_default |
billing_2012 | srmdcache | SQL_ASCII | C | C | | 115 ГБ | pg_default |
Чтобы получить примерное количество размера стола
\ д +
А как насчет колонки? Что проверить, сколько места занимает столбец в таблице? см. Как оценить размер одного столбца в таблице
postgres.
PostgreSQL — общие — Re: размер таблицы Postgres
21 ноября 2007 г. в 9:17 ШАРМИЛА ДЖОТИРАДЖА написала:
> Привет
> Спасибо. Я отправлю его в список рассылки, когда получу результаты. Я
> пытаясь вычислить и посмотреть, как работает размер таблицы для простого
> таблица.
>
> У меня есть таблица с 10 столбцами
> 5 varchars _ он объявлен как varchar (40), но содержит данные
> длина 3
> 5 numeric — объявлен как numeric (22,0), но содержит данные
> точность 10
> Всего 10000 строк
>
> select * from pg_relation_size дает 1548288 байт в качестве размера таблицы
> выберите relpages из pg_class для этой таблицы дает 189 страниц
>
> Расчет
> varchar = (накладные расходы) 4 + (фактическая длина строки) 3 = 7 байтов
> * для 5 varchar cols =
> 5 * 7 = 35 байт
>
> числовой (согласно руководству — фактические требования к памяти
> два байта для каждой группы из четырех десятичных цифр плюс восемь байтов
> накладные расходы)
> числовой = (10/4) * 2 +8 = 13 байтов
> * для 5 числовых столбцов = 13 * 5 = 65
Не то чтобы это будет иметь большое значение, но вам нужно округлить в
часть 10/4, поэтому вы получите 14 байтов, а не 13.
>
> * накладные расходы строки = 32
>
> Так
> Байт в строке = 35 + 65 +32 = 132 байта
> для 10000 строк = 1320000
>
> В руководстве сказано: — Первые 20 байтов каждой страницы состоят из
> заголовок страницы (PageHeaderData).
> Всего 189 страниц
> * стоимость заголовка страницы = 20 * 189 = 3780 байт
>
> Следовательно, Итого = 1320000 (стоимость строки) + 3780 (стоимость заголовка страницы)
> = 1323780 байт для этой таблицы
>
> Это правильный расчет? Но размер таблицы по
> pg_relation_size — 1548288 байт
>
> Что я упускаю в расчет?
Следует отметить, что значение relpages является точным только из
время вакуума до следующего оператора dml в таблице, т.е.е.
relpages не обновляются после вставки, обновления и удаления, просто
после вакуума.
Эрик Джонс
Разработчик программного обеспечения | Эмма®
[скрытый адрес электронной почты]
800.595.4401 или 615.292.5888
615.292.0777 (факс)
Эмма помогает организациям повсюду общаться и продвигать свой бизнес.
Посетите нас на сайте http://www.myemma.com
————————— (конец трансляции) — ————————-
СОВЕТ 2: Не убивайте -9 почтмейстера
.