LINUX.ORG.RU
ФорумAdmin

Postgresql

 ,


0

1

Добрый день, подскажите есть сервер aggregate на postgresql. При работе даже если ничего не редактировать создаётся огромный файл в base из n-го количество гигабайтных файлов. Они создаются. База разрастается в день на 6, 10 гб. Vacuum удаляет мегабайт 200. База ссовсем небольшая одна модель и виджеты. Поскажите из-за чего происходит разрастание бд и как это лечиться?

огромный файл в base из n-го количество гигабайтных файлов

Может *файлы?

Postgres хранит данные в 8K страницах, которые находятся в файлах 1G

База разрастается в день на 6, 10 гб

Не конкретно сказал. Весь каталог PGDATA или PGDATA/base? Если первое, то скорее всего это WAL в PGDATA/pg_xlog, их удалять нельзя. Они могут расти из-за использования replication slot, который висит без дела (реплика не забирает из него данные). Еще pg_xlog может расти, если установлены большие значения параметров отвечающих за wal в postgresql.conf. Также возможно разрастание PGDATA/pg_log, там обычные логи работы сервера хранятся. Может туда пишутся запросы чтения (ведь ты не «редактируешь»).

Vacuum удаляет мегабайт 200

Vacuum физически освобождает место только если ненужные страницы находятся в конце того файла 1G.

Поскажите из-за чего происходит разрастание бд и как это лечиться?

Есть еще bloat - распухание, но это если делать много UPDATE, DELETE и в некоторых случаях INSERT.

uspen ★★★★★ ()
Ответ на: комментарий от uspen

Сегодня при работе сервера 5 часов, создалось 4 гигабайтных файла в /base. Проект на сервере почти пустой Из-за может писать такой обьем? Есть готовые проекты сервера обьем информации там больша раз в 10. Делаем вакуум /base становится на 500mb

egor235 (06.10.2016

egor235 ()
Ответ на: комментарий от vel

Этот раздел я изучал, писал по аналогии запросы пишет по ним 0 row в таблице. определил самую весомую таблицу, это pg_largeobject

egor235 ()
Ответ на: комментарий от egor235

Так у тебя блотятся таблицы? Если так, то нужно либо пожестче автовакуумы настраивать, либо пересматривать архитектуру.

Посмотреть че почем в плане размера таблиц, вот запросик дарю.

 SELECT ns.nspname AS schema,
    t.relname AS tablename,
    t.reltuples AS num_rows,
    pg_size_pretty(pg_total_relation_size(t.oid::regclass)) AS table_size,
    ts.spcname AS table_tablespace,
    i.indexname,
    pg_size_pretty(pg_total_relation_size(i.oid::regclass)) AS index_size,
    i."unique",
    i.number_of_scans,
    i.tuples_read,
    i.tuples_fetched,
    i.index_tablespace
   FROM pg_class t
     LEFT JOIN ( SELECT ts_1.oid,
            ts_1.spcname
           FROM pg_tablespace ts_1) ts ON t.reltablespace = ts.oid
     JOIN pg_namespace ns ON t.relnamespace = ns.oid
     LEFT JOIN ( SELECT c.oid,
            x.indrelid,
            c.relname AS indexname,
                CASE
                    WHEN x.indisunique THEN 'Y'::text
                    ELSE 'N'::text
                END AS "unique",
            psai.idx_scan AS number_of_scans,
            psai.idx_tup_read AS tuples_read,
            psai.idx_tup_fetch AS tuples_fetched,
            ts_1.spcname AS index_tablespace
           FROM pg_class c
             LEFT JOIN pg_tablespace ts_1 ON c.reltablespace = ts_1.oid,
            pg_index x,
            pg_stat_all_indexes psai
          WHERE c.oid = x.indexrelid AND c.relkind = 'i'::"char" AND x.indexrelid = psai.indexrelid) i ON t.oid = i.indrelid
  WHERE t.relkind = 'r'::"char"
  ORDER BY (pg_total_relation_size(t.oid::regclass)) DESC, ns.nspname, t.relname;

v9lij ★★★★★ ()
Ответ на: комментарий от uspen

А если сделать максимальный объем этих файлов не 1 gb, а 100mb их будет больше, но зато лучше.вакуум будет делать, если да то как менять размер?

egor235 ()
Ответ на: комментарий от egor235

Сделай еще такой запрос. Это table bloat. Зайди в базу, сделай

CREATE EXTENSION pgstattuple;


Затем

select nspname,
relname,
pg_size_pretty(relation_size + toast_relation_size) as total_size,
pg_size_pretty(toast_relation_size) as toast_size,
round(((relation_size - (relation_size - free_space)*100/fillfactor)*100/greatest(relation_size, 1))::numeric, 1) table_waste_percent,
pg_size_pretty((relation_size - (relation_size - free_space)*100/fillfactor)::bigint) table_waste,
round(((toast_free_space + relation_size - (relation_size - free_space)*100/fillfactor)*100/greatest(relation_size + toast_relation_size, 1))::numeric, 1) total_waste_percent,
pg_size_pretty((toast_free_space + relation_size - (relation_size - free_space)*100/fillfactor)::bigint) total_waste
from (
    select nspname, relname,
    (select free_space from pgstattuple(c.oid)) as free_space,
    pg_relation_size(c.oid) as relation_size,
    (case when reltoastrelid = 0 then 0 else (select free_space from pgstattuple(c.reltoastrelid)) end) as toast_free_space,
    coalesce(pg_relation_size(c.reltoastrelid), 0) as toast_relation_size,
    coalesce((SELECT (regexp_matches(reloptions::text, E'.*fillfactor=(\\d+).*'))[1]),'100')::real AS fillfactor
    from pg_class c
    left join pg_namespace n on (n.oid = c.relnamespace)
    where nspname not in ('pg_catalog', 'information_schema')
    and nspname !~ '^pg_toast' and relkind = 'r'
    --put your table name/mask here
    and relname ~ ''
) t
order by (toast_free_space + relation_size - (relation_size - free_space)*100/fillfactor) desc
limit 20;

uspen ★★★★★ ()
Ответ на: комментарий от egor235

Все хорошо и база маленькая :-)

bloat нет.

Значит смотри настройки и то, что я выше писал, куда можно копать

uspen ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.