|
ExclusiveLock extend на пустой базе и с ее ростом пропадает
|
|||
---|---|---|---|
#18+
День добрый. Тестируем некоторое Java приложение и наблюдаем следующее поведение. Код: sql 1. 2. 3. 4. 5. 6.
Очищаю тестовую БД (truncate table->vacuum) shared_buffers = '2096MB' Подаю нагрузку и через какие-то интервалы получаю ExclusiveLock extend. Ожидаю пока таблица вырастет до ~4Gb и все нормализуется. Жду еще 2 часа и все ок. Опять очищаю тестовую БД (truncate table->vacuum) shared_buffers = '128MB' Подаю нагрузку и все ок. Перерыл весь гугл. И тут https://www.sql.ru/forum/904894-2/exclusivelock и эти же обсуждения на других ресурсах. https://www.postgresql.org/message-id/flat/466D72D2-68EC-4FF4-93B8-43B687E7B705@simply.name]https://www.postgresql.org/message-id/flat/466D72D2-68EC-4FF4-93B8-43B687E7B705@simply.name Много читал где про патч на 9.6 (хотя мой perf top другой . см ниже.), но у меня же уже 11.14 и на 12.9 тоже пробовал. Дисковая система, судя по iostat, в норме. latency до 5мс и то редкие. Очередей нет. Опции на томе LVM как советовал Космодемъянский такие: ext4 (rw,noatime,nodiratime,nobarrier,data=ordered) Игрался на таблице с fillfactor (пробовал 10 и 70) - не помогло. perf top в эти моменты показывает следующее: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
И это "картина" явно отличается от обсуждаемых в ссылках выше про 9ку. ExecInterpExpr вроде как участвует при разборе SQL для оптимизатора. CPU в такие моменты в 100%, естественно выстраивается очередь на CPU. pgbouncer лишь немного смягчает ситуацию урезая кол-во сессий, но не приyципиально. Меня ставит в тупик именно такое поведение на фактически пустой БД и с ростом БД нормализация ситуации и самое главное отсутствие понимания причины и ее устранения. Но если фактически убрать shared_buffer до "нуля" (128Мб) этого нет. Вообщем если у кого есть мысли - направьте на путь истинный. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2022, 18:46 |
|
ExclusiveLock extend на пустой базе и с ее ростом пропадает
|
|||
---|---|---|---|
#18+
serg_777777, Не помешало бы подробное описание нагрузки... что именно делается, сколько активных соединений с базой, сколько соединения всего? Включить log_checkpoints и посмотреть не связанны ли " через какие-то интервалы получаю ExclusiveLock extend." как то со временем окончания checkpoint... " через какие-то интервалы получаю ExclusiveLock extend." - на какое время этот ExclusiveLock висит? Точно ли именно в это время дисковая система не задумывается (высокая latency). fillfactor тут точно не поможет. Какая дисковая система на хосте? nvme/ssd? механика? какой то cloud storage? Наиболее вероятное объяснение ситуации - это дисковая система становится раком в конце checkpoint при fsync и поэтому не получается оперативно добавлять страницы к файлам с данными. PS: "Дисковая система, судя по iostat, в норме. latency до 5мс и то редкие." - c каким временным разрешением вы эту latency снимаете? Если раз в 1-5 минут то и ExclusiveLock extend вызванные проблемами с IO вы там увидите только если там эта проблема будет 1-5 минут продолжаться. PPS: я бы сильно уменьшил vm.dirty_bytes и vm.dirty_background_bytes (предположим до 8MB и 1MB как совсем safe values, если поможет можно будет аккуратно поднимать удваивая пока норально дисковая система справляется с fsync) PPPS: это ГИПОТЕЗЫ а не гарантия что проблема именно там. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2022, 19:47 |
|
ExclusiveLock extend на пустой базе и с ее ростом пропадает
|
|||
---|---|---|---|
#18+
Maxim Boguk, спасибо за советы. Нагрузка тестовая, синтетическая. ~2.5K транзакций/сек (коммитов) Диски конечно облачные, куда же теперь без этих облаков :) Вообщем неизвестно что там и через какие кэши это все проходит. Конкурируют Insert-ы и select за одну таблицу вроде бы. Пока попробовал следующе: выставил sudo sysctl vm.dirty_bytes=8388608 sudo sysctl vm.dirty_background_bytes=1048576 shared_buffers = '2096MB' Очистил БД (truncate table->vacuum) Проблема повторилась. Что касается статистики IO - собираю часто, 1 раз в секунду через /proc.... Вот привожу пример через iostat Видим начало проблемы в vmstat в 11:05:27: Видим дикую очередь процессов (первый столбец и ~100% утилизацию CPU) Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Вот вывод iostat (извиняюсь за длинный листинг): WAL лежат на sdb, datafiles на sdc Вроде как все красиво. Я бы сказал, что нагрузка на IO наоборот упала. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2022, 11:42 |
|
|
start [/forum/topic.php?fid=53&gotonew=1&tid=1993671]: |
0ms |
get settings: |
11ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
29ms |
get topic data: |
11ms |
get first new msg: |
7ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
2ms |
others: | 280ms |
total: | 403ms |
0 / 0 |