Разное

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+)

Переполнение стека

  1. Около
  2. Продукты

  3. Для команд
  1. Переполнение стека
    Общественные вопросы и ответы

  2. Переполнение стека для команд
    Где разработчики и технологи делятся частными знаниями с коллегами

  3. Вакансии
    Программирование и связанные с ним технические возможности карьерного роста

  4. Талант
    Нанимайте технических специалистов и создавайте свой бренд работодателя

  5. Реклама
    Обратитесь к разработчикам и технологам со всего мира

  6. О компании

Загрузка…

  1. Авторизоваться
    зарегистрироваться

  2. текущее сообщество

    .

    Учебник: размеры таблиц и баз данных в 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 почтмейстера

    .

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *