|
|
|
толкование статистики по result cache
|
|||
|---|---|---|---|
|
#18+
Народ, не могу осознать разницы в параметрах Find Copy Count и Find Count. У меня в тестовом примере с виртуальной колонкой, deterministic result cache функцией по селекту по 10 записям таблицы оба поля увеличиваются на 10. При этом в этих 10 колонках значения одинаковы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2017, 18:49 |
|
||
|
толкование статистики по result cache
|
|||
|---|---|---|---|
|
#18+
ShtockУ меня в тестовом примере http://www.bugtraq.ru/forum/faq/general/smart-questions.html] RTFM ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2017, 07:48 |
|
||
|
толкование статистики по result cache
|
|||
|---|---|---|---|
|
#18+
Элик, а если бы я про пример не написал, ты бы ответил по-существу? Я вот реально не догоняю разницу между этими параметрами и пример тут не при чём абсолютно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2017, 10:58 |
|
||
|
толкование статистики по result cache
|
|||
|---|---|---|---|
|
#18+
Shtockпример тут не при чём абсолютно.Не совсем. Он неадекватен исследуемому вопросу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2017, 11:54 |
|
||
|
толкование статистики по result cache
|
|||
|---|---|---|---|
|
#18+
А вообще: Код: plsql 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2017, 12:05 |
|
||
|
толкование статистики по result cache
|
|||
|---|---|---|---|
|
#18+
>>Он неадекватен исследуемому вопросу. ага, это я уже после понял, но редактировать то сообщения нельзя ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2017, 12:24 |
|
||
|
толкование статистики по result cache
|
|||
|---|---|---|---|
|
#18+
Я могу сэмулировать один случай, когда find count растет, а find copy count не увеличивается. Когда происходит загрузка нового результата в RC и "одновременное" обращение. Тесты на 12.1.0.2.170117 с _optimizer_ads_use_result_cache= FALSE для уменьшения помех. session1 (main): Код: plsql 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. session2 (oradebug kslgetsl_w на "Result Cache: RC Latch"): Код: plsql 1. 2. 3. session3/4 (slaves): Код: plsql 1. 2. 3. 4. session2: Код: plsql 1. 2. session1: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. Было бы все хорошо, если бы не возникало разницы между Find Count/Find Copy Count, когда работает несколько сессий, которые не загружают ничего в RC, а только читают. Но это не так, что демонстрирует следующий пример. Наполняем RC: Код: plsql 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. Запускаем 2 задания, которые в циклах обращаются к RC: Код: plsql 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. Что замечено: с большей Hash Chain Length расхождение Find Count/Find Copy Count нарастает. Find Copy Count больше расходится от реального кол-ва исполнений, чем Find Count. Тоже самое с большим кол-вом заданий, работающих параллельно. Думал, может v$result_cache_objects что другое покажет, но пока не вижу. Похоже на какой-то аналог алгоритма увеличения TCH для блоков в конкурентной среде, что выглядело бы логичным, но доказательств нет. Нормальной трассировки RC с помощью событий 43905/43906 добиться не удалось. Я бы глянул на основании чего базовая X$ для v$result_cache_statistics строится - просто это данные в памяти или это функция, которая по другим X$ агрегирует. Если просто в памяти, то посмотреть через отладчик, через какие функции она меняется, стэк глянуть, может на мысли какие натолкнет. Пока точно не ясно, почему в примере без загрузки новых результатов в RC статистики расходятся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2017, 05:13 |
|
||
|
толкование статистики по result cache
|
|||
|---|---|---|---|
|
#18+
я просто вообще тогда не понимаю, зачем find copy count нужно. в рамках одной сессии то он не изменяется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2017, 11:31 |
|
||
|
толкование статистики по result cache
|
|||
|---|---|---|---|
|
#18+
Я немного потрассировал операции с result cache в разных вариантах. Конкретно, проверял, какие точно функции qesrc%, ksl_get_shared_latch, kslfre вызываются и в какой последовательности. RC был разогрет, т.е. это не загрузка новых результатов, а только поиск. select /*+ result_cache*/min(n) from t; Код: plsql 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. select f(1) from dual; Код: plsql 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. 2. в 11.1 Find Copy Count, скорее всего, не было. Об этом говорит документация: http://docs.oracle.com/cd/B28359_01/server.111/b28320/dynviews_2133.htm#REFRN30439 и Find Copy Count не упоминается в презентации Julian Dyke "Result Cache Internals". 3. Судя по названиям, qesrcCpyBuf_Rls, qesrcCpyBuf_Get - относятся к копированию буферов. qesrcIter - итератор для просмотра результатов. 4. Если открываем курсор и постепенно из него фетчим, то при фетчах срабатывает только qesrcIter_GetRow, RC latch/CM никак не затрагиваются. При последнем фетче делается qesrcCpyBuf_Rls. Вообщем, гипотеза есть, зачем это сделано. Сессия ищет результат в RC, если в v$result_cache_objects.namespace='SQL' (select, а не PL/SQL) , то этот буфер с результатом копируется отдельно, потом дальше с этим скопированным буфером работаем, не взаимодействуя никак с RC инфраструктурой (RC latch/CM). Если бы этого не было, то: клиент может быть задумчивый, фетчить по строчке в полчаса. Видимо, в 11.1, когда ввели, это не учли, в последствии добавили это копирование, чтобы клиент на каждый чих RC не тревожил. Почему в кейсе с заданиями без загрузки новых результатов расхождения между статистиками получаются, это не объясняет (может не корректно обновляют статистики). Но я потестировал свой скрипт и похоже на какую-то защиту от слишком частых обновлений статистик для избежания конкуренции. Вот скрипт для запуска заданий. Код: plsql 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. Если в цикле пауз не делать, то на параметрах: 500 2 100000 0 (2 задания по 100К итераций), у меня гарантированно отличается find count от кол-ва исполнений. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. С паузой 1 секунда на каждые 20К строк: 500 2 100000 1 расхождений нет. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. Ну и соответственно, я увеличивал кол-во строк, увеличивал кол-во пауз, их длину, получал совпадение кол-ва исполнений и find count/find copy count. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2017, 10:11 |
|
||
|
|

start [/forum/topic.php?fid=52&fpage=179&tid=1886569]: |
0ms |
get settings: |
5ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
45ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
30ms |
get tp. blocked users: |
1ms |
| others: | 205ms |
| total: | 309ms |

| 0 / 0 |
