|
Мониторинг и настройка конфига
|
|||
---|---|---|---|
#18+
Доброе время соратники Вот есть у меня Postgres 9.3 крутиться база под виндой. проставил в конфиге я log_min_duration_statement = 500ms и обнаружил, что есть у меня длительные операции удаления а-ля Код: sql 1.
индексы стоят на оба поля. транзакция очень большая. где то через 10 минут после старта процесса начинаются вот эти уведомления, что какое либо удаление занимает более 500 мс. Количество одноврменных блокировок около 6000 штук на что следует обратить внимание? и как грамотно снять метрики для анализа, чтобы понять почему через 10 минут начинаются такие моменты? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2017, 20:08 |
|
Мониторинг и настройка конфига
|
|||
---|---|---|---|
#18+
PsyDiamond, индекс на оба поля, по возможности и посмотреть на скорости ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2017, 22:11 |
|
Мониторинг и настройка конфига
|
|||
---|---|---|---|
#18+
я ж сразу написал, что авториндексы стоят на оба поля. просиходит арифметический рост скорости выполнения удаления. грубо говоря запустил за полноч. минут через 10 (как точно замерить?) удаление идет по 500+ мс, а вот спустя 9 часов = 7023 мс ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2017, 05:58 |
|
Мониторинг и настройка конфига
|
|||
---|---|---|---|
#18+
PsyDiamond, Сколько записей надо удалить? Удаляете частями или одной пачкой? Есть подчинённые таблицы? Есть ли индексы на подчинённых ключах? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2017, 10:30 |
|
Мониторинг и настройка конфига
|
|||
---|---|---|---|
#18+
PsyDiamondДоброе время соратники Вот есть у меня Postgres 9.3 крутиться база под виндой. проставил в конфиге я log_min_duration_statement = 500ms и обнаружил, что есть у меня длительные операции удаления а-ля Код: sql 1.
индексы стоят на оба поля. транзакция очень большая. где то через 10 минут после старта процесса начинаются вот эти уведомления, что какое либо удаление занимает более 500 мс. Количество одноврменных блокировок около 6000 штук на что следует обратить внимание? и как грамотно снять метрики для анализа, чтобы понять почему через 10 минут начинаются такие моменты? а зачем "по одной" удалять строки в "очень большой транзакции" ? нельзя отдельными ? или пачечками штук по 1000--10000 ? ну и вопросов много: -- у вас там каскадов по ФК, часом, нет ? (и/или триггерочков на удаление). -- планчик запроса посмотреть можно ? -- вы действительно думаете, что "индекс на оба поля", и "индексЫ по обеим полям" -- это одно и то же ? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2017, 12:55 |
|
Мониторинг и настройка конфига
|
|||
---|---|---|---|
#18+
Здесь уже многое чего ответили - немного добавлю : вопрос, возможность правки кода приложения есть ? 1 - Если ДА, то : - qwwqа зачем "по одной" удалять строки в "очень большой транзакции" ? нельзя отдельными ? или пачечками штук по 1000--10000 ? - переписать это все иначе 2 - Если НЕТ, то : - о чем и я изначально спрашивал qwwqвы действительно думаете, что "индекс на оба поля", и "индексЫ по обеим полям" -- это одно и то же ? и есть подозрение что индекс будет UNIQUE с вероятностью ближе к 100% - explain запроса в студию - конфиг сервера (OS, HDD, RAM, CPU) в студию - конфиг постгреса - так-же сюда :) а направление "снятия метрик для анализа" вы выбрали правильное, расширяем логирование до необходимо уровня и дальше explain по всем подозрительным запросам, ну и iostat (если unix) в помощь ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2017, 21:28 |
|
Мониторинг и настройка конфига
|
|||
---|---|---|---|
#18+
ответы ваши отличные. за это благодарю вернемся к сути вещей. доступа к коду приложения нет. поэтому стоит очень извращенная задача - как сделать, чтобы в этом ужасе выиграть наибольшую производительность машину взял типовую: CPU i3 3.4 GHz hdd 500 Gb Win 7 x64 RAM 8G Postgres 9.3 x64 конфиг почти типовой. приложил (я в мире постгре новенький, так что в конфиге присутствуют серьезные огрехи) естественно компы на которых крутиться подобная рабочая база - будут мощнее и на них SSD. картина меняется не особенно Код: sql 1. 2. 3. 4.
хотя казалось бы зачем ведь есть Код: sql 1. 2.
далее есть тригер Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
присутствуют внешние ключи, но на них стоит "ON DELETE NO ACTION" удаление идет в лоб и очень-очень тупо Код: sql 1.
и так для каждой записи. всего записей 19 000. сейчас речь идет о том, как помочь штатному механизму. например сделать больший упор на память или на запись в файлы ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2017, 08:24 |
|
Мониторинг и настройка конфига
|
|||
---|---|---|---|
#18+
"Delete on userdata."ParusBusinessAccountingCoreBudgetEconomicOperationTransaction" (cost=0.42..8.44 rows=1 width=6) (actual time=27.686..27.686 rows=0 loops=1)" " Buffers: shared hit=1070 read=2 dirtied=25, local hit=2 read=1 dirtied=1" " -> Index Scan using bugdtran_index on userdata."ParusBusinessAccountingCoreBudgetEconomicOperationTransaction" (cost=0.42..8.44 rows=1 width=6) (actual time=0.071..0.072 rows=1 loops=1)" " Output: ctid" " Index Cond: (("ParusBusinessAccountingCoreBudgetEconomicOperationTransaction".tid = 1671) AND ("ParusBusinessAccountingCoreBudgetEconomicOperationTransaction".id = 'bf3772bd-d4b3-47f6-9cab-352439f892c9'::uuid))" " Buffers: shared hit=4" "Trigger RI_ConstraintTrigger_a_175700 for constraint FK_13964930757d57361e63a4865db53650: time=0.404 calls=1" "Trigger TR_ec79b9035a3512065fea1fb1f3e97dc6: time=25.863 calls=1" "Total runtime: 28.125 ms" ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2017, 08:27 |
|
Мониторинг и настройка конфига
|
|||
---|---|---|---|
#18+
PsyDiamond Код: sql 1. 2. 3. 4.
хотя казалось бы зачем ведь есть Код: sql 1. 2.
Я не настоящий сварщик, из Firebird забежал, отвечу с точки зрения FB но тут наверняка аналогично. Индексы (tid, id) и (id, tid) аналогичны только если по обоим полям задано условие. Если же в условии только второе поле индекса - то этот индекс не может быть использован. Соответственно для твоей задачи это без разницы, но в системе наверняка есть запросы которым это не все равно. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2017, 08:36 |
|
Мониторинг и настройка конфига
|
|||
---|---|---|---|
#18+
PsyDiamond"Delete on userdata."ParusBusinessAccountingCoreBudgetEconomicOperationTransaction" (cost=0.42..8.44 rows=1 width=6) (actual time=27.686..27.686 rows=0 loops=1)" " Buffers: shared hit=1070 read=2 dirtied=25, local hit=2 read=1 dirtied=1" " -> Index Scan using bugdtran_index on userdata."ParusBusinessAccountingCoreBudgetEconomicOperationTransaction" (cost=0.42..8.44 rows=1 width=6) (actual time=0.071..0.072 rows=1 loops=1)" " Output: ctid" " Index Cond: (("ParusBusinessAccountingCoreBudgetEconomicOperationTransaction".tid = 1671) AND ("ParusBusinessAccountingCoreBudgetEconomicOperationTransaction".id = 'bf3772bd-d4b3-47f6-9cab-352439f892c9'::uuid))" " Buffers: shared hit=4" "Trigger RI_ConstraintTrigger_a_175700 for constraint FK_13964930757d57361e63a4865db53650: time=0.404 calls=1" "Trigger TR_ec79b9035a3512065fea1fb1f3e97dc6: time=25.863 calls=1" "Total runtime: 28.125 ms" Ну вот вам написали где 99% времени уходит - на работу : "Trigger TR_ec79b9035a3512065fea1fb1f3e97dc6: time=25.863 calls=1" Соответственно надо разбираться что за триггер и что в нем происходит (и почему). -- Maxim Boguk www.postgresql-consulting.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2017, 09:18 |
|
Мониторинг и настройка конфига
|
|||
---|---|---|---|
#18+
Код: sql 1. 2. 3. 4. 5.
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
в ParusBusinessAccountingCoreEconomicOperationTransaction индексов по первичному ключу нет. поэтому я еще раз спрашиваю: в постгре принято индексы на первичные ключи явно ставить? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2017, 09:39 |
|
Мониторинг и настройка конфига
|
|||
---|---|---|---|
#18+
PsyDiamondв ParusBusinessAccountingCoreEconomicOperationTransaction индексов по первичному ключу нет. поэтому я еще раз спрашиваю: в постгре принято индексы на первичные ключи явно ставить? Требованием не является, в отличии от ораклов Делай индекс там на "id" и "tid" ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2017, 09:57 |
|
Мониторинг и настройка конфига
|
|||
---|---|---|---|
#18+
прошу прощения заранее за тривиальные вопросы - но так я познаю мир) 1) Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
иду в триггер 2) Код: sql 1. 2. 3. 4. 5. 6. 7.
тут не написан тригер (почему?), но он есть BEFORE DELETE 3) Код: sql 1. 2. 3. 4. 5. 6. 7.
далее еще один тригер (тоже не описан) 4) Код: sql 1. 2. 3. 4. 5. 6. 7.
и Код: sql 1. 2. 3. 4. 5. 6. 7.
какие от сюда можно сделать выводы? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2017, 10:01 |
|
Мониторинг и настройка конфига
|
|||
---|---|---|---|
#18+
скажу больше вот случай без индексов по ParusBusinessAccountingCoreBudgetEconomicOperationTransaction Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
а вот с индексами по id и tid Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
а почему такие различные показати при инднекс скане по ПК и по моему индексу? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2017, 10:08 |
|
Мониторинг и настройка конфига
|
|||
---|---|---|---|
#18+
PsyDiamond, поправь в конфиге : work_mem = 16MB maintenance_work_mem = 512MB wal_buffers = 16MB effective_cache_size = 6GB про винду точно не могу сказать, но можно попробовать увеличить до shared_buffers = 2GB PsyDiamond какие от сюда можно сделать выводы? Никакие выводы отсюда не сделать - написано так ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2017, 10:15 |
|
Мониторинг и настройка конфига
|
|||
---|---|---|---|
#18+
PsyDiamond, 1 по ПК и уникъю Пж всегда создает индекс (если при создании оных не скахано воспользоваться готовым индексом). Правда не все приблуды его показывают 2. ваш индекс скорее всего только что создан, а индекс ПК -- сильно опух из-за предыдущих удалений/обновлений. (особенность пж) ну и у вас там куча каскадного удаления висит на триггерах. ==> кроме как нарезать большой пакетик на маленькие (напр. автономные) транзакции (и отдать это всё джобу) и запастись терпением решений видимо нет. (переписать приложение, избавившись от самой необходимости массовых апдейтов и каскадов). ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2017, 11:11 |
|
Мониторинг и настройка конфига
|
|||
---|---|---|---|
#18+
брешу. сделал reindex по этой таблице - на выходе Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2017, 11:30 |
|
Мониторинг и настройка конфига
|
|||
---|---|---|---|
#18+
kira ivanovPsyDiamond, поправь в конфиге : work_mem = 16MB maintenance_work_mem = 512MB wal_buffers = 16MB effective_cache_size = 6GB про винду точно не могу сказать, но можно попробовать увеличить до shared_buffers = 2GB в мануале написано же, что shared_buffers для винды 512 метров вполне достаточно про effective_cache_size я так и не понял - зачем так много? и кто нибудь рассказать может или ссылочку дать, какие параметры оптимизируют какие операции? например какой влияет на index scan и прочее ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2017, 06:59 |
|
|
start [/forum/topic.php?fid=53&fpage=79&tid=1996722]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
29ms |
get topic data: |
10ms |
get forum data: |
6ms |
get page messages: |
76ms |
get tp. blocked users: |
1ms |
others: | 18ms |
total: | 168ms |
0 / 0 |