|
|
|
Об использовании result_cache при запросе из представления OWM
|
|||
|---|---|---|---|
|
#18+
Есть запрос вида: Код: plsql 1. 2. Представление view - это одно из представлений, созданных Oracle Workspace Management для поддержки версионирования одной из талиц. Вызываемая функция объявлена как result_cache. При добавлении в этот запрос хинта result_cache, в плане разбора запроса строки с result_cache не появилось. В чём может быть дело? EE 11.2.0.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2015, 15:44 |
|
||
|
Об использовании result_cache при запросе из представления OWM
|
|||
|---|---|---|---|
|
#18+
Покажите результат выполнения Код: plsql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2015, 16:28 |
|
||
|
Об использовании result_cache при запросе из представления OWM
|
|||
|---|---|---|---|
|
#18+
SQL*PlusПокажите результат выполнения Код: plsql 1. Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production PL/SQL Release 11.2.0.3.0 - Production "CORE 11.2.0.3.0 Production" TNS for Linux: Version 11.2.0.3.0 - Production NLSRTL Version 11.2.0.3.0 - Production ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2015, 16:31 |
|
||
|
Об использовании result_cache при запросе из представления OWM
|
|||
|---|---|---|---|
|
#18+
PasticВызываемая функция объявлена как result_cache. При добавлении в этот запрос хинта result_cache, в плане разбора запроса строки с result_cache не появилось. В чём может быть дело?В запросе используются три функции: 1. SDO_AGGR_MBR(field1) 2. package.function(param1) 3. package.function(param2) О какой из них идет речь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2015, 16:38 |
|
||
|
Об использовании result_cache при запросе из представления OWM
|
|||
|---|---|---|---|
|
#18+
SQL*PlusPasticВызываемая функция объявлена как result_cache. При добавлении в этот запрос хинта result_cache, в плане разбора запроса строки с result_cache не появилось. В чём может быть дело?В запросе используются три функции: 1. SDO_AGGR_MBR(field1) 2. package.function(param1) 3. package.function(param2) О какой из них идет речь? SDO_AGGR_MBR - это стандартная функция MDSYS.SDO_Aggr_MBR. package.function(param1) и package.function(param2) - это одна и та же функция с разными параметрами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2015, 17:10 |
|
||
|
Об использовании result_cache при запросе из представления OWM
|
|||
|---|---|---|---|
|
#18+
Pastic, покажи вывод: Код: plsql 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2015, 17:12 |
|
||
|
Об использовании result_cache при запросе из представления OWM
|
|||
|---|---|---|---|
|
#18+
PasticSQL*Plusпропущено... В запросе используются три функции: 1. SDO_AGGR_MBR(field1) 2. package.function(param1) 3. package.function(param2) О какой из них идет речь? SDO_AGGR_MBR - это стандартная функция MDSYS.SDO_Aggr_MBR. package.function(param1) и package.function(param2) - это одна и та же функция с разными параметрами.О КАКОЙ ИЗ НИХ ИДЕТ РЕЧЬ: "Вызываемая функция объявлена как result_cache. При добавлении в этот запрос хинта result_cache, в плане разбора запроса строки с result_cache не появилось." ? Где именно ожидалось появление "в плане разбора запроса строки с result_cache"? Вот тут? Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2015, 01:51 |
|
||
|
Об использовании result_cache при запросе из представления OWM
|
|||
|---|---|---|---|
|
#18+
xtenderPastic, покажи вывод: Код: plsql 1. 2. 3. 4. Запросил информацию у админа: как получу - выложу. SQL*PlusPasticпропущено... SDO_AGGR_MBR - это стандартная функция MDSYS.SDO_Aggr_MBR. package.function(param1) и package.function(param2) - это одна и та же функция с разными параметрами.О КАКОЙ ИЗ НИХ ИДЕТ РЕЧЬ: "Вызываемая функция объявлена как result_cache. При добавлении в этот запрос хинта result_cache, в плане разбора запроса строки с result_cache не появилось." ? Речь о самописной функции package.function. SQL*PlusГде именно ожидалось появление "в плане разбора запроса строки с result_cache"? Вот тут? Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. Да. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2015, 08:27 |
|
||
|
Об использовании result_cache при запросе из представления OWM
|
|||
|---|---|---|---|
|
#18+
Pastic, Если RESULT_CACHE указано только в этой функции, а в самой команде SELECT такого хинта нет, то никаких RESULT CACHE в плане выполнения запроса не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2015, 23:22 |
|
||
|
Об использовании result_cache при запросе из представления OWM
|
|||
|---|---|---|---|
|
#18+
SQL*Plus, 17811893 PasticПри добавлении в этот запрос хинта result_cache, в плане разбора запроса строки с result_cache не появилось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2015, 23:29 |
|
||
|
Об использовании result_cache при запросе из представления OWM
|
|||
|---|---|---|---|
|
#18+
xtenderSQL*Plus, 17811893 PasticПри добавлении в этот запрос хинта result_cache, в плане разбора запроса строки с result_cache не появилось.ОК. Дошло... :-) Тогда просим автора: Проверить объявлена ли его package.function, как DETERMINISTIC ? Код: plsql 1. 2. 3. Не силен в Spatial Option, но предполагаю, что эта функция не DETERMINISTIC. Result Cache отключается, если в запросе есть функция не DETERMINISTIC. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2015, 01:51 |
|
||
|
Об использовании result_cache при запросе из представления OWM
|
|||
|---|---|---|---|
|
#18+
SQL*PlusResult Cache отключается, если в запросе есть функция не DETERMINISTIC.это не так: не deterministic Код: 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. добавляем sysdate Код: 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. http://docs.oracle.com/cd/E11882_01/server.112/e41573/memory.htm#PFGRF95096 When the result cache is enabled, the database also caches queries that call non-deterministic PL/SQL functions. When caching SELECT statements that call such functions, the result cache tracks data dependencies for the PL/SQL functions and the database objects. However, if the function uses data that are not being tracked (such as sequences, SYSDATE, SYS_CONTEXT, and package variables), using the result cache on queries that call this function can produce stale results. In this regard, the behavior of the result cache is identical to caching PL/SQL functions. Therefore, always consider data accuracy, as well as performance, when choosing to enable the result cache. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2015, 14:43 |
|
||
|
Об использовании result_cache при запросе из представления OWM
|
|||
|---|---|---|---|
|
#18+
xtenderSQL*PlusResult Cache отключается, если в запросе есть функция не DETERMINISTIC.это не так: см. Server Result Cache : Overview (Doc ID 1588763.1) Result cache is disabled for queries containing:- ... - !!! - ... - ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2015, 18:56 |
|
||
|
Об использовании result_cache при запросе из представления OWM
|
|||
|---|---|---|---|
|
#18+
SQL*Plus, ну ведь элементарно же проверить? тест-кейсы я дал... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2015, 19:33 |
|
||
|
Об использовании result_cache при запросе из представления OWM
|
|||
|---|---|---|---|
|
#18+
Проверил. Работает странно. Очищаю Result Cache и выполняю SELECTы. При первом вызове возвращает одно значение (в данном листинге 1 ) При втором и последующих прогонах возвращает одно и то же, но другое значение (в данном листинге 3 ) Test Case: Result Cache + SELECT with Non-Deterministic PL/SQL FunctionЧтобы не копаться в документации приведу описание статистик Result Cache: Table 8–6 V$RESULT_CACHE_STATISTICS Statistics Statistic Name DescriptionCreate Count Success Number of cache results successfully createdCreate Count Failure Number of cache results that failed to createFind Count Number of cached results that were successfully foundInvalidation Count Total number of invalidationsDelete Count Invalid Number of invalid cached results deletedDelete Count Valid Number of valid cached results deletedHash Chain Length Average length of items in the hash chainFind Copy Count Number of results copied directly out of the cache Теперь результаты: Код: 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. Предполагаю, что разгадка в приведенной вами цитате из документации. Предлагаю совместными усилиями перевести её на русский язык. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2015, 13:24 |
|
||
|
Об использовании result_cache при запросе из представления OWM
|
|||
|---|---|---|---|
|
#18+
xtender! SQL*PlusПроверил. Работает странно. Очищаю Result Cache и выполняю SELECTы. При первом вызове возвращает одно значение (в данном листинге 1 ) При втором и последующих прогонах возвращает одно и то же, но другое значение (в данном листинге 3 ) Test Case: Result Cache + SELECT with Non-Deterministic PL/SQL FunctionЧтобы не копаться в документации приведу описание статистик Result Cache: Table 8–6 V$RESULT_CACHE_STATISTICS Statistics Statistic Name DescriptionCreate Count Success Number of cache results successfully createdCreate Count Failure Number of cache results that failed to createFind Count Number of cached results that were successfully foundInvalidation Count Total number of invalidationsDelete Count Invalid Number of invalid cached results deletedDelete Count Valid Number of valid cached results deletedHash Chain Length Average length of items in the hash chainFind Copy Count Number of results copied directly out of the cache Теперь результаты: Код: 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. Предполагаю, что разгадка в приведенной вами цитате из документации. Предлагаю совместными усилиями перевести её на русский язык. Выполнил те же команды 1. Через TOAD for Oracle 12.6.0.53 (freeware edition) 2. Через Oracle SQL Developer 4.1.0.19 Эффект тот же: Первый раз SELECT возвращает одно значение (Значение 1). Второй и последующие разы (в том числе в разных сессиях) - другое значение, но одно и то же (Значение 2). То есть ваши слова о том, что виновата утилита SQL*Plus не подтверждаются. (мы об этом говорили 02 июля 2015 г. на Oracle Database Community Day) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2015, 15:36 |
|
||
|
Об использовании result_cache при запросе из представления OWM
|
|||
|---|---|---|---|
|
#18+
SQL*PlusТо есть ваши слова о том, что виновата утилита SQL*Plus не подтверждаются. (мы об этом говорили 02 июля 2015 г. на Oracle Database Community Day) да, я тут немного ошибся: дело в том, что на самом деле функция при первом выполнении запроса просто выполняется дважды, поэтому я и винил SQL*Plus по старой памяти, т.к. есть такая особенность у SQL*Plus - иногда делать лишние вызовы хотя я про это мельком уже писал , но лучше покажу наглядно тест-кейс Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. результат Код: 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. ну и по сабжу: легко увидеть, что при первом выполнении запроса функция вызывается дважды - результат первого вызова функции кэшируется, а второго - возвращается клиенту. Ну а последующие вызовы просто возвращают результат из кэша тестовый скрипт Код: 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. результат Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2015, 00:47 |
|
||
|
Об использовании result_cache при запросе из представления OWM
|
|||
|---|---|---|---|
|
#18+
SQL*PlusПредполагаю, что разгадка в приведенной вами цитате из документации. Предлагаю совместными усилиями перевести её на русский язык.ок, раз уж обещал :) http://docs.oracle.com/cd/E11882_01/server.112/e41573/memory.htm#PFGRF95096 When the result cache is enabled, the database also caches queries that call non-deterministic PL/SQL functions. When caching SELECT statements that call such functions, the result cache tracks data dependencies for the PL/SQL functions and the database objects. However, if the function uses data that are not being tracked (such as sequences, SYSDATE, SYS_CONTEXT, and package variables), using the result cache on queries that call this function can produce stale results. In this regard, the behavior of the result cache is identical to caching PL/SQL functions. Therefore, always consider data accuracy, as well as performance, when choosing to enable the result cache. Как-то так :)Когда result cache включен, oracle также кэширует запросы, которые вызывают недетерминированные PL/SQL-функции. При кэшировании SELECT'ов, которые вызывают такие функции, result cache отслеживает зависимости функций и объектов. Однако, если функция использует данные, которые не отслеживаются(такие как сиквенсы, SYSDATE, SYS_CONTEXT и пакетные переменные), использование result cache для запросов, которые вызывают такие функции, может дать устаревшие результаты. В этом отношении поведение result cache идентично кэшированию PL/SQL функций. Поэтому, когда рассматриваете использование result cache всегда учитывайте не только производительность, но и точность данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2015, 01:10 |
|
||
|
Об использовании result_cache при запросе из представления OWM
|
|||
|---|---|---|---|
|
#18+
Как-то так :)При кэшировании SELECT'ов, которые вызывают такие функции, result cache отслеживает зависимости функций и объектов. В принципе где-то тут на форуме уже было объяснение, но у меня не получилось найти. Вкратце, в 11.2 убрали RELIES_ON, и стали делать анализ в рантайме, но он отличается от анализа зависимостей у запросов: тест-кейс Код: 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. результат при :p_tab:='a'; Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. :p_tab:='b' Код: 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. :p_tab:='v$instance' Код: 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. а вот, если сделать запрос к самому v$instance c хинтом, то он кэшироваться не будет Код: 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. Но будут правильно кэшироваться: sys_context Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. userenv Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2015, 02:57 |
|
||
|
|

start [/forum/topic.php?fid=52&tid=1885065]: |
0ms |
get settings: |
11ms |
get forum list: |
20ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
197ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
77ms |
get tp. blocked users: |
2ms |
| others: | 248ms |
| total: | 579ms |

| 0 / 0 |
