Допустим, со временем базы данных заняла на диске достаточно много места, в результате чего требуется либо удаление лишних данных, либо увеличение дискового пространства для баз.
Увеличение дискового пространства - это крайний случай, поэтому сначала нужно освободить место избавлением от мусора.
Узнаем самые большие базы:
SELECT
T.DATNAME as DBNAME
,PG_SIZE_PRETTY(PG_DATABASE_SIZE(T.DATNAME)) as SIZE
,round((CAST(PG_DATABASE_SIZE(T.datname) / 1024 AS numeric) / 1024) / 1024, 2) AS SizeInGb
,round(CAST(PG_DATABASE_SIZE(T.datname) / 1024 AS numeric) / 1024, 2) AS SizeInMb
,round(PG_DATABASE_SIZE(T.datname) / 1024) AS SizeInKb
,PG_DATABASE_SIZE(T.datname) AS SizeInBytes
FROM PG_DATABASE T
ORDER BY PG_DATABASE_SIZE(T.DATNAME) DESC;
Узнали топовую базу, подключаемся к ней командой \c и выводим топовые таблицы:
SELECT ((pg_total_relation_size(CAST(t.tablename as text))/1024)/1024)/1024 as SizeGb ,(pg_total_relation_size(CAST(t.tablename as text))/1024)/1024 as SizeMb ,t.* from pg_tables as t where t.tablename not like 'sql_%' and t.tablename not like 'tt%' order by SizeMb desc limit 50;
или
SELECT
T.RELNAME AS TABLENAME
,round((CAST( (T.RELPAGES * 8) AS numeric) /1024)/1024, 2) AS SizeInGb
,round((T.RELPAGES * 8)/1024, 2) AS SizeInMb
,T.RELPAGES AS PAGES
,8 AS SizeOf1PageKb
,(T.RELPAGES * 8) AS SizeInKb
FROM
PG_CLASS AS T
ORDER BY
T.RELPAGES DESC
LIMIT
100;
Узнаем размер каждой строки (весомейшие строки)
select
t.column1 ,t.column2 ,t.column3
(pg_column_size(t.column1) +
pg_column_size(t.column2) +
pg_column_size(t.column3))/1024/1024 as rowsizeMb
,(pg_column_size(t.column1) +
pg_column_size(t.column2) +
pg_column_size(t.column3))/1024 as rowsizeKb
from table1 as t order by rowsizeKb desc limit 1000;
Комментариев нет:
Отправить комментарий