powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Zabbix + Postgresql + table partitioning
6 сообщений из 6, страница 1 из 1
Zabbix + Postgresql + table partitioning
    #39343161
pernatius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток!

Столкнулся со следующей проблемой:

Есть БД zabbix 3.2, в которой сделано партицирование таблиц .
Периодически начинается потеря данных, в логах появляются следующие сообщения:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
2016-11-03 00:00:14 MSK [13644-1] zabbix@zabbix ОШИБКА:  отношение "history_text_p2016_11_03" уже существует
2016-11-03 00:00:14 MSK [13644-2] zabbix@zabbix КОНТЕКСТ:  SQL-оператор: "CREATE TABLE IF NOT EXISTS partitions.history_text_p2016_11_03 (CHECK ((clock >= '1478120400' AND clock < '1478206800'))) INHERITS (history_text)"
        функция PL/pgSQL trg_partition(), строка 37, оператор EXECUTE
2016-11-03 00:00:14 MSK [13644-3] zabbix@zabbix ОПЕРАТОР:  insert into history_text (itemid,clock,ns,value) values (62803,1478120400,494386293,'0:27:22:8:fd:1d');
2016-11-03 00:00:16 MSK [13672-1] zabbix@zabbix ОШИБКА:  отношение "history_uint_p2016_11_03" уже существует
2016-11-03 00:00:16 MSK [13672-2] zabbix@zabbix КОНТЕКСТ:  SQL-оператор: "CREATE TABLE IF NOT EXISTS partitions.history_uint_p2016_11_03 (CHECK ((clock >= '1478120400' AND clock < '1478206800'))) INHERITS (history_uint)"
        функция PL/pgSQL trg_partition(), строка 37, оператор EXECUTE
2016-11-03 00:00:16 MSK [13672-3] zabbix@zabbix ОПЕРАТОР:  insert into history_uint (itemid,clock,ns,value) values (64137,1478120401,736445600,7339),(89879,1478120402,328329957,0),(89885,1478120402,328329957,1192),(89884,1478120402,328329957,12040),(89878,1478120402,328329957,0),(89880,1478120402,328329957,0),(89882,1478120402,328329957,600),(89881,1478120402,328329957,0),(89883,1478120402,328329957,12696);
2016-11-03 00:00:16 MSK [13632-1] zabbix@zabbix ОШИБКА:  отношение "history_uint_p2016_11_03" уже существует
2016-11-03 00:00:16 MSK [13632-2] zabbix@zabbix КОНТЕКСТ:  SQL-оператор: "CREATE TABLE IF NOT EXISTS partitions.history_uint_p2016_11_03 (CHECK ((clock >= '1478120400' AND clock < '1478206800'))) INHERITS (history_uint)"
        функция PL/pgSQL trg_partition(), строка 37, оператор EXECUTE
2016-11-03 00:00:16 MSK [13632-3] zabbix@zabbix ОПЕРАТОР:  insert into history_uint (itemid,clock,ns,value) values (48650,1478120399,692852967,147),(58023,1478120403,602893387,1),(58443,1478120403,607699103,1),(58083,1478120403,610572547,192480),(90603,1478120403,612943123,16);
2016-11-03 00:00:16 MSK [13649-1] zabbix@zabbix ОШИБКА:  отношение "history_uint_p2016_11_03" уже существует
2016-11-03 00:00:16 MSK [13649-2] zabbix@zabbix КОНТЕКСТ:  SQL-оператор: "CREATE TABLE IF NOT EXISTS partitions.history_uint_p2016_11_03 (CHECK ((clock >= '1478120400' AND clock < '1478206800'))) INHERITS (history_uint)"
        функция PL/pgSQL trg_partition(), строка 37, оператор EXECUTE
2016-11-03 00:00:16 MSK [13649-3] zabbix@zabbix ОПЕРАТОР:  insert into history_uint (itemid,clock,ns,value) values (30900,1478120400,218717867,1);
2016-11-03 00:00:16 MSK [13652-1] zabbix@zabbix ОШИБКА:  отношение "history_uint_p2016_11_03" уже существует
2016-11-03 00:00:16 MSK [13652-2] zabbix@zabbix КОНТЕКСТ:  SQL-оператор: "CREATE TABLE IF NOT EXISTS partitions.history_uint_p2016_11_03 (CHECK ((clock >= '1478120400' AND clock < '1478206800'))) INHERITS (history_uint)"
        функция PL/pgSQL trg_partition(), строка 37, оператор EXECUTE



Подскажите, пожалуйста: в чем может быть косяк?
...
Рейтинг: 0 / 0
Zabbix + Postgresql + table partitioning
    #39343255
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pernatius,

Смотреть функцию `trg_partition()` и думать, почему такая няшка получается.
...
Рейтинг: 0 / 0
Zabbix + Postgresql + table partitioning
    #39343291
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vyegorovpernatius,

Смотреть функцию `trg_partition()` и думать, почему такая няшка получается.
дык у тС битым текстом написано, почему так получается. потому что " IF NOT EXISTS " кляуза реализована в пж через ж (хорошо, что не через "П") и в конкурентной среде имеем например%

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
---1
begin;
 create table IF NOT EXISTS t (id bigint);
--2
begin;
 create table IF NOT EXISTS t (id bigint);
--1
commit;
--2
commit;
----------
ERROR:  duplicate key value violates unique constraint "pg_type_typname_nsp_index"
DETAIL:  Key (typname, typnamespace)=(t, 2200) already exists.
--------- 9.3.13 тестовый



т.е. я всегда выбрасываю в своих триггерах "IF NOT EXISTS" -- т.к. мне ещё кучу обвеса одной транзой создавать, и лучше вылетать по ошибке тут, чем много раз налетать на ошибки дублирования подчиненных объектов (чеков, индексов, и т.п.). и сам обрабатываю ошибку "тейбл олреди екзистс" и прочие "дубликейт обжект". --- возвращаясь в ветку вставки такого триггера.

ЗЫ а само создание всегда выношу в автномию (дблинк) -- т.к. оно дорогое -- откатываться дорого.
...
Рейтинг: 0 / 0
Zabbix + Postgresql + table partitioning
    #39343298
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwq,

думаецца оно там унутре организовано через ~try select некое_unique from pg_type for update
(неонка такая)
а надо бы дообвесить xact адвайзори локом хеша от hash("schema"."name") -- для полной сериализации доступа к абстракции "schema"."name". но. думаю, вряд ли сделают.
...
Рейтинг: 0 / 0
Zabbix + Postgresql + table partitioning
    #39343430
pernatius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Т.е., насколько я понял, есть варианты:

убирать триггеры партицирования и реализовывать через внешний скрипт;

переписывать триггер, убирая из него "CREATE TABLE IF NOT EXISTS"(делать проверку на существование партиции);

Верно?
...
Рейтинг: 0 / 0
Zabbix + Postgresql + table partitioning
    #39343539
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pernatiusТ.е., насколько я понял, есть варианты:

убирать триггеры партицирования и реализовывать через внешний скрипт;

переписывать триггер, убирая из него "CREATE TABLE IF NOT EXISTS"(делать проверку на существование партиции);

Верно?
не совсем.
надо просто добавить обработку ексепшена после "CREATE TABLE IF NOT EXISTS", а проверку существования в системных до попытки криейта никогда не вредно сделать -- она уменьшит число проходимых "exception when", и , сл--но, скорость прироста счетчика транзакций (кол-во сейвпойнтов -- т.к. в очень больших системах это критично для предотвращения перегрузки по вакуум--фризу -- т.е. предотвращения враперраунда, особенно если через такой триггер проходят вставки больших пачек по 100--1000 рядов на стейтмент)
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Zabbix + Postgresql + table partitioning
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]