Postgres проверяет наличие новых строк - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть множество довольно больших таблиц (300-400 таблиц, ~ 30 миллионов строк каждая).Каждый день (один раз в день) я должен проверять, были ли какие-либо новые строки вставлены в какую-либо из этих таблиц.Возможное количество вставленных строк может варьироваться от 0 до 30 миллионов строк.Строки не будут удалены.

В данный момент я проверяю, были ли добавлены какие-либо новые строки, используя приблизительное количество.А затем сравните его с предыдущим (вчера) результатом.

SELECT reltuples FROM pg_class WHERE oid='tablename'::regclass;

Главное, я сомневаюсь: как скоро будет обновлено reltuples, если, например, будет вставлено 3000 строк (или вставлено 5 строк)?И приблизительное количество хорошее решение для этого случая?

Мои параметры конфигурации:

autovacuum_analyze_threshold: 50
autovacuum_analyze_scale_factor: 0.1

1 Ответ

0 голосов
/ 05 февраля 2019

reltuples будет обновляться всякий раз, когда запускается VACUUM (ir autovacuum), поэтому это число обычно имеет погрешность 20%.

Вы получите более точную оценку числа строк втаблица из представления статистики таблицы:

SELECT n_live_tup
FROM pg_stat_user_tables
WHERE schemaname = 'myschema' AND relname = 'mytable';

Это число обновляется сборщиком статистики, поэтому не гарантируется точность на 100% (задействован сокет UDP), и может потребоватьсянемного времени для того, чтобы эффекты модификации данных были там видны.

Тем не менее, зачастую это более точная оценка, чем reltuples.

...