powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Производительность явного и неявного курсоров
12 сообщений из 12, страница 1 из 1
Производительность явного и неявного курсоров
    #39043159
Ivan_kg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
После проблем с электричеством и перезагрузкой сервака появилась проблема. Хотя до того работало быстро.

sSQL_RACC:='select R.nrn from '||sORG_SCHEMA||'.V_ACCREMNS@'||sLINK||' R where R.ncompany=:nORG_COMPANY and R.dremn_date=:dORG_REMNDATE';
open RACC for sSQL_RACC using nORG_COMPANY, dORG_REMNDATE;
loop
fetch RACC into FROM_RN;

Выполняется ~ за 8 секунд.

Тот же самый запрос неявным курсором
for ACC in (
select R.nrn from SISD.V_ACCREMNS@SVOD R where R.ncompany=48901 and R.dremn_date=to_date('01.07.2015','DD.MM.YYYY')
) loop
Выполнился за 0.4 секунды

Что может быть?
...
Рейтинг: 0 / 0
Производительность явного и неявного курсоров
    #39043162
Ivan_kg,

планы?
...
Рейтинг: 0 / 0
Производительность явного и неявного курсоров
    #39043165
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Ivan_kg,

неправильно вопрос задан: не явный-неявный, а бинды vs литералы
...
Рейтинг: 0 / 0
Производительность явного и неявного курсоров
    #39043508
Ivan_kg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>> не явный-неявный, а бинды vs литералы

А почему тогда

sSQL_RACC:='select R.nrn from SISD.V_ACCREMNS@SVOD R where R.ncompany=48901 and R.dremn_date=trunc(sysdate)-60';
open RACC for sSQL_RACC; -- using nORG_COMPANY, dORG_REMNDATE;
loop
fetch RACC into FROM_RN;

отрабатывает те же долгих 8 сек? Бинда, как видим, нет.
...
Рейтинг: 0 / 0
Производительность явного и неявного курсоров
    #39043513
трасса 10053
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ivan_kg,

почему три разных запроса выполняются за разное время... это ж чудо какое!
...
Рейтинг: 0 / 0
Производительность явного и неявного курсоров
    #39043647
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Ivan_kgfetch RACC into FROM_RN;после того как приведешь к одинаковым планам, сделай еще фетч по 100 строк
...
Рейтинг: 0 / 0
Производительность явного и неявного курсоров
    #39043711
ora601
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_kg,

а какая версия оракла? с 10 версии for loop работает быстрее из за fetch size 100.
...
Рейтинг: 0 / 0
Производительность явного и неявного курсоров
    #39043718
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_kg>> не явный-неявный, а бинды vs литералы

А почему тогда

sSQL_RACC:='select R.nrn from SISD.V_ACCREMNS@SVOD R where R.ncompany=48901 and R.dremn_date=trunc(sysdate)-60';
open RACC for sSQL_RACC; -- using nORG_COMPANY, dORG_REMNDATE;
loop
fetch RACC into FROM_RN;

отрабатывает те же долгих 8 сек? Бинда, как видим, нет.Но и sysdate явно не литерал. Гляди все же план на обоих @сторонах, что попусту клавиши молоть.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Производительность явного и неявного курсоров
    #39613470
Фотография шК0ДЕР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При оптимизации древней процедуры столкнулся с аналогичной ситуацией.
Была такая конструкция, выполнялась за ~9 минут
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
open cur(var1, var2, var3);
loop
  fetch cur
    into rfc  /*cur%rowtype*/;
  exit when cur%notfound;
  update tbl
     set field1 = rfc.field1
   where field2 = var1
     and field3 = rfc.field3;
end loop;
close cur;


Попробовал переписать на такую, выполняется за ~14 секунд
Код: plsql
1.
2.
3.
4.
5.
6.
7.
for cur in (select * from dual /*для примера*/)
loop
  update tbl
     set field1 = cur.field1
   where field2 = var1
     and field3 = cur.field3;
end loop;


план запроса
Код: 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.
-----------------------------------------------------------------------------------------------------------------
| Id   | Operation                                 | Name                 | Rows   | Bytes   | Cost  | Time     |
-----------------------------------------------------------------------------------------------------------------
|    0 | SELECT STATEMENT                          |                      |   1486 |   89160 | 10908 | 00:00:01 |
|    1 |   WINDOW BUFFER                           |                      |   1486 |   89160 | 10908 | 00:00:01 |
|    2 |    HASH GROUP BY                          |                      |   1486 |   89160 |       |          |
|    3 |     CONCATENATION                         |                      |        |         |       |          |
|  * 4 |      FILTER                               |                      |        |         |       |          |
|  * 5 |       HASH JOIN                           |                      |  11405 |  684300 |  5906 | 00:00:01 |
|    6 |        NESTED LOOPS                       |                      |        |         |       |          |
|    7 |         NESTED LOOPS                      |                      |  11421 |  605313 |  4572 | 00:00:01 |
|  * 8 |          TABLE ACCESS BY INDEX ROWID      | INFLUENCEM           |    202 |    2828 |    25 | 00:00:01 |
|  * 9 |           INDEX RANGE SCAN                | INFLUENCEM_IDX       |    249 |         |     2 | 00:00:01 |
|   10 |          PARTITION RANGE SINGLE           |                      |      3 |         |     1 | 00:00:01 |
| * 11 |           INDEX RANGE SCAN                | INV_APT_ID_MP_DT_IDX |      3 |         |     1 | 00:00:01 |
|   12 |         TABLE ACCESS BY LOCAL INDEX ROWID | TABLE_INV_APT        |     57 |    2223 |    23 | 00:00:01 |
| * 13 |        TABLE ACCESS FULL                  | MIT_PROD             | 167870 | 1175090 |  1332 | 00:00:01 |
| * 14 |      FILTER                               |                      |        |         |       |          |
|   15 |       NESTED LOOPS                        |                      |        |         |       |          |
|   16 |        NESTED LOOPS                       |                      |  12127 |  727620 |  5000 | 00:00:01 |
|   17 |         NESTED LOOPS                      |                      |    212 |    4452 |   227 | 00:00:01 |
| * 18 |          TABLE ACCESS BY INDEX ROWID      | INFLUENCEM           |    202 |    2828 |    25 | 00:00:01 |
| * 19 |           INDEX RANGE SCAN                | INFLUENCEM_IDX       |    249 |         |     2 | 00:00:01 |
|   20 |          TABLE ACCESS BY INDEX ROWID      | MIT_PROD             |      1 |       7 |     1 | 00:00:01 |
| * 21 |           INDEX RANGE SCAN                | MIT_PROD_ID_HMP      |      1 |         |     1 | 00:00:01 |
|   22 |         PARTITION RANGE SINGLE            |                      |      3 |         |     1 | 00:00:01 |
| * 23 |          INDEX RANGE SCAN                 | INV_APT_ID_MP_DT_IDX |      3 |         |     1 | 00:00:01 |
| * 24 |        TABLE ACCESS BY LOCAL INDEX ROWID  | TABLE_INV_APT        |     57 |    2223 |    23 | 00:00:01 |
-----------------------------------------------------------------------------------------------------------------


Сам запрос для обеих конструкций одинаков и выполняется ~за 4 сек. Возвращает он 1000 строк (6 полей, все числовые). Версия Oracle Database 12c Enterprise Edition Release 12.1.0.2.0
В интернетах так и не нашел описания для подобных тормозов.
В чем причина столь явного разрыва в производительности?
Где можно почитать про это?
...
Рейтинг: 0 / 0
Производительность явного и неявного курсоров
    #39613489
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
шК0ДЕРВ чем причина столь явного разрыва в производительности?slow-by-slow vs batch-by-slow.

То ли ещё будет, когда ты прочитаешь про MERGE.
...
Рейтинг: 0 / 0
Производительность явного и неявного курсоров
    #39613494
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elicbatch-by-slow.bulk-by-slow
...
Рейтинг: 0 / 0
Производительность явного и неявного курсоров
    #39613502
Фотография шК0ДЕР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic, спасибо
You should do it in a single SQL statement if at all possible (с) Tom Kyte
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Производительность явного и неявного курсоров
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]