powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Дочерние курсоры при вставке записи в таблицу
5 сообщений из 5, страница 1 из 1
Дочерние курсоры при вставке записи в таблицу
    #39946581
Фотография Sergey_Korolev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!

Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production

optimizer_adaptive_features FALSE
_optimizer_gather_feedback FALSE
_optimizer_use_feedback FALSE
_sql_plan_directive_mgmt_control 0

cursor_sharing FORCE

Наблюдается

Код: plsql
1.
2.
insert into USER.TABLE ( перечисление полей) values (:1 , :2 , :3 , :4 , :5 , :6 , :"SYS_B_0", :7 
, :8 , :9 , :10 , :11 , :12 , :13 , :14 , :"SYS_B_1", :15 )



у которого на данный момент Version Count =9, но при интенсивной работе бывает и более 30

Вопрос 1. Откуда дочерние курсоры у вставки, когда у нее возможен только один план ?

Код: plsql
1.
2.
3.
4.
5.
6.
---------------------------------------------------------
| Id  | Operation                | Name         | Cost  |
---------------------------------------------------------
|   0 | INSERT STATEMENT         |              |     1 |
|   1 |  LOAD TABLE CONVENTIONAL | TABLE        |       |
---------------------------------------------------------



Информация по курсорам
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CHILD_NUMBER IS_BIND_SENSITIVE IS_BIND_AWARE INVALIDATIONS IS_OBSOLETE IS_SHAREABLE
------------ ----------------- ------------- ------------- ----------- ------------
           0 N                 N                         0 N           N           
           1 N                 N                         0 N           N           
           2 N                 N                         0 N           N           
           3 N                 N                         0 N           N           
           4 N                 N                         0 N           Y           
           5 N                 N                         0 N           N           
           6 N                 N                         0 N           N           
           7 N                 N                         0 N           N           
           8 N                 N                         0 N           Y           



Причина инвалидации курсора

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CHILD_NUMBER BIND_LENGTH_UPGRADEABLE
------------ -----------------------
           0 N                      
           1 Y                      
           2 Y                      
           3 Y                      
           4 Y                      
           5 N                      
           6 Y                      
           7 Y                      
           8 Y    



Подробнее
Код: plsql
1.
<ChildNode><ChildNumber>8</ChildNumber><ID>40</ID><reason>Bind mismatch(22)</reason><size>4x4</size><bind_position>14</bind_position><original_oacflg>3</original_oacflg><original_oacmxl>2000</original_oacmxl><upgradeable_new_oacmxl>128</upgradeable_new_oacmxl></ChildNode> 



В логах приложения присутствует
Код: plsql
1.
Problem trying to prepare SQL for lock insert  "insert into 


в эту таблицу

Вопрос 2. Связано ли наличие дочерних курсоров с ошибкой в логах приложения ?

Вопрос 3. Есть ли способы ограничить генерацию дочерних курсоров на INSERT ?
...
Рейтинг: 0 / 0
Дочерние курсоры при вставке записи в таблицу
    #39946588
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Sergey_Korolev
Вопрос 1. Откуда дочерние курсоры у вставки, когда у нее возможен только один план ?
Причина же понятно - изменение длины биндов.

Sergey_Korolev
Вопрос 2. Связано ли наличие дочерних курсоров с ошибкой в логах приложения ?

Sergey_Korolev
Код: plsql
1.
Problem trying to prepare SQL for lock insert  "insert into 

Это ничего не говорит. В чем конкретно проблема? Долгие блокировки? Приложение отваливается по таймауту?

Sergey_Korolev
Вопрос 3. Есть ли способы ограничить генерацию дочерних курсоров на INSERT ?
Есть, на форуме эта проблема уже многократно обсуждалась, да и в интернете полно. Основное решение - начинать с выполнения с самыми "длинными" биндами. Но, на самом деле, обычно никакой проблемы в этом нет и это просто "ложный след". Поэтому просто ищите системно корень проблемы
...
Рейтинг: 0 / 0
Дочерние курсоры при вставке записи в таблицу
    #39946589
Фотография Кобанчег
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_Korolev
Вопрос 1. Откуда дочерние курсоры у вставки, когда у нее возможен только один план ?
Когда Оракл сталкивается с mismatch и решает сгенерировать нового child он не знает будет ли порождён такой же план или нет.
Sergey_Korolev
Вопрос 2. Связано ли наличие дочерних курсоров с ошибкой в логах приложения ?

Вопрос 3. Есть ли способы ограничить генерацию дочерних курсоров на INSERT ?
Наверное я буду слишком банален - постараться сделать чтоб BIND_LENGTH_UPGRADEABLE/BIND_MISMATCH не возникало.
Тут смотрели?
...
Рейтинг: 0 / 0
Дочерние курсоры при вставке записи в таблицу
    #39946602
Фотография Sergey_Korolev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Саян,

Причину то инвалидации я понимаю,
и костыли с самыми "длинными" биндами" пытался применять, но в большинстве случает это сделать практически нельзя - коробочные продукты.

Но это борьба с последствиями.

Видимо плохо сформулировал основной вопрос.

Попробую еще раз.

Зачем\для чего вообще такому INSERT нужны дочерние курсоры ?

Ведь план один и он заранее известен.
Какую задачу они решают ?
...
Рейтинг: 0 / 0
Дочерние курсоры при вставке записи в таблицу
    #39946603
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Sergey_Korolev,

Дочерний курсор это не только план, но и прочие метаданные, включая размер буферов для биндов.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Дочерние курсоры при вставке записи в таблицу
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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