Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Прошу помощи в чтении плана
|
|||
|---|---|---|---|
|
#18+
Доброго дня есть три таблички 1. 10000 строк Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. с индексом (и еще парой не участвующих) Код: sql 1. 2. 3. 4. 2. 400000 строк Код: sql 1. 2. 3. 4. 5. 6. 7. 8. с индексом Код: sql 1. 2. 3. 4. 5. соединены ключем Код: sql 1. 2. 3. 600 строк Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Код: sql 1. 2. 3. 4. 5. и запрос Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Две первые таблицы соединяются по ключу [id_header] 1 ко многим. Всего в среднем 83 строки из первой и 32 из второй. Итого ~2500 строк. К этому соединению добавляется третья таблица по ключу [id_import_fld] 1 к 1 просто выборка имени по ключу. И вот тут я не понимаю что происходит. <RunTimeCountersPerThread Thread="0" ActualRows="2984" ActualRowsRead="2984" ActualEndOfScans="2984" ActualExecutions="2984" ActualElapsedms="4" ActualCPUms="4" ActualScans="2984" ActualLogicalReads="5976" ActualPhysicalReads="0" ActualReadAheads="0" ActualLobLogicalReads="0" ActualLobPhysicalReads="0" ActualLobReadAheads="0" /> откуда эти все риды? Помогите прочитать план и понять, что конкретно происходит при этом соединении. План под спойлером Код: 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. 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. 216. 217. 218. 219. 220. 221. 222. 223. 224. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2018, 09:01 |
|
||
|
Прошу помощи в чтении плана
|
|||
|---|---|---|---|
|
#18+
PizzaPizzaоткуда эти все риды?Все - это какие именно? Что вас там смущает? Если выделенное жирным, то это количество прочитанных страниц индекса - Индекс читался 2984 раза (ActualScans), каждый раз от корня до листа. Итого читалось 5976 страниц (ActualLogicalReads). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2018, 10:14 |
|
||
|
Прошу помощи в чтении плана
|
|||
|---|---|---|---|
|
#18+
invmPizzaPizzaоткуда эти все риды?Все - это какие именно? Что вас там смущает? Если выделенное жирным, то это количество прочитанных страниц индекса - Индекс читался 2984 раза (ActualScans), каждый раз от корня до листа. Итого читалось 5976 страниц (ActualLogicalReads). Вот это вот чтение 2984 раза всего индекса мне и не нравится. Там всего до 200 уникальных ключей для соединения и я не вижу повода ему на каждую строку первого соединения читать весь индекс из второго соединения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2018, 10:33 |
|
||
|
Прошу помощи в чтении плана
|
|||
|---|---|---|---|
|
#18+
PizzaPizzaВот это вот чтение 2984 раза всего индекса мне и не нравится.Тогда исключите Nested Loops - будут читаться таблицы/индексы целиком, но один раз. И где вы увидели чтение всего индекса? PizzaPizzaя не вижу повода ему на каждую строку первого соединения читать весь индекс из второго соединения.Еще раз - где вы увидели чтение всего индекса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2018, 10:45 |
|
||
|
Прошу помощи в чтении плана
|
|||
|---|---|---|---|
|
#18+
invmЕще раз - где вы увидели чтение всего индекса? Вот! В этом то и заключается вопрос :) в чтении плана. Я вижу, что от первого соединения приходит 2984 строк и третья таблица возвращает 2984 строк соответственно. При этом первая таблица даёт ActualLogicalReads="6", вторая ActualLogicalReads="266", а третья сразу ActualLogicalReads="5976". Что у меня с таблицей или индексом на [import_flds] такое, что даёт такую разницу? Или я не понимаю семантику плана и так и должно быть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2018, 18:56 |
|
||
|
Прошу помощи в чтении плана
|
|||
|---|---|---|---|
|
#18+
PizzaPizzaИли я не понимаю семантику плана и так и должно быть?Похоже, вы не понимаете как работает поиск в индексе. Для поиска значения по ключу необходимо пройти все уровни индекса от корневого до листового. Каждый уровень - логическое чтение страницы. И так 2984 раза, потому что соединение по NL. Полученное ActualLogicalReads="5976" говорит, что в индекесе 2 уровня. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2018, 19:45 |
|
||
|
Прошу помощи в чтении плана
|
|||
|---|---|---|---|
|
#18+
invm, Теперь вижу. (Думать - тяжело). У меня есть рандомные ключи в левом соединении и я по каждому из них дёргаю индекс правой таблицы. Каждый ключ отдельно и для двух уровней по две страницы чтения. Тогда я полагаю, что из первой и второй таблиц у меня выборки идут блоками подряд, поэтому страниц меньше выбирается, тк кластер. Спасибо. Теперь стройнее картина. Вот думаю не лучше было бы прочитать весь индекс из третей таблицы и сделать left join мерджем или хашем. А то получается если у меня в левом соединении из 2984 строк уникальных ключей только 200, то ему надо делать все равно 2984 отдельных чтений, вместо того, что бы выбрать весь индекс (600 строк). Попробую сегодня с хинтами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2018, 20:17 |
|
||
|
Прошу помощи в чтении плана
|
|||
|---|---|---|---|
|
#18+
PizzaPizzaВот думаю не лучше было бы прочитать весь индекс из третей таблицы и сделать left join мерджем или хашем. А то получается если у меня в левом соединении из 2984 строк уникальных ключей только 200, то ему надо делать все равно 2984 отдельных чтений, вместо того, что бы выбрать весь индекс (600 строк). Попробую сегодня с хинтами.Чтение страниц - подразумевается в памяти. Физически, конечно, индекс читается один раз, и не весь, а используемые страницы (точнее, для оптимизации читаются блоки по 8 страниц). Но поисков нужно 2984 * 2, что и отражается в плане. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2018, 21:29 |
|
||
|
Прошу помощи в чтении плана
|
|||
|---|---|---|---|
|
#18+
invm, Обновил статистику и теперь у меня hash match и одно выполнение index scan на второе соединение без всяких хинтов. Просто чудо какое то. Единственное, что не понятно теперь, это из-за трейса 2371 который я включил на моем 2014 экспрессе или просто само обновление статистики помогло. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2018, 21:33 |
|
||
|
Прошу помощи в чтении плана
|
|||
|---|---|---|---|
|
#18+
alexeyvgPizzaPizzaВот думаю не лучше было бы прочитать весь индекс из третей таблицы и сделать left join мерджем или хашем. А то получается если у меня в левом соединении из 2984 строк уникальных ключей только 200, то ему надо делать все равно 2984 отдельных чтений, вместо того, что бы выбрать весь индекс (600 строк). Попробую сегодня с хинтами.Чтение страниц - подразумевается в памяти. Физически, конечно, индекс читается один раз, и не весь, а используемые страницы (точнее, для оптимизации читаются блоки по 8 страниц). Но поисков нужно 2984 * 2, что и отражается в плане. Ну если бы тут было бы физических 2984 чтений, то вопросы у меня были бы другие. :) Вот этот момент с поисками он не очевиден, его надо осмыслить, что когда на loop приходят не сортированные по ключу соединения данные, то loop делает индивидуальные поиски на каждую строку первого кортежа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2018, 21:58 |
|
||
|
Прошу помощи в чтении плана
|
|||
|---|---|---|---|
|
#18+
PizzaPizzaсамо обновление статистики помогло.Да. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2018, 22:01 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39710688&tid=1689029]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
48ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
| others: | 255ms |
| total: | 394ms |

| 0 / 0 |
