|
|
|
Тормоза при join-е нескольких таблиц чероз DBlink
|
|||
|---|---|---|---|
|
#18+
Есть БД в которую нельзя вносить изменения - сторонняя БД источник данных (Source). Есть БД - приёмник данных (Dest). В dest есть линк на source. Если запрос идет к одной таблице, то выполняется быстро. Если запрос усложнить, добавить джойны и подселекты (все таблицы на стороне source), то начинаются тормоза. таблицы с кол-во строк около миллиона, а селекты выполняются по 15 минут. Хотя тоже селект, если выполнить его на стороне source - выполняется мгновенно, т.е. индексы есть. Я конечно понимаю, что линк идет на конкретную таблицу, и что джойны скорее всего выполняются уже на стороне desc (прав?), никакие хины и т.д. не передаются. но как быть? Это еще и в динамическом SQL все, т.к. источников много и в динамике подставляется имя линка. Думал выполнить динамический SQL через DBMS_SQL...@линк на стороне source, но как прочитать курсор? Есть ли реальный способ выполнить запрос на стороне сорса и получть результат на ps/sql или только ява? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2016, 10:43 |
|
||
|
Тормоза при join-е нескольких таблиц чероз DBlink
|
|||
|---|---|---|---|
|
#18+
попробуй хинт DRIVING_SITE ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2016, 11:48 |
|
||
|
Тормоза при join-е нескольких таблиц чероз DBlink
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2016, 13:30 |
|
||
|
Тормоза при join-е нескольких таблиц чероз DBlink
|
|||
|---|---|---|---|
|
#18+
Есть простой запрос к удаленной БД (в ней нельзя создавать никакие объекты) Код: 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. Выполняется и фетчица из девелопера и через for loop за 6 секунд. Код: 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. но мне нужно сделать его диначически т.к. удаленных БД 80 штук. как только я переписываю его на open for Код: 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. или на dbms_sql Код: 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. выполнение занимает минут 15-20. Что за беда и как победить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2017, 11:49 |
|
||
|
Тормоза при join-е нескольких таблиц чероз DBlink
|
|||
|---|---|---|---|
|
#18+
OPEN FOR даже без динамики тормозит 15-20 минут Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2017, 11:52 |
|
||
|
Тормоза при join-е нескольких таблиц чероз DBlink
|
|||
|---|---|---|---|
|
#18+
А если использовать просто курсор, а не sys_refcursor ? CURSOR c IS SELECT /*+ DRIVING_SITE(x) */ ... open c; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2017, 12:12 |
|
||
|
Тормоза при join-е нескольких таблиц чероз DBlink
|
|||
|---|---|---|---|
|
#18+
fortnetА если использовать просто курсор, а не sys_refcursor ? CURSOR c IS SELECT /*+ DRIVING_SITE(x) */ ... open c; тоже самое - тормоза ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2017, 13:52 |
|
||
|
Тормоза при join-е нескольких таблиц чероз DBlink
|
|||
|---|---|---|---|
|
#18+
не понятно вообще в чем проблема то. один и тот-же запрос же. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2017, 13:55 |
|
||
|
Тормоза при join-е нескольких таблиц чероз DBlink
|
|||
|---|---|---|---|
|
#18+
oracle 11.2.0.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2017, 13:59 |
|
||
|
Тормоза при join-е нескольких таблиц чероз DBlink
|
|||
|---|---|---|---|
|
#18+
Можно еще попробовать execute immediate , где на вход подается clob-sql c clob; execute immediate c; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2017, 14:04 |
|
||
|
Тормоза при join-е нескольких таблиц чероз DBlink
|
|||
|---|---|---|---|
|
#18+
fortnetМожно еще попробовать execute immediate , где на вход подается clob-sql c clob; execute immediate c; началось результат нужно запихнуть в локальную таблицу было execute immediate 'insert into TTTT () select ....'; и жутко тормозило. хотя сам запрос выполняется быстро и в for c in loop быстро. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2017, 14:14 |
|
||
|
Тормоза при join-е нескольких таблиц чероз DBlink
|
|||
|---|---|---|---|
|
#18+
barrabasfortnetМожно еще попробовать execute immediate , где на вход подается clob-sql c clob; execute immediate c; началось результат нужно запихнуть в локальную таблицу было execute immediate 'insert into TTTT () select ....'; и жутко тормозило. хотя сам запрос выполняется быстро и в for c in loop быстро. с execute immediate началось ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2017, 14:15 |
|
||
|
Тормоза при join-е нескольких таблиц чероз DBlink
|
|||
|---|---|---|---|
|
#18+
barrabasfortnetМожно еще попробовать execute immediate , где на вход подается clob-sql c clob; execute immediate c; началось результат нужно запихнуть в локальную таблицу было execute immediate ' insert into TTTT () select ....'; и жутко тормозило. хотя сам запрос выполняется быстро и в for c in loop быстро.Вот это уже ближе к телу При DML никакой DRIVING_SITE работать не будет, все будет выполнятся на стороне обновляемой таблички ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2017, 14:30 |
|
||
|
Тормоза при join-е нескольких таблиц чероз DBlink
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2017, 14:31 |
|
||
|
Тормоза при join-е нескольких таблиц чероз DBlink
|
|||
|---|---|---|---|
|
#18+
По идее должно работать BULK COLLECT и FORALL INSERT (через локальную коллекцию) Но у тебя, насколько я понял и с динамическим SQL для обычного SELECT проблемы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2017, 14:35 |
|
||
|
Тормоза при join-е нескольких таблиц чероз DBlink
|
|||
|---|---|---|---|
|
#18+
А ты запрос-то весь показываешь? Передача параметров там... или еще какие тонкости ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2017, 14:44 |
|
||
|
Тормоза при join-е нескольких таблиц чероз DBlink
|
|||
|---|---|---|---|
|
#18+
fortnetну печально, здесь пишут, что работает c курсором http://www.sqlrunning.com/?p=66 так работает за 2 секунды (фетч) Код: 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. теперь это в динамический SQL нужно превратить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2017, 14:47 |
|
||
|
Тормоза при join-е нескольких таблиц чероз DBlink
|
|||
|---|---|---|---|
|
#18+
хинты DRIVING_SITE в подселектах роль не играют, пробовал и с ними и без ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2017, 14:48 |
|
||
|
Тормоза при join-е нескольких таблиц чероз DBlink
|
|||
|---|---|---|---|
|
#18+
запихни в execute immediate весь блок ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2017, 14:55 |
|
||
|
Тормоза при join-е нескольких таблиц чероз DBlink
|
|||
|---|---|---|---|
|
#18+
получилось через open c for 'select ...' fetch c bulk collect into lomit всем спасибо. уж как залетает все скоро :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2017, 14:56 |
|
||
|
Тормоза при join-е нескольких таблиц чероз DBlink
|
|||
|---|---|---|---|
|
#18+
fortnetзапихни в execute immediate весь блок я тест через несколько массивов сделал (по хорошему массив рекордов будет в итоге) Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2017, 14:59 |
|
||
|
Тормоза при join-е нескольких таблиц чероз DBlink
|
|||
|---|---|---|---|
|
#18+
еще момент. данные вставляются в буферную таблицу если нужно локальную фильтрацию замутить. сделать простой перебор массива с фильтром и одиночными инсертами или forall с последующей массовой фильтрацией и удалением или отметкой в буфере. что лучше? склоняюсь ко второму варианту. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2017, 15:39 |
|
||
|
Тормоза при join-е нескольких таблиц чероз DBlink
|
|||
|---|---|---|---|
|
#18+
хотя если фильтр уберет существенное кол-во данных то наверное лучше до вставки не доводить даже, т.е. вариант 1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2017, 15:42 |
|
||
|
Тормоза при join-е нескольких таблиц чероз DBlink
|
|||
|---|---|---|---|
|
#18+
Интересно, что с fetch хинт не влияет на план запроса , а с fetch bulk collect влияет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2017, 16:05 |
|
||
|
Тормоза при join-е нескольких таблиц чероз DBlink
|
|||
|---|---|---|---|
|
#18+
у меня есть рабочий код (собственно для которого я давно создавал тему), где идет вставка в локальную таблицу из нескольких линкованных таблиц через execute immediate. без хинта висит по полчаса, с хинтом пара минут всего хотя Вячеслав Любомудров утверждал обратное. Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2017, 16:15 |
|
||
|
Тормоза при join-е нескольких таблиц чероз DBlink
|
|||
|---|---|---|---|
|
#18+
также написан был и обсуждаемый запрос, но он работать отказался. какая-то хня с этими линками, честное слово ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2017, 16:17 |
|
||
|
Тормоза при join-е нескольких таблиц чероз DBlink
|
|||
|---|---|---|---|
|
#18+
barrabasу меня есть рабочий код (собственно для которого я давно создавал тему), где идет вставка в локальную таблицу из нескольких линкованных таблиц через execute immediate. без хинта висит по полчаса, с хинтом пара минут всего хотя Вячеслав Любомудров утверждал обратное.Это не только я утверждал, но и нота "Limitations of DRIVING_SITE Hint For DMLS and DDLS (Doc ID 825677.1)" Хотя, тут я неправ -- когда все таблицы в запросе удаленные и на одном сайте , то да, все соединения могут быть выполнены на том удаленном сайте. Это работает как для INSERT, так и для CTAS (хотя из ноты я понял обратное). Оно, кстати, и без всякого DRIVING_SITE так выполнится. Если хоть одна таблица локальная или на разных сайтах, то все будет выполнятся на target сайте (соответственно, при любом UPDATE/DELETE/MERGE тоже) и никакой DRIVING_SITE не поможет Код: 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. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. PS. Все твои домыслы "так работает, так почему-то не работает" звучат не убедительно. Если действительно хочешь разобраться -- включай трассировку, смотри ожидания, реальный план. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2017, 04:24 |
|
||
|
Тормоза при join-е нескольких таблиц чероз DBlink
|
|||
|---|---|---|---|
|
#18+
Вячеслав Любомудровbarrabasу меня есть рабочий код (собственно для которого я давно создавал тему), где идет вставка в локальную таблицу из нескольких линкованных таблиц через execute immediate. без хинта висит по полчаса, с хинтом пара минут всего хотя Вячеслав Любомудров утверждал обратное.Это не только я утверждал, но и нота "Limitations of DRIVING_SITE Hint For DMLS and DDLS (Doc ID 825677.1)" Хотя, тут я неправ -- когда все таблицы в запросе удаленные и на одном сайте , то да, все соединения могут быть выполнены на том удаленном сайте. Это работает как для INSERT, так и для CTAS (хотя из ноты я понял обратное). Оно, кстати, и без всякого DRIVING_SITE так выполнится. Если хоть одна таблица локальная или на разных сайтах, то все будет выполнятся на target сайте (соответственно, при любом UPDATE/DELETE/MERGE тоже) и никакой DRIVING_SITE не поможет Код: 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. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. PS. Все твои домыслы "так работает, так почему-то не работает" звучат не убедительно. Если действительно хочешь разобраться -- включай трассировку, смотри ожидания, реальный план. Вячеслав Любомудровbarrabasу меня есть рабочий код (собственно для которого я давно создавал тему), где идет вставка в локальную таблицу из нескольких линкованных таблиц через execute immediate. без хинта висит по полчаса, с хинтом пара минут всего хотя Вячеслав Любомудров утверждал обратное.Это не только я утверждал, но и нота "Limitations of DRIVING_SITE Hint For DMLS and DDLS (Doc ID 825677.1)" Хотя, тут я неправ -- когда все таблицы в запросе удаленные и на одном сайте , то да, все соединения могут быть выполнены на том удаленном сайте. Это работает как для INSERT, так и для CTAS (хотя из ноты я понял обратное). Оно, кстати, и без всякого DRIVING_SITE так выполнится. Если хоть одна таблица локальная или на разных сайтах, то все будет выполнятся на target сайте (соответственно, при любом UPDATE/DELETE/MERGE тоже) и никакой DRIVING_SITE не поможет Код: 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. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. PS. Все твои домыслы "так работает, так почему-то не работает" звучат не убедительно. Если действительно хочешь разобраться -- включай трассировку, смотри ожидания, реальный план. да, на самом деле для получения Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. достаточно было NO_MERGE, DRIVING_SITE не влиял никак Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2017, 09:34 |
|
||
|
Тормоза при join-е нескольких таблиц чероз DBlink
|
|||
|---|---|---|---|
|
#18+
без хинта NO_MERGE и при любых вариациях DRIVING_SITE Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2017, 09:35 |
|
||
|
Тормоза при join-е нескольких таблиц чероз DBlink
|
|||
|---|---|---|---|
|
#18+
Вячеслав Любомудров, Не работал пример с курсором . По времени выполнения и без плана было понятно , что хинт не пользовался. В этом загвоздка. Хотя бы угадать, как оптимизатор обрабатывает запрос с удаленными таблицам с применением pl/sql типов. А вы делаете теоретические выкладки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2017, 09:41 |
|
||
|
Тормоза при join-е нескольких таблиц чероз DBlink
|
|||
|---|---|---|---|
|
#18+
но почему план чисто в SQL, в plsql блоках for c in (select ...) и в open c for 'select ' разный я так и не понял. еще и при разных способах фетча (с bulk collect и без) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2017, 09:42 |
|
||
|
Тормоза при join-е нескольких таблиц чероз DBlink
|
|||
|---|---|---|---|
|
#18+
fortnetИнтересно, что с fetch хинт не влияет на план запроса , а с fetch bulk collect влияет. кстати, такое ощущение что хин не работает вообще. с fetch bulk collect работает 2 секунды что с хинтом что без. а простой фетч висит 15 минут, так-же на хинт не обращая внимания. записей всего 8000 в результате получаю, т.е. это не то чтобы долгая построчная выборка ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2017, 09:52 |
|
||
|
Тормоза при join-е нескольких таблиц чероз DBlink
|
|||
|---|---|---|---|
|
#18+
еще наблюдение переписываю на forall загрузку транзакций из внешней системы в ней дата хранится как дата без времени и в отдельном поле время в виде кол-ва секунд в дне если фетчить получать поля по отдельности - все ок если написать в запросе t.DATA + t.VREMYA/86400 OPER_DATE, чтобы получить дату со временем сразу, план ломается и все старания летят к чертям. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2017, 15:45 |
|
||
|
Тормоза при join-е нескольких таблиц чероз DBlink
|
|||
|---|---|---|---|
|
#18+
fortnetНе работал пример с курсором . По времени выполнения и без плана было понятно , что хинт не пользовался. В этом загвоздка. Хотя бы угадать, как оптимизатор обрабатывает запрос с удаленными таблицам с применением pl/sql типов. А вы делаете теоретические выкладки.Если ты не знаешь, как это работает (должно работать), то метаться методом тыка можно долго. Например, некоторые вещи работать просто не будут, они так устроены (тот же DRIVING_SITE) А если не работает то, что по всем прикидкам должно работать, то нужно и подходить более серьезно -- делать трассировку, смотреть планы, ожидания. А не метаться со всякими "давай попробуем так, а еще так" и делать глубокомысленные выводы из обрывков информации, неизвестно когда и на каких данных полученной Это если, конечно, интересен результат, а не процесс PS. Это, конечно, больше к ТС. Остальным, собственно, пофиг, какие давать советы, можно и "пометаться" и "выводы поделать" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2017, 11:03 |
|
||
|
Тормоза при join-е нескольких таблиц чероз DBlink
|
|||
|---|---|---|---|
|
#18+
Вячеслав ЛюбомудровPS. Это, конечно, больше к ТС. Остальным, собственно, пофиг, какие давать советы, можно и "пометаться" и "выводы поделать" Зато можно почувствовать себя "мега -исследователем", несмотря на переливание из пустого в порожнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2017, 13:27 |
|
||
|
Тормоза при join-е нескольких таблиц чероз DBlink
|
|||
|---|---|---|---|
|
#18+
ElicВячеслав ЛюбомудровPS. Это, конечно, больше к ТС. Остальным, собственно, пофиг, какие давать советы, можно и "пометаться" и "выводы поделать" Зато можно почувствовать себя "мега -исследователем", несмотря на переливание из пустого в порожнее.Если это про меня, то да, мне интересно "поисследовать" что-то, с чем мне не приходится (часто) сталкиваться Ну и записать, ибо так оно лучше запоминается. Ну не писать же в свой блокнотик, его же никто не прочитает, чтож я, зря старался? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2017, 15:33 |
|
||
|
Тормоза при join-е нескольких таблиц чероз DBlink
|
|||
|---|---|---|---|
|
#18+
Вячеслав ЛюбомудровЕсли это про меняНет, конечно же. Вячеслав Любомудровчтож я, зря старался?И истинных исследователей это основной результат. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2017, 16:01 |
|
||
|
Тормоза при join-е нескольких таблиц чероз DBlink
|
|||
|---|---|---|---|
|
#18+
господа, планы я смотрю (выкладывал тут в том числе) но как план мне поможет понять почему он именно такой? т.е. Код: 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. даёт нужный Код: plaintext 1. 2. 3. 4. 5. 6. а если напишу t.DATA + VREMYA/86400, чтобы получить дату и время в одном поле Код: 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. получу Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. что с того что я узнаю что план строится неправильный при простом fetch, а не fetch bulk collect на одном запросе? я и так по времени что неправильно работает. как трассировка бы помогла выбрать именно fetch bulk collect ? как она помогла бы с t.DATA + VREMYA/86400? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2017, 16:15 |
|
||
|
Тормоза при join-е нескольких таблиц чероз DBlink
|
|||
|---|---|---|---|
|
#18+
Нет ли переменной с именем VREMYA ? Ну и возможно стоит переходить на 10053 -- сам я в этом не силен, но иногда удается понять почему был выбран именно такой план ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2017, 16:21 |
|
||
|
Тормоза при join-е нескольких таблиц чероз DBlink
|
|||
|---|---|---|---|
|
#18+
вот и приходится перебирать варианты и искать тормозные куски в запросе постепенно подключая их ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2017, 16:21 |
|
||
|
Тормоза при join-е нескольких таблиц чероз DBlink
|
|||
|---|---|---|---|
|
#18+
Вячеслав ЛюбомудровНет ли переменной с именем VREMYA ? Ну и возможно стоит переходить на 10053 -- сам я в этом не силен, но иногда удается понять почему был выбран именно такой план нет. я транслитом переменные не называю :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2017, 16:22 |
|
||
|
Тормоза при join-е нескольких таблиц чероз DBlink
|
|||
|---|---|---|---|
|
#18+
Не надо перебирать, надо постараться понять -- почему Для этого есть инструменты и надо научиться ими пользоваться ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2017, 16:22 |
|
||
|
Тормоза при join-е нескольких таблиц чероз DBlink
|
|||
|---|---|---|---|
|
#18+
10053? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2017, 16:23 |
|
||
|
Тормоза при join-е нескольких таблиц чероз DBlink
|
|||
|---|---|---|---|
|
#18+
Вячеслав ЛюбомудровНе надо перебирать, надо постараться понять -- почему Для этого есть инструменты и надо научиться ими пользоваться ну с t.DATA + t.VREMYA/86400 как понять то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2017, 16:24 |
|
||
|
Тормоза при join-е нескольких таблиц чероз DBlink
|
|||
|---|---|---|---|
|
#18+
barrabasВячеслав ЛюбомудровНет ли переменной с именем VREMYA ? Ну и возможно стоит переходить на 10053 -- сам я в этом не силен, но иногда удается понять почему был выбран именно такой план нет. я транслитом переменные не называю :) там реально было t.DATA + t.VREMYA/86400 конечно. это уже в сейчас скопировал неудачно. план это не меняет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2017, 16:27 |
|
||
|
Тормоза при join-е нескольких таблиц чероз DBlink
|
|||
|---|---|---|---|
|
#18+
barrabasну с t.DATA + t.VREMYA/86400 как понять то?Ну тут просто - оторвать горе-архитектору ногти по самые уши. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2017, 16:29 |
|
||
|
Тормоза при join-е нескольких таблиц чероз DBlink
|
|||
|---|---|---|---|
|
#18+
И еще такие "метания", как разные, например, NLS_* настройки у текущей сессии и сессии по db-линку (на мой взгляд, это может повлиять на всякие сортировки/группировки) Опять же, локальные переменные, передаваемые как бинды -- возможно, не всегда их можно передать В общем, если 10046 кажет явно неожиданный план и его не удается хинтами отправить выполняться на удаленный узел (к моему стыду, я не сильно вчитывался в твои листинги и не понял, что все [не]выполняется на одном удаленном узле), то наверное, есть смысл подключать тяжелую артилерию в виде 10053 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2017, 16:32 |
|
||
|
Тормоза при join-е нескольких таблиц чероз DBlink
|
|||
|---|---|---|---|
|
#18+
Elicbarrabasну с t.DATA + t.VREMYA/86400 как понять то?Ну тут просто - оторвать горе-архитектору ногти по самые уши. это внешняя система данная нам в ощущениях а пот мегаинформативный трейс Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2017, 16:41 |
|
||
|
Тормоза при join-е нескольких таблиц чероз DBlink
|
|||
|---|---|---|---|
|
#18+
Вячеслав ЛюбомудровfortnetНе работал пример с курсором . По времени выполнения и без плана было понятно , что хинт не пользовался. В этом загвоздка. Хотя бы угадать, как оптимизатор обрабатывает запрос с удаленными таблицам с применением pl/sql типов. А вы делаете теоретические выкладки.Если ты не знаешь, как это работает (должно работать), то метаться методом тыка можно долго. Например, некоторые вещи работать просто не будут, они так устроены (тот же DRIVING_SITE) А если не работает то, что по всем прикидкам должно работать, то нужно и подходить более серьезно -- делать трассировку, смотреть планы, ожидания. А не метаться со всякими "давай попробуем так, а еще так" и делать глубокомысленные выводы из обрывков информации, неизвестно когда и на каких данных полученной Это если, конечно, интересен результат, а не процесс PS. Это, конечно, больше к ТС. Остальным, собственно, пофиг, какие давать советы, можно и "пометаться" и "выводы поделать" Ну, не так уж и долго продолжалось метание... А интересные вопросы почему игнорируете, все поучаете только. barrabas но почему план чисто в SQL, в plsql блоках for c in (select ...) и в open c for 'select ' разный я так и не понял. еще и при разных способах фетча (с bulk collect и без) кстати, такое ощущение что хин не работает вообще. с fetch bulk collect работает 2 секунды что с хинтом что без. а простой фетч висит 15 минут, так-же на хинт не обращая внимания. записей всего 8000 в результате получаю, т.е. это не то чтобы долгая построчная выборка ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2017, 14:13 |
|
||
|
Тормоза при join-е нескольких таблиц чероз DBlink
|
|||
|---|---|---|---|
|
#18+
fortnetвсе поучаете только.Да ни в коем разе Стараюсь просто отбросить заведомо неработоспособные варианты и формализовать доступность возможных И потом кто сказал, что это твоя записная книжка -- это моя fortnetВячеслав Любомудров... А интересные вопросы почему игнорируетеДа если бы я сам знал, неужели бы молчал? Обязательно бы по-"поучал" Пока предположения -- разные версии, разное окружение (NLS), разная цель запроса -- для одной строки лучше FIRST_ROWS, для BULK -- ALL_ROWS (не уверен, что сейчас оптимизатор что-то меняет, в 8-ке, вроде было такое), ошибка в статистике, какие-то трансформации -- причину выбора конкретного плана можно увидеть в 10053, но его надо уметь читать (я не умею, вот и молчу) PS. По-последнему запросу ТС очень похоже, что он нас либо троллит, либо что-то слишком скрывает (where 1=1 and t.DATA = sysdate and t.DATA = sysdate - 1) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2017, 15:11 |
|
||
|
Тормоза при join-е нескольких таблиц чероз DBlink
|
|||
|---|---|---|---|
|
#18+
Вячеслав ЛюбомудровPS. По-последнему запросу ТС очень похоже, что он нас либо троллит, либо что-то слишком скрывает (where 1=1 and t.DATA = sysdate and t.DATA = sysdate - 1) нет, не тролю, все планы запросов реальны и тексты последний же вопрос касался, не булкколлекта, а изменения плана при действии со столбцами. я взял запросы из процедуры, подставил вместо биндинга переменноых sysdate, получил план запроса с + t.VREMYA/86400 и без. 1=1 - пишу часто когда отлаживанию, чтобы удобнее было закомментировать первое условие и не убирать анд у второго, часто на автомате добавляю уже. на план не влияет, проверил. t.DATA = sysdate and t.DATA = sysdate - 1 т.к. проверял сам запрос на время выполнения по дню, топом построил по нему план и планы честно выложил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2017, 14:23 |
|
||
|
Тормоза при join-е нескольких таблиц чероз DBlink
|
|||
|---|---|---|---|
|
#18+
вот то что при bulk collect оптимизатор может применять всегда план удобный для ALL_ROWS - согласен. но не понятно почему for c in (select ) - работает с "правильным" планом (с первой страницы), open c for 'select'; или open CURSOR; fetch - работает с "плохим" планом. я не понимаю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2017, 14:27 |
|
||
|
Тормоза при join-е нескольких таблиц чероз DBlink
|
|||
|---|---|---|---|
|
#18+
barrabasвот то что при bulk collect оптимизатор может применять всегда план удобный для ALL_ROWS - согласен. но не понятно почему for c in (select ) - работает с "правильным" планом (с первой страницы), open c for 'select'; или open CURSOR; fetch - работает с "плохим" планом. я не понимаю а главное как выяснить какую конструкцию применять для получения правильного плана, я не понял. мне же в упрек ставили что я попробовал все варианты, а можно было как-то сразу догадаться видимо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2017, 14:28 |
|
||
|
Тормоза при join-е нескольких таблиц чероз DBlink
|
|||
|---|---|---|---|
|
#18+
но реально ребята помогли. я переписал древние загрузки (которые лет 10 никто не трогал, но за это время объем данных вырос на пару порядков) с динамического execute immediate 'insert into BUF select ...' на динамеческий open c for 'select '; fetch bulk collect + forall insert если на 500-700тыс.записей вставка в буфер была по 35-40 минут, теперь 3-4 минуты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2017, 14:34 |
|
||
|
|

start [/forum/topic.php?all=1&fid=52&tid=1886480]: |
0ms |
get settings: |
8ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
149ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
91ms |
get tp. blocked users: |
1ms |
| others: | 206ms |
| total: | 489ms |

| 0 / 0 |
