|
FB3 Разная работа оптимизатора одного и того же запроса в процедуре и вне её
|
|||
---|---|---|---|
#18+
Всем доброе время суток, столкнулся с такой проблеммой: есть запрос: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
когда выполняю его отдельно все прекрасно и быстро и план как надо: PLAN SORT (JOIN (AN INDEX (IDX_ALTERNATENAME_NA), AN3 INDEX (IDX_ALTERNATENAME_ID), AN2 INDEX (IDX_ALTERNATENAME_ID), PC INDEX (IDX_POSTAL_CODES_NA_PC), GN INDEX (PK_GEONAME_GEONAMEID))) как только вставляю его в процедуру: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
всё съезжает набекрень, такое ощущение что оптимизация вообше не происходит, индексы вообше перестают использоваться. Попробовал указать план явно: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
получил ошибку компиляции: Unsuccessful execution caused by system error that does not preclude successful execution of subsequent statements. Error while parsing procedure SEL_CITYANDPOSTCODES's BLR. index IDX_ALTERNATENAME_NA cannot be used in the specified plan. Почему вдруг индекс стал недоступен? куда рыть, почему снаружи всё нормально а в процедуре так? есть мысли? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2017, 16:55 |
|
FB3 Разная работа оптимизатора одного и того же запроса в процедуре и вне её
|
|||
---|---|---|---|
#18+
Mikhail Tchervonenko, вот структура таблиц ешё в догонку ALTERNATENAME: Код: 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.
POSTAL_CODES: Код: 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.
GEONAME: Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2017, 17:25 |
|
FB3 Разная работа оптимизатора одного и того же запроса в процедуре и вне её
|
|||
---|---|---|---|
#18+
Mikhail Tchervonenko, разве это одинаковые запросы? Код: sql 1.
и Код: sql 1.
И во втором запросе под where - 8 условий, в первом - 7. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2017, 17:45 |
|
FB3 Разная работа оптимизатора одного и того же запроса в процедуре и вне её
|
|||
---|---|---|---|
#18+
Mikhail Tchervonenko, если запросы одинаковые, то разницы в планах отдельно и в процедуре быть не может. кроме того, тут plan sort, так что выполнение должно быть одинаково, разница только в фетчах может быть. В смысле, в выборке записей. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2017, 20:26 |
|
FB3 Разная работа оптимизатора одного и того же запроса в процедуре и вне её
|
|||
---|---|---|---|
#18+
чччДMikhail Tchervonenko, разве это одинаковые запросы? Код: sql 1.
и Код: sql 1.
И во втором запросе под where - 8 условий, в первом - 7. восьмое условие это я уже эксперементировал (and PC.POSTAL_CODE is not null). Если его убрать ситуация не меняется. а если с I_NAME передать строку 'Техт%' то по Вашему это другои запрос? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2017, 20:44 |
|
FB3 Разная работа оптимизатора одного и того же запроса в процедуре и вне её
|
|||
---|---|---|---|
#18+
kdvMikhail Tchervonenko, если запросы одинаковые, то разницы в планах отдельно и в процедуре быть не может. кроме того, тут plan sort, так что выполнение должно быть одинаково, разница только в фетчах может быть. В смысле, в выборке записей. я тоже так всегда считал, но походу нет. Там кроме SORT ешё JOIN внутри. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2017, 20:45 |
|
FB3 Разная работа оптимизатора одного и того же запроса в процедуре и вне её
|
|||
---|---|---|---|
#18+
Mikhail Tchervonenkoа если с I_NAME передать строку 'Техт%' то по Вашему это другой запрос? для оптимизатора - другой ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2017, 21:19 |
|
FB3 Разная работа оптимизатора одного и того же запроса в процедуре и вне её
|
|||
---|---|---|---|
#18+
dimitrMikhail Tchervonenkoа если с I_NAME передать строку 'Техт%' то по Вашему это другой запрос? для оптимизатора - другой есть способ это обойти? и почему не даёт указать план (точнее использовать определьнный индекс, который снаружи работает без проблем)? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2017, 21:26 |
|
FB3 Разная работа оптимизатора одного и того же запроса в процедуре и вне её
|
|||
---|---|---|---|
#18+
Mikhail Tchervonenkoесть способ это обойти? Используй STARTING WITH. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2017, 22:00 |
|
FB3 Разная работа оптимизатора одного и того же запроса в процедуре и вне её
|
|||
---|---|---|---|
#18+
Mikhail TchervonenkoчччДMikhail Tchervonenko, разве это одинаковые запросы? Код: sql 1.
и Код: sql 1.
И во втором запросе под where - 8 условий, в первом - 7. восьмое условие это я уже эксперементировал (and PC.POSTAL_CODE is not null). Если его убрать ситуация не меняется. а если с I_NAME передать строку 'Техт%' то по Вашему это другои запрос? ну ты вопрос задаешь, утверждаешь, что запросы одинаковые, а они разные. Как догадаться, что ты "экспериментировал" и т.п.? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2017, 23:57 |
|
FB3 Разная работа оптимизатора одного и того же запроса в процедуре и вне её
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovMikhail Tchervonenkoесть способ это обойти? Используй STARTING WITH. не помогло ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2017, 00:31 |
|
FB3 Разная работа оптимизатора одного и того же запроса в процедуре и вне её
|
|||
---|---|---|---|
#18+
непонятно как с этим бороться, проверил, в одной и той-же процедуре запрос: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
выполняется 56 минут а запрос где заменил парамерт I_NAME просто на строку Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
16 миллисекунд замена like на STARTING WITH сушественно ничего не изменила. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2017, 00:43 |
|
FB3 Разная работа оптимизатора одного и того же запроса в процедуре и вне её
|
|||
---|---|---|---|
#18+
Mikhail Tchervonenkoнепонятно как с этим бороться Читать http://www.ibase.ru/dataaccesspaths/ до просветления. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2017, 01:13 |
|
FB3 Разная работа оптимизатора одного и того же запроса в процедуре и вне её
|
|||
---|---|---|---|
#18+
Mikhail Tchervonenkoя тоже так всегда считал, но походу нет. Там кроме SORT ешё JOIN внутри. во-первых, все-таки разные, а во-вторых, снаружи SORT, и похер, что там внутри. Результат будет отсортирован через память-временный файл, и выдан клиенту. Вот если бы снаружи был table ORDER index, то ... ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2017, 09:47 |
|
FB3 Разная работа оптимизатора одного и того же запроса в процедуре и вне её
|
|||
---|---|---|---|
#18+
Mikhail Tchervonenkoзамена like на STARTING WITH существенно ничего не изменила не верю (с) Что-то наверняка упускается или умалчивается. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2017, 09:56 |
|
FB3 Разная работа оптимизатора одного и того же запроса в процедуре и вне её
|
|||
---|---|---|---|
#18+
Так бесполезно гадать, ни планов, ни примера. Михаил, выцепи свой DDL в воспроизводимый пример и выкладывай сюда. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2017, 10:01 |
|
FB3 Разная работа оптимизатора одного и того же запроса в процедуре и вне её
|
|||
---|---|---|---|
#18+
Mikhail Tchervonenko, Код: 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.
ИХМО так запрос понятней и ошибку искать проще ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2017, 10:05 |
|
FB3 Разная работа оптимизатора одного и того же запроса в процедуре и вне её
|
|||
---|---|---|---|
#18+
Mikhail Tchervonenkoпроверил, в одной и той-же процедуре запрос: выполняется 56 минут а запрос где заменил парамерт I_NAME просто на строку 16 миллисекунд А в процедуре тип у параметра I_NAME какой указываешь? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2017, 10:55 |
|
FB3 Разная работа оптимизатора одного и того же запроса в процедуре и вне её
|
|||
---|---|---|---|
#18+
Евгений КилинА в процедуре тип у параметра I_NAME какой указываешь? I_NAME type of column ALTERNATENAME.NAME вот последний вариант процедуры Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2017, 11:36 |
|
FB3 Разная работа оптимизатора одного и того же запроса в процедуре и вне её
|
|||
---|---|---|---|
#18+
причем тормозит только этот вызов: select * from SEL_CITYANDPOSTCODES('RU',null,'Толь') эти 2 более менее в 16-30 миллисекунд укладываются (хотя индекс от POSTAL_CODE игнорируют почему то) select * from SEL_CITYANDPOSTCODES('RU','445',null) select * from SEL_CITYANDPOSTCODES('RU','445','Толь') ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2017, 11:46 |
|
FB3 Разная работа оптимизатора одного и того же запроса в процедуре и вне её
|
|||
---|---|---|---|
#18+
Mikhail Tchervonenko> причем тормозит только этот вызов: > select * from SEL_CITYANDPOSTCODES('RU',null,'Толь') > > эти 2 более менее в 16-30 миллисекунд укладываются > select * from SEL_CITYANDPOSTCODES('RU','445','Толь') Ну очевидна же разница. Попробуй этот же запрос без ХП, но с теми же параметрами. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2017, 12:01 |
|
FB3 Разная работа оптимизатора одного и того же запроса в процедуре и вне её
|
|||
---|---|---|---|
#18+
И вообще, если оно у тебя Not Null - нафига все эти пляски с бубном и проверками? Тупо передавай в параметр пустую строку и всё. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2017, 12:06 |
|
FB3 Разная работа оптимизатора одного и того же запроса в процедуре и вне её
|
|||
---|---|---|---|
#18+
Тю, у тебя и Name Not Null (что логично и неудивительно). Нафига вообще эта ХП (только чтобы отовсюду дергать её, а не запрос тиражировать) ? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2017, 12:08 |
|
FB3 Разная работа оптимизатора одного и того же запроса в процедуре и вне её
|
|||
---|---|---|---|
#18+
Симонов Денис, спасибо за идею, после явного указания Join нов все заработало как надо от and (:I_NAME is null or (AN.NAME STARTING WITH :I_NAME)) тоже пришлось отказаться, почему то это тоже мешало (в FB 2.5 такое прокатывало вроде) вот последний рабочий вариант в котором заработали планы и индексы как ожидалось: Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2017, 12:15 |
|
FB3 Разная работа оптимизатора одного и того же запроса в процедуре и вне её
|
|||
---|---|---|---|
#18+
Гаджимурадов РустамТю, у тебя и Name Not Null (что логично и неудивительно). Нафига вообще эта ХП (только чтобы отовсюду дергать её, а не запрос тиражировать) ? это не окончательный вариант, там ещё логика на гео координаты и языки будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2017, 12:18 |
|
|
start [/forum/topic.php?fid=40&fpage=39&tid=1561340]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
28ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
others: | 16ms |
total: | 147ms |
0 / 0 |