|
|
|
Тормоза при 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 |
|
||
|
|

start [/forum/topic.php?fid=52&fpage=176&tid=1886480]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
70ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
| others: | 226ms |
| total: | 399ms |

| 0 / 0 |
