суббота, 5 октября 2019 г.

Топ самых объемных баз, таблиц, строк в базе PostgreSQL


Допустим, со временем базы данных заняла на диске достаточно много места, в результате чего требуется либо удаление лишних данных, либо увеличение дискового пространства для баз.
Увеличение дискового пространства - это крайний случай, поэтому сначала нужно освободить место избавлением от мусора.

Узнаем самые большие базы:
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;



Комментариев нет:

Отправить комментарий