Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Postgres затыкается на простых запросах и больше не обслуживает пользователей
|
|||
|---|---|---|---|
|
#18+
Ситуация такая: в целом сервер работает нормально, но иногда бывает делает так: Код: plaintext 1. 2. После чего количество соединений растет, доходит до max_connections, в логе появляются: Код: plaintext 1. И все, куча процессов postgre висит, работает очень медленно, грузит сервер и пока не перезапустишь сам он из этого ступора не выйдет, может сутки так висеть. Запрос с которого начинаются тормоза бывают разными, но все они не сильно сложные и объемные, размеры самых объемных таблиц в районе 5000-10000 записей. Индексы по полям, которые используются в where и order есть. Я понимаю когда сложный запрос выполняется долго, но он же не должен влиять на другие запросы, которые приходят в момент его выполнения. Версия 8.1.9, конфиг: Код: plaintext 1. 2. 3. 4. 5. 6. Система: Dual Xeon 3.2, 2 Гб ОЗУ, винт SCSI, FreeBSD 4.11-RELEASE. На сервере кроме PosgreSql вертится Apache (более миллиона страниц в сутки), MySql (более миллиона запросов в сутки), почта. Подскажите пожалуйста, где копать, чтобы не было таких затыков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2007, 05:24 |
|
||
|
Postgres затыкается на простых запросах и больше не обслуживает пользователей
|
|||
|---|---|---|---|
|
#18+
1) Хорошо бы увидеть EXPLAIN ANALYZE проблемного запроса 2) Как часто обновляются таблицы и включен ли автовакум? Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2007, 10:39 |
|
||
|
Postgres затыкается на простых запросах и больше не обслуживает пользователей
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. Автовакуум включен раз в сутки, таблица car_bodies не обновляется, таблица board_car обновляется ежедневно, добавляются/удаляются порядка 150 записей. Запросы, на которых может падать разные, например такой: Код: plaintext Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2007, 13:32 |
|
||
|
Postgres затыкается на простых запросах и больше не обслуживает пользователей
|
|||
|---|---|---|---|
|
#18+
Его план: Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2007, 13:42 |
|
||
|
Postgres затыкается на простых запросах и больше не обслуживает пользователей
|
|||
|---|---|---|---|
|
#18+
А у вас индекс на id_body есть? Ибо если у вас там FK, да без индекса... Было бы неплохо увидеть DDL таблиц и их индексов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2007, 14:23 |
|
||
|
Postgres затыкается на простых запросах и больше не обслуживает пользователей
|
|||
|---|---|---|---|
|
#18+
Индекс конечно есть: Код: plaintext Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2007, 05:32 |
|
||
|
Postgres затыкается на простых запросах и больше не обслуживает пользователей
|
|||
|---|---|---|---|
|
#18+
На мой взгляд следующие параметры сильно завышены: Код: plaintext 1. 2. 3. а Код: plaintext Покажите какие значения у вас в: Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2007, 11:50 |
|
||
|
Postgres затыкается на простых запросах и больше не обслуживает пользователей
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. Посоветуйте значения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2007, 12:07 |
|
||
|
Postgres затыкается на простых запросах и больше не обслуживает пользователей
|
|||
|---|---|---|---|
|
#18+
Попробуйте вот так: Код: plaintext 1. 2. 3. 4. И сделайте потом обязательно ANALYZE обеим таблицам (из Вашего поста непонятно, делаете ли вы его вообще?) Кстати что это значит: velocityАвтовакуум включен раз в сутки ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2007, 16:15 |
|
||
|
Postgres затыкается на простых запросах и больше не обслуживает пользователей
|
|||
|---|---|---|---|
|
#18+
Код: plaintext Автовакуум включен так: Код: plaintext 1. Хотя он ничего не чистит по-моему, некоторое время назад делал вакуум руками обнаружилось несколько тысяч записей, которые удалились. Поэтому вставил в крон скрипт, который ночью делает вакуум сам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2007, 06:15 |
|
||
|
Postgres затыкается на простых запросах и больше не обслуживает пользователей
|
|||
|---|---|---|---|
|
#18+
Imho надо начинать с запроса select * from pg_stat_activity во время проблемы. Там есть такие волшебные столбцы как current_query, query_start. Если current_query не отображается - надо включить ведение статистики и перезапустить pg. Таким образом можно будет определить точно проблемный запрос. Код: plaintext 1. 2. 3. 4. 5. Потом возможно потребуется select * from pg_locks. Также было бы неплохо до 8.2 обновися. Imho в PG присутствуют какие то баги с блокировками и при обновление 8.0->8.1->8.2 их становится существенно меньше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2007, 06:53 |
|
||
|
Postgres затыкается на простых запросах и больше не обслуживает пользователей
|
|||
|---|---|---|---|
|
#18+
ChameLe0nImho надо начинать с запроса select * from pg_stat_activity во время проблемы. Там есть такие волшебные столбцы как current_query, query_start. Если current_query не отображается - надо включить ведение статистики и перезапустить pg. Таким образом можно будет определить точно проблемный запрос. Потом возможно потребуется select * from pg_locks. Также было бы неплохо до 8.2 обновися. Imho в PG присутствуют какие то баги с блокировками и при обновление 8.0->8.1->8.2 их становится существенно меньше. Посмотреть конечно можно. Только в данном случае тормозят/накапливаются SELECT'ы, мешать которым могут только EXCLUSIVE locks. Сильно сомневаюсь, что причина в этом. Можно поподробнее про баги в 8.1 с блокировками? У меня с десяток многогигабайтных oltp бд под 8.1.x и 8.0.x на linux'e и solaris'e. Что-то я проблем с блокировками не встречал... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2007, 11:28 |
|
||
|
Postgres затыкается на простых запросах и больше не обслуживает пользователей
|
|||
|---|---|---|---|
|
#18+
velocity Код: plaintext У вас есть гигабайтные индексы? Думаю нет, ведь если бы были, то вы бы уже давно перенесли БД на отдельный сервер. Поэтому ничего страшно в том, что вы скажете postgres'у, что располагаете таким объемом нет. Поставьте хотя бы для проверки. Кстати, лично в моей практике был случай когда tomcat и postgresql, установленные на общую линуксовую машину приводили к жутким задержкам по I/O на сервере. Причину тогда там и не выяснили, просто разнесли их по разным машинам. Это я к тому, что у вас apache крутится тут же. velocity Автовакуум включен так: Код: plaintext 1. Хотя он ничего не чистит по-моему, некоторое время назад делал вакуум руками обнаружилось несколько тысяч записей, которые удалились. Поэтому вставил в крон скрипт, который ночью делает вакуум сам. Чтобы работал автовакум обязательно должны быть включены след. параметры: stats_start_collector = true stats_row_level = true И, автовакум ничего не удаляет, ибо он VACUUM, а не VACUUM FULL. И я, если честно, так и не понял, как часто вы делаете ANALYZE указанным таблицам??? Запустите плиз Код: plaintext Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2007, 11:47 |
|
||
|
Postgres затыкается на простых запросах и больше не обслуживает пользователей
|
|||
|---|---|---|---|
|
#18+
авторМожно поподробнее про баги в 8.1 с блокировками? У меня с десяток многогигабайтных oltp бд под 8.1.x и 8.0.x на linux\'e и solaris\'e. Что-то я проблем с блокировками не встречал... например вот Из своего опыта скажу что на 8.0 были в логах постоянно deadlock detected. Несмотря на постоянно увеличивающийся объем БД и увеличение нагрузки при переходе на 8.1 количество подобных записей в логах сократилось процентов на 80. При переходе 8.1 ->8.2 давно вообще не замечал ничего подобного. Структура базы не менялась. авторПосмотреть конечно можно. Только в данном случае тормозят/накапливаются SELECT\'ы, мешать которым могут только EXCLUSIVE locks. Сильно сомневаюсь, что причина в этом. Почему ты решил что в системе только selectы используются? Imho select на тех объемах данных что указал автор - не могут серьезно нагрузить систему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2007, 11:52 |
|
||
|
Postgres затыкается на простых запросах и больше не обслуживает пользователей
|
|||
|---|---|---|---|
|
#18+
Никаких специальных блокировок не использую, все в пределах обычных INSERT, UPDATE, DELETE операций, причем не затрагивающих большие объемы данных, количество записей в отдельной таблице не более 10 тысяч, размер базы всего 50 Мб. Встречался с такой же проблемой на MySql тормозят и копятся запросы, думал Postgres лишен такой проблемы, а тут на небольшой нагрузке на тебе. :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2007, 11:57 |
|
||
|
Postgres затыкается на простых запросах и больше не обслуживает пользователей
|
|||
|---|---|---|---|
|
#18+
ChameLe0n например вот Из своего опыта скажу что на 8.0 были в логах постоянно deadlock detected. Несмотря на постоянно увеличивающийся объем БД и увеличение нагрузки при переходе на 8.1 количество подобных записей в логах сократилось процентов на 80. При переходе 8.1 ->8.2 давно вообще не замечал ничего подобного. Структура базы не менялась. 99% что это из-за неправильного проектирования БД. У вас все FK поля проиндексированы? Ибо это наипервейшая причина "странных" deadlock\'ов. автор Почему ты решил что в системе только selectы используются? Imho select на тех объемах данных что указал автор - не могут серьезно нагрузить систему. Мы уже на ты ? :) Я нигде не писал, что в системе только селекты. Я сказал, что мешать SELECT\'ам могут только exclusive lock\'и , которые создаются DDL\'ами, reindex\'ами и vacuum full\'ами. Не думаю, что это тот самый случай. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2007, 12:02 |
|
||
|
Postgres затыкается на простых запросах и больше не обслуживает пользователей
|
|||
|---|---|---|---|
|
#18+
Thamerlanstats_start_collector = true stats_row_level = true Эти опции включены. vacuum full analyze; выполняется каждые сутки ночью. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2007, 12:05 |
|
||
|
Postgres затыкается на простых запросах и больше не обслуживает пользователей
|
|||
|---|---|---|---|
|
#18+
velocityНикаких специальных блокировок не использую, все в пределах обычных INSERT, UPDATE, DELETE операций, причем не затрагивающих большие объемы данных, количество записей в отдельной таблице не более 10 тысяч, размер базы всего 50 Мб. Встречался с такой же проблемой на MySql тормозят и копятся запросы, думал Postgres лишен такой проблемы, а тут на небольшой нагрузке на тебе. :( Попробуйте всё же остановить apache и проверить как будет без него. И покажите всё же, что у вас творится в pg_stat_activity во время накопления соединений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2007, 12:44 |
|
||
|
Postgres затыкается на простых запросах и больше не обслуживает пользователей
|
|||
|---|---|---|---|
|
#18+
Апач выключить невозможно, сайты ведь работают, и нагрузку всю дают сайты. Смотрел нагрузку на дисковую подсистему при помощи iostat. В обычном режиме скорость не превышает 1 Мб/с, иногда прыгает до 5 Мб/с. Очень редко поднимается до 40 Мб/с, только один раз видел пока. На тормоза дисковой подсистемы не похоже. Вот это снял сегодня во время затыка: Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2007, 14:05 |
|
||
|
Postgres затыкается на простых запросах и больше не обслуживает пользователей
|
|||
|---|---|---|---|
|
#18+
velocity Код: plaintext А это что за повисшая транзакция? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2007, 15:18 |
|
||
|
Postgres затыкается на простых запросах и больше не обслуживает пользователей
|
|||
|---|---|---|---|
|
#18+
тьфу, на базу данных не обратил внимание Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2007, 15:20 |
|
||
|
Postgres затыкается на простых запросах и больше не обслуживает пользователей
|
|||
|---|---|---|---|
|
#18+
Dan Blackтьфу, на базу данных не обратил внимание Ну не знаю, как в случае с несколькими базами, но вообще-то "<IDLE> in transaction" очень опасное состояние, ибо не дает VACUUM'у очищать удаленные картежи во всех таблицах, включая системные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2007, 15:45 |
|
||
|
Postgres затыкается на простых запросах и больше не обслуживает пользователей
|
|||
|---|---|---|---|
|
#18+
Это демон висит с подключением, у него отдельная база, чистить другие базы не мешает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2007, 05:22 |
|
||
|
Postgres затыкается на простых запросах и больше не обслуживает пользователей
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. А вообще, у меня похожее что-то было, но я использовал явные lock table и select for update, и в списке процессов было видно waiting. Что-то пошаманил с этими блокировками, вроде отлегло. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2007, 10:17 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=34678691&tid=2005210]: |
0ms |
get settings: |
5ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
74ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 241ms |
| total: | 393ms |

| 0 / 0 |
