|
Запрос с участием таблиц из разных схем
|
|||
---|---|---|---|
#18+
Здравствуйте! Неожиданно замедлилось выполнение запросов с участием таблиц из разных схем одной БД. Вместо трёх минут в прошлом месяце теперь св. 10 часов. Остальные запросы к таблицам одной схемы выполняются по-прежнему быстро. Все индексы присутствуют, таблицы небольшие, на сервере больше ничего не запущено. Второй подобный запрос выполняется уже 3 часа. Эту процедуру мы запускаем раз в месяц, поэтому проблему обнаружили только что. Подскажите, пожалуйста, с чем такое может быть связано? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2019, 11:56 |
|
Запрос с участием таблиц из разных схем
|
|||
---|---|---|---|
#18+
ArkadyL, ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2019, 11:58 |
|
Запрос с участием таблиц из разных схем
|
|||
---|---|---|---|
#18+
Дальнейшие исследования показали, что проблема, видимо, в части группировки GROUP BY, т. к. сам запрос без группировки выполняется быстро. Однако кажется невероятным, что группировка стала выполняться так долго - несколько часов. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2019, 13:09 |
|
Запрос с участием таблиц из разных схем
|
|||
---|---|---|---|
#18+
что значит строка cost в плане? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2019, 15:14 |
|
Запрос с участием таблиц из разных схем
|
|||
---|---|---|---|
#18+
Какая-то оценка затрат на операцию. В чём измеряется так и не нашёл. В статьях видел описание проблемы, что на агрегирование данных иногда уходит время многократно превышающее сам запрос. Но у нас такой не возникало. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2019, 15:45 |
|
Запрос с участием таблиц из разных схем
|
|||
---|---|---|---|
#18+
Покажите сам запрос. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2019, 20:54 |
|
Запрос с участием таблиц из разных схем
|
|||
---|---|---|---|
#18+
ArkadyL, Я не знаток PostgreSQL, но по моим наблюдениям скорость не страдает от того, что таблицы в разных схемах. Если скорость неожиданно меняется, то можно посмотреть, как при этом меняются планы запроса. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2019, 21:52 |
|
Запрос с участием таблиц из разных схем
|
|||
---|---|---|---|
#18+
Как я написал выше, дальнейшие исследования показали, что проблема, видимо, в части группировки GROUP BY, т. к. сам запрос без группировки выполняется быстро. Однако кажется невероятным, что группировка стала выполняться так долго - несколько часов. Без группировки запрос выполняется 2 минуты, при добавлении группировки - 11 часов Так. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
Или так, даже с небольшим упрощением. Не имеет значения. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2019, 13:10 |
|
Запрос с участием таблиц из разных схем
|
|||
---|---|---|---|
#18+
В первом запросе в предпоследней строке Код: sql 1.
случайно осталось ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2019, 14:34 |
|
Запрос с участием таблиц из разных схем
|
|||
---|---|---|---|
#18+
ArkadyL, Покажите текст от explain (analyze, costs, buffers, timing) вашего запроса скорее всего все станет сразу ясно. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2019, 16:47 |
|
Запрос с участием таблиц из разных схем
|
|||
---|---|---|---|
#18+
Вот, пожалуйста. Формировался 880 минут. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2019, 10:33 |
|
Запрос с участием таблиц из разных схем
|
|||
---|---|---|---|
#18+
ArkadyL, некорректно скопировали, нарушен порядок строк. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2019, 10:46 |
|
Запрос с участием таблиц из разных схем
|
|||
---|---|---|---|
#18+
ArkadyL, вот как я должен вашу картинку обрабатывать? руками текст с нее в файл перебивать? Неужели так сложно нормально preformatted text приложить? Вот как с нее что то скопировать или показать кусок?? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2019, 11:03 |
|
Запрос с участием таблиц из разных схем
|
|||
---|---|---|---|
#18+
Подумалось, что всё и так "сразу станет ясно". В таком виде подойдёт? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2019, 11:53 |
|
Запрос с участием таблиц из разных схем
|
|||
---|---|---|---|
#18+
ArkadyLПодумалось, что всё и так "сразу станет ясно". В таком виде подойдёт? А просто текст блин в пост вставить в FIX? У меня екселя нет на компе (и вообще никакого офиса). Ну что за странная идея файлы прикреплять??? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2019, 12:08 |
|
Запрос с участием таблиц из разных схем
|
|||
---|---|---|---|
#18+
Пожалуйста. Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2019, 12:16 |
|
Запрос с участием таблиц из разных схем
|
|||
---|---|---|---|
#18+
Maxim BogukArkadyLПодумалось, что всё и так "сразу станет ясно". В таком виде подойдёт? А просто текст блин в пост вставить в FIX? У меня екселя нет на компе (и вообще никакого офиса). Ну что за странная идея файлы прикреплять??? Ну хорошо что ТС не запихал скриншот в экселовскую книгу. Вообще я думал меня одного такое "просто бесит!!" и молчал. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2019, 12:17 |
|
Запрос с участием таблиц из разных схем
|
|||
---|---|---|---|
#18+
Приятно было невольно вас порадовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2019, 12:21 |
|
Запрос с участием таблиц из разных схем
|
|||
---|---|---|---|
#18+
ArkadyL, Вам уже написали что у вас строки перепутаны в том что вы прислали и восстановить план запроса из этой каши не реально. Как и почему они перепутаны - я не знаю вопросы к приложению из которого вы запрос выполняли. Формат уже верный тепреь осталось строки в правильном порядке прислать. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2019, 12:42 |
|
Запрос с участием таблиц из разных схем
|
|||
---|---|---|---|
#18+
Может быть так? Это от pgAdmin4, а предыдущее от DBeaver. Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2019, 09:05 |
|
Запрос с участием таблиц из разных схем
|
|||
---|---|---|---|
#18+
ArkadyL, Да с этим уже можно работать. Было бы конечно классно если бы вы включили track_io_timing в конфиге и в базе и прислали итоги заново чтобы понять не хватает диска или процессора. Вопросы 1)сколько у вас work_mem стоит? 2)Какая модель ssd диска у вас для базы используется? 3)как и ожидалось проблема не в unique/group by/sort а в Код: plaintext 1. 2. 3. 4. 5.
Скорее всего не хватает индексы под эти условия эффективного. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2019, 10:10 |
|
Запрос с участием таблиц из разных схем
|
|||
---|---|---|---|
#18+
Спасибо за участие. У нас виртуальная машина, 6Гб памяти. Структура такая. Код: sql 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.
Попробуем установить настройки, но план будет строиться опять ок. 14 часов. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2019, 11:21 |
|
Запрос с участием таблиц из разных схем
|
|||
---|---|---|---|
#18+
ArkadyL, 90% что у вас проблема с перегруженными дисками которые медленно отвечают и мониторинга наверняка нет Вот и тормозит все. Быстрее чем диски отвечают база работать не может. А какой размер самой базы у вас? ps; я про индексы и структуру для таблицы Index Scan using cards_surname_name1_name2_idx on cards спрашивал ). ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2019, 11:45 |
|
Запрос с участием таблиц из разных схем
|
|||
---|---|---|---|
#18+
Размер базы 70Гб. И мониторинга нет, как и специалистов по Postgres. А индекс существует. Код: sql 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. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215.
... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2019, 12:51 |
|
Запрос с участием таблиц из разных схем
|
|||
---|---|---|---|
#18+
А почему именно Код: sql 1.
Ведь проверяю наличие по EXISTS в другой таблице, где и нужен индекс? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2019, 13:03 |
|
Запрос с участием таблиц из разных схем
|
|||
---|---|---|---|
#18+
Посмотрите, что с СХД на котором крутиться ВМ. Помониторте саму ВМ средствами виртуализации. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2019, 15:12 |
|
Запрос с участием таблиц из разных схем
|
|||
---|---|---|---|
#18+
ArkadyLА почему именно Код: sql 1.
Ведь проверяю наличие по EXISTS в другой таблице, где и нужен индекс? Вы неправильно читаете план. Там запрос база выполняет начиная от dispensary_observation_list и далее уже присоединяет к этому cards. Дальше надо думать какой индекс на cards нужен чтобы оно лучше работало (преполагая конечно что диски у вас в ноль не ушатаны). На вскидку без серьезного анализа могу посоветовать заменить индекс CREATE INDEX cards_surname_name1_name2_idx ON public.cards USING btree (surname COLLATE pg_catalog."default", name1 COLLATE pg_catalog."default", name2 COLLATE pg_catalog."default") TABLESPACE pg_default; на (surname, name1, name2, birthday, ctrldate) думаю он уже даст достаточную селективность. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2019, 17:17 |
|
Запрос с участием таблиц из разных схем
|
|||
---|---|---|---|
#18+
Вроде, всё сделал, и индекс тоже. Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2019, 14:05 |
|
Запрос с участием таблиц из разных схем
|
|||
---|---|---|---|
#18+
А покажите план для Код: sql 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2019, 15:13 |
|
Запрос с участием таблиц из разных схем
|
|||
---|---|---|---|
#18+
Такой: Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2019, 16:22 |
|
Запрос с участием таблиц из разных схем
|
|||
---|---|---|---|
#18+
ArkadyLВроде, всё сделал, и индекс тоже. Execution time: 2351724.840 ms Ну вот уже стало в 20 раз быстрее. Дальше надо или думать про более оптимальный индекс или что более важно - про то почему вас диски так тормозят. Можно еще базе ресурсов больше выделить по памяти чтобы она меньше с диска читала (и настроить ее соответственно). ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2019, 16:53 |
|
Запрос с участием таблиц из разных схем
|
|||
---|---|---|---|
#18+
Maxim BogukArkadyLВроде, всё сделал, и индекс тоже. Execution time: 2351724.840 ms Ну вот уже стало в 20 раз быстрее. Дальше надо или думать про более оптимальный индекс или что более важно - про то почему вас диски так тормозят. Можно еще базе ресурсов больше выделить по памяти чтобы она меньше с диска читала (и настроить ее соответственно). Кстати... какие настройки random_page_cost/seq_page_cost/effective_cache_size у вашей базы стоят? Похоже они не соответствуют реальности вообще. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2019, 17:04 |
|
Запрос с участием таблиц из разных схем
|
|||
---|---|---|---|
#18+
А в какой строчке написано про диски? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2019, 17:05 |
|
Запрос с участием таблиц из разных схем
|
|||
---|---|---|---|
#18+
ArkadyLА в какой строчке написано про диски? Ни в какой поскольку итоги с включенным track_io_timing вы не показали. Но вот чем то другим обьяснить строку -> Index Scan using cards_surname_name1_name2_idx on cards (cost=0.56..8.02 rows=1 width=41) (actual time=6.083..7.529 rows=0 loops=310351) Index Cond: (((surname)::text = (dispensary_observation.surname)::text) AND ((name1)::text = (dispensary_observation.name)::text) AND ((name2)::text = (dispensary_observation.patronymic)::text) AND (birthday = dispensary_observation.birthday) AND (ctrldate >= '2019-01-01'::date) AND (ctrldate <= '2019-06-30'::date)) Filter: ((datein >= '2019-01-01'::date) AND ((form_code)::text = ANY ('{ДВ1,ДВ3}'::text[])) AND ((case_isrepeat)::text = '0'::text)) Rows Removed by Filter: 7 Точнее actual time=6.083..7.529 кроме как тормозными дисками я не могу. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2019, 17:51 |
|
Запрос с участием таблиц из разных схем
|
|||
---|---|---|---|
#18+
Maxim BogukArkadyLА в какой строчке написано про диски? Ни в какой поскольку итоги с включенным track_io_timing вы не показали. Но вот чем то другим обьяснить строку -> Index Scan using cards_surname_name1_name2_idx on cards (cost=0.56..8.02 rows=1 width=41) (actual time=6.083..7.529 rows=0 loops=310351) Index Cond: (((surname)::text = (dispensary_observation.surname)::text) AND ((name1)::text = (dispensary_observation.name)::text) AND ((name2)::text = (dispensary_observation.patronymic)::text) AND (birthday = dispensary_observation.birthday) AND (ctrldate >= '2019-01-01'::date) AND (ctrldate <= '2019-06-30'::date)) Filter: ((datein >= '2019-01-01'::date) AND ((form_code)::text = ANY ('{ДВ1,ДВ3}'::text[])) AND ((case_isrepeat)::text = '0'::text)) Rows Removed by Filter: 7 Точнее actual time=6.083..7.529 кроме как тормозными дисками я не могу. SHOW ALL Показывает, что track_io_timing=on. Надо каким-то образом сделать её и в базе? Ещё мы хотели бы получить доступ к VIEW pg_stat_statements. Мы видим её, запуская SELECT * FROM pg_views where schemaname='public', но SELECT * from public.pg_stat_statements выдаёт ошибку " SQL Error [55000]: ERROR: pg_stat_statements must be loaded via shared_preload_libraries". Настройку shared_preload_libraries = 'pg_stat_statements' в postgresql.conf делали и CREATE EXTENSION pg_stat_statements запускали. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2019, 12:24 |
|
Запрос с участием таблиц из разных схем
|
|||
---|---|---|---|
#18+
ArkadyLЕщё мы хотели бы получить доступ к VIEW pg_stat_statements. Мы видим её, запуская SELECT * FROM pg_views where schemaname='public', но SELECT * from public.pg_stat_statements выдаёт ошибку " SQL Error [55000]: ERROR: pg_stat_statements must be loaded via shared_preload_libraries". Настройку shared_preload_libraries = 'pg_stat_statements' в postgresql.conf делали и CREATE EXTENSION pg_stat_statements запускали. А базу то рестартовали? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2019, 12:44 |
|
Запрос с участием таблиц из разных схем
|
|||
---|---|---|---|
#18+
Да. Уже многократно. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2019, 12:51 |
|
Запрос с участием таблиц из разных схем
|
|||
---|---|---|---|
#18+
ArkadyLНастройку shared_preload_libraries = 'pg_stat_statements' в postgresql.conf делали и CREATE EXTENSION pg_stat_statements запускали. Проверьте по Код: sql 1.
Может где случайно переписали значение дальше по конфигу. sourcefile, sourceline подскажут где. Ну и если pending_restart = true - значит базу всё-таки не рестартовали. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2019, 13:24 |
|
Запрос с участием таблиц из разных схем
|
|||
---|---|---|---|
#18+
ArkadyLSHOW ALL Показывает, что track_io_timing=on. Надо каким-то образом сделать её и в базе? а что показывает select * from pg_settings where name = 'track_io_timing'; ? Какая версия базы у вас используется (все 3 цифры)? Какая операционная система? Очень странно что у вас результаты io timing не показываются. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2019, 13:45 |
|
Запрос с участием таблиц из разных схем
|
|||
---|---|---|---|
#18+
MelkijArkadyLНастройку shared_preload_libraries = 'pg_stat_statements' в postgresql.conf делали и CREATE EXTENSION pg_stat_statements запускали. Проверьте по Код: sql 1.
Может где случайно переписали значение дальше по конфигу. sourcefile, sourceline подскажут где. Ну и если pending_restart = true - значит базу всё-таки не рестартовали. Спасибо! Базу рестартовали, но в указанной строке действительно была ссылка на нечто перезаписывающее config. pg_stat_statements заработала. select * from pg_settings where name = 'track_io_timing'; показывает, что поле setting=on PostgreSQL 10.9 (Ubuntu 10.9-1.pgdg16.04+1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 5.4.0-6ubuntu1~16.04.11) 5.4.0 20160609, 64-bit ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2019, 14:06 |
|
Запрос с участием таблиц из разных схем
|
|||
---|---|---|---|
#18+
На этот раз план построился почти мгновенно. Код: 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. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2019, 14:14 |
|
|
start [/forum/topic.php?all=1&fid=53&tid=1995115]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
64ms |
get tp. blocked users: |
1ms |
others: | 277ms |
total: | 424ms |
0 / 0 |