Сжатие базы данных

Pavel Bobrovnikov
Дата: 05.02.2015 10:22:52
Ребьзя, привет.

Исследуем тему миграции 1С (в частности СУБД) с MSSQL на PostgreSQL.

Сразу к делу:
У меня есть база (приложение - 1С) на MS SQL (2012) в несжатом виде (data_compression = NONE) весит 20 Гб.
Мы ее экспортируем в dt-файл и загружаем в Postgres 9.2 от 1С (собран со всеми последними патчами по исходникам).
База превращается в 34 Гб.

Насколько я уже успел начитаться, в PostgreSQL по умолчанию сжатие, аналогичное data_compression в MSSQL, включено.
Единственное, что я нашел в Google, так это поменять тип хранения у столбца в таблице, например:

ALTER TABLE _accumrg13793 ALTER COLUMN _fld13807_rrref SET STORAGE 'сюда напиши что-нить из TOAST';

Вопросы:

1) Какие есть еще варианты?
2) Получается надо в каждой таблице, для каждого столбца это сделать? поможет ли это?
Pavel Bobrovnikov
Дата: 05.02.2015 11:01:27
Привожу результаты запроса:

select
  pg_relation_size(c.oid) as size,
  ns.nspname,
  (select relname from pg_class where reltoastrelid=c.oid) as parent,
  c.relname, c.relkind, c.relpages, c.reltuples
from pg_class c
  join pg_namespace ns on ns.oid=c.relnamespace
order by size desc
limit 20
Pavel Bobrovnikov
Дата: 05.02.2015 11:16:55
Первые 20 записей:

size nspname parent relname relkind relpages reltuples
1244233728 public _document274 r 151884 671673
1112047616 public _inforg15522 r 135748 527974
864837632 public _accumrgt13527 r 105571 5.80627e+06
825139200 public _accum13527_bydims_trrrtrn i 100725 5.80627e+06
690765824 public _accumrgt14294 r 84322 4.63767e+06
684277760 public _inforg13419 r 83530 3.59176e+06
658259968 public _accum14294_bydims_trrrr i 80354 4.63767e+06
624795648 public _accumrgt14112 r 76269 4.65244e+06
579813376 public _accum14112_bydims_trrr i 70778 4.65244e+06
565846016 public _document359_vt10651 r 69073 3.59176e+06
532094976 public _accumrg14093 r 64953 1.75089e+06
492863488 public _inforg12136 r 60164 3.27958e+06
474693632 public _accumrgt13742 r 57946 2.95277e+06
450297856 public _accum13742_bydims_trrrnr i 54968 2.95277e+06
409550848 public _accumrg13529 r 49994 1.89976e+06
402710528 pg_toast config pg_toast_140510 t 0 0
392462336 public _infor12136_byresource12150_snnnnnnn i 47908 3.27958e+06
378585088 public _infor13419_byperiod_trrr i 46214 3.59176e+06
372121600 public _document338 r 45425 183608
лопата
Дата: 05.02.2015 11:39:05
Pavel Bobrovnikov
Первые 20 записей:

sizenspnameparentrelnamerelkindrelpagesreltuples
1244233728public_document274r151884671673
1112047616public_inforg15522r135748527974
864837632public_accumrgt13527r1055715.80627e+06
825139200public_accum13527_bydims_trrrtrni1007255.80627e+06
690765824public_accumrgt14294r843224.63767e+06
684277760public_inforg13419r835303.59176e+06
658259968public_accum14294_bydims_trrrri803544.63767e+06
624795648public_accumrgt14112r762694.65244e+06
579813376public_accum14112_bydims_trrri707784.65244e+06
565846016public_document359_vt10651r690733.59176e+06
532094976public_accumrg14093r649531.75089e+06
492863488public_inforg12136r601643.27958e+06
474693632public_accumrgt13742r579462.95277e+06
450297856public_accum13742_bydims_trrrnri549682.95277e+06
409550848public_accumrg13529r499941.89976e+06
402710528pg_toastconfigpg_toast_140510t00
392462336public_infor12136_byresource12150_snnnnnnni479083.27958e+06
378585088public_infor13419_byperiod_trrri462143.59176e+06
372121600public_document338r45425183608


-- тест
tadmin
Дата: 05.02.2015 12:53:41
Pavel Bobrovnikov
База превращается в 34 Гб.

Для начала сделайте vacuum full & reindex (иногда быстрее сделать pg_dump а потом pg_restore в отдельную базу)
Восстановление из dt - довольно специфичная процедура. Возможно, база уменьшится.
Pavel Bobrovnikov
Дата: 05.02.2015 13:04:55
Хорошо. Как закончится, сообщу результаты.
Maxim Boguk
Дата: 05.02.2015 14:07:17
Pavel Bobrovnikov
Ребьзя, привет.

Исследуем тему миграции 1С (в частности СУБД) с MSSQL на PostgreSQL.

Сразу к делу:
У меня есть база (приложение - 1С) на MS SQL (2012) в несжатом виде (data_compression = NONE) весит 20 Гб.
Мы ее экспортируем в dt-файл и загружаем в Postgres 9.2 от 1С (собран со всеми последними патчами по исходникам).
База превращается в 34 Гб.

Насколько я уже успел начитаться, в PostgreSQL по умолчанию сжатие, аналогичное data_compression в MSSQL, включено.
Единственное, что я нашел в Google, так это поменять тип хранения у столбца в таблице, например:

ALTER TABLE _accumrg13793 ALTER COLUMN _fld13807_rrref SET STORAGE 'сюда напиши что-нить из TOAST';

Вопросы:

1) Какие есть еще варианты?
2) Получается надо в каждой таблице, для каждого столбца это сделать? поможет ли это?


всеравно что не делай скорее всего будет по размеру больше чем в mssql (по целому ряду причин).
Но всеравно попробуйте vacuum full+reindex (на время этой процедуры база будет недоступна) может гигов 5-10 освободите.
Pavel Bobrovnikov
Дата: 05.02.2015 14:26:40
vaccum full прошел.
reindex прошел.

Размер изменился на 1 Гб в минус.

postgres=# select t1.datname AS db_name,
       pg_size_pretty(pg_database_size(t1.datname)) as db_size
from pg_database t1
order by pg_database_size(t1.datname) desc;
  db_name   | db_size
------------+---------
 test_1c    | 33 GB 
(7 rows)
Гость_0
Дата: 06.02.2015 11:25:07
Pavel Bobrovnikov
У меня есть база (приложение - 1С) на MS SQL (2012) в несжатом виде (data_compression = NONE) весит 20 Гб.
Мы ее экспортируем в dt-файл и загружаем в Postgres 9.2 от 1С (собран со всеми последними патчами по исходникам).
База превращается в 34 Гб.
Это норма, беспокоиться по этому поводу не нужно.
Pavel Bobrovnikov
Дата: 06.02.2015 12:51:57
это только одна база :)
У нас еще некоторые базы по 200-300 и 500 Гб в сжатом(data_compression=page) виде..
Получается, что выходи один - подключать большие диски?

А что скажите по поводу данной команды:

ALTER TABLE _accumrg13793 ALTER COLUMN _fld13807_rrref SET STORAGE 'сюда напиши что-нить из TOAST';


Когда ее надо применять?