Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Откуда Access Share Lock на не участвующей в запросе партиции? / 9 сообщений из 9, страница 1 из 1
18.09.2015, 23:52
    #39055772
BorisPlus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Откуда Access Share Lock на не участвующей в запросе партиции?
Здравствуйте.
Столкнулся с такой ситуацией.
Есть секционированная таблица. Данных очень много, года за 3-4. Секционирование классическое, если так можно сказать, разбиение по дням, таймстемп поле должно быть в пределах времени суток с 00:00:00 по 23:59:59.
Ограничение check в секционировании работает.
Делаю EXPLAIN SELECT запроса за двое конкретных суток, выдает что да, действительно, будет в запросе задействовано две секции и именно за эти сутки.

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

Задача такова. Нужно сделать пользовательскую хранимую функцию,Здравствуйте.
Столкнулся с такой ситуацией.
Есть секционированная таблица. Данных очень много, года за 3-4. Секционирование классическое, если так можно сказать, разбиение по дням, таймстемп поле должно быть в пределах времени суток с 00:00:00 по 23:59:59.
Ограничение check в секционировании работает.
Делаю EXPLAIN SELECT запроса за двое конкретных суток, выдает что да, действительно, будет в запросе задействовано две секции и именно за эти сутки.

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

Задача такова. Нужно сделать пользовательскую хранимую pgsql функцию, которая выбирает из первой секционированной таблицы данные и кладет их в создаваемую в данной функции таблицу результатов, назову ее часть 1, и из второй таблицы тоже, но в другую создаваемую в этой же функции таблицу результатов, назову - часть 2.

Алгоритмически это все мелочи. Реализация есть, так сказать.

При исполнении извлечения только по части 1, все проходит, как и только по части 2.
Но если делаю и Часть 1, и Часть 2 последовательно в одной pgsql функции, то возникает исключение - нехватка разделяемой памяти, попробуйте увеличить max_locks_per_transaction.

Комп серверный, пока с одним восьмиядерным процессороми и 48 Гб оперативы.
Postgres версии 9.3 настраивал через чей-то вебовский в Интернете pgtune.
Может ошибаюсь, но параметры в конфигурации сейчас таковы ( простите за транслит)
соединений = 100
макслокспертранзакшн = 128
шаредмемори = 12Гб

Заглянул в pg_locks, а там при исполнении, например Части 1, стоят блокировки AccessShareLock на абсолютно всех партициях, даже тех, что и в выборке не участвует, каких и в EXPLAIN SELECT нет. Так и должно быть? отсюда берется превышенный лимит блокировок в рамках одной транзакции? Вычислять конкретные секции не хотелось бы. Как быть?

Сейчас все осложнено еще тем,что идет интенсивная, хотя и сбалансированная по нагрузке на процессор, загрузка данных в эту базу. загрузка происходит в конкретные партиции, так просто реализовано. По той же самой причине, применять костыльвторой раз не хочу. О ее оптимизации я спрошу позже. которая выбирает из первой таблицы данные и кладет их в создаваемую в данной функции таблицу результатов, назову ее часть 1, и из второй таблицы тоже, но в другую создаваемую в этой же функции таблицу результатов, назову часть 2.

Алгоритмически это все мелочи. Реализация есть, так сказать.

При исполнении извлечения только по части 1, все проходит, как и только по части 2.
Но если делаю и Часть 1, и Часть 2 последовательно в одной pgsql функции, то возникает исключение - нехватка разделяемой памяти, попробуйте увеличить max_locks_per_transaction.

Комп серверный, пока с одним восьмиядерным процессороми и 48 Гб оперативы.
Postgres версии 9.3 настраивал через чей-то вебовский в Интернете pgtune.
Может ошибаюсь, но параметры в конфигурации сейчас таковы ( простите за транслит)
соединений = 100
макслокспертранзакшн = 128
шаредмемори = 12Гб

Заглянул в pg_locks, а там при исполнении, например Части 1, стоят блокировки AccessShareLock на абсолютно всех партициях, даже тех, что и в выборке не участвует, каких и в EXPLAIN SELECT нет. Так и должно быть? отсюда берется превышенный лимит блокировок в рамках одной транзакции? Вычислять конкретные секции не хотелось бы. Как быть?

Сейчас все осложнено еще тем,что идет интенсивная, хотя и сбалансированная по нагрузке на процессор, загрузка данных в эту базу. загрузка происходит в конкретные партиции, так просто реализовано. Видать по той же самой причине. О ее оптимизации я спрошу позже.

Забыл сказать, у секций одной и тоже родительской таблицы id поле берется из одной серии, наследуется.
Запросы в функции исполняются через EXECUTE <шаблон>, так как запрос в виде строки формируется динамически ( имена таблиц результатов формируются динамически).

Нужна ваша помощь, благодарю заранее.
...
Рейтинг: 0 / 0
19.09.2015, 00:53
    #39055784
Ivan Durak
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Откуда Access Share Lock на не участвующей в запросе партиции?
функция, план считает зарание, не зная переменных
...
Рейтинг: 0 / 0
19.09.2015, 11:15
    #39055863
BorisPlus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Откуда Access Share Lock на не участвующей в запросе партиции?
не понял
...
Рейтинг: 0 / 0
19.09.2015, 13:58
    #39055955
suh
suh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Откуда Access Share Lock на не участвующей в запросе партиции?
та же проблема: http://www.postgresql.org/message-id/d849ad2a0708300907r79891c73h70b3fa024ba018e5@mail.gmail.com]http://www.postgresql.org/message-id/d849ad2a0708300907r79891c73h70b3fa024ba018e5@mail.gmail.com

ответ: http://www.postgresql.org/message-id/6726.1188499386@sss.pgh.pa.us]http://www.postgresql.org/message-id/6726.1188499386@sss.pgh.pa.us
...
Рейтинг: 0 / 0
19.09.2015, 14:19
    #39055962
BorisPlus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Откуда Access Share Lock на не участвующей в запросе партиции?
Спасиб!
...
Рейтинг: 0 / 0
19.09.2015, 14:20
    #39055963
BorisPlus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Откуда Access Share Lock на не участвующей в запросе партиции?
но все равно не ясно почему АксесШареЛок нанеучаствующей партиции.
...
Рейтинг: 0 / 0
19.09.2015, 15:39
    #39055992
suh
suh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Откуда Access Share Lock на не участвующей в запросе партиции?
видимо, блокировка накладывается в самом начале операции. Если сделать правило на SELECT к родительской таблице, в котором будут выбираться партиции, то это, возможно, исправит ситуацию. Но, фактически, это означает, что встроенный механизм партиционирования не нужен.
...
Рейтинг: 0 / 0
19.09.2015, 15:53
    #39056001
suh
suh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Откуда Access Share Lock на не участвующей в запросе партиции?
Вот звучит вопрос под цифрой 2: http://www.postgresql.org/message-id/A4945A16-09BD-42F3-B603-B1558A199A1B@metaweb.com]http://www.postgresql.org/message-id/A4945A16-09BD-42F3-B603-B1558A199A1B@metaweb.com

И ответ: http://www.postgresql.org/message-id/26276.1255229812@sss.pgh.pa.us]http://www.postgresql.org/message-id/26276.1255229812@sss.pgh.pa.us
"что-то небезопасно без кучи блокировок..."
...
Рейтинг: 0 / 0
20.09.2015, 14:11
    #39056638
BorisPlus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Откуда Access Share Lock на не участвующей в запросе партиции?
suh,
спасиб, вопрос закрыт.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Откуда Access Share Lock на не участвующей в запросе партиции? / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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