powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Зависает merge после добавления столбца в таблицу
10 сообщений из 10, страница 1 из 1
Зависает merge после добавления столбца в таблицу
    #39951848
slawentiy777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!
Столкнулся со следующей проблемой: если добавить новый столбец в таблицу, то при выполнении команды merge - запрос зависает. Я уже неоднократно сталкивался с этой проблемой. Помогает только ребилд таблицы, которая подвергается обновлению!
Версия Oracle:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - Production

Вот запрос:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
merge
        into goods t
        using gift.goods@office_vpn s
        on (t.id=s.id)
        when matched then update set 
            t.name=s.name, t.name_uc=s.name_uc, t.producerid=s.producerid, t.taxid=s.taxid, t.goodstypeid=s.goodstypeid, t.goodsgroupid=s.goodsgroupid, t.dimensionid=s.dimensionid, t.price_regulation=s.price_regulation, 
            t.pricegroupid=s.pricegroupid, t.regno=s.regno, t.regdate=s.regdate, t.regexpired=s.regexpired, t.barcode=s.barcode, t.storagecondid=s.storagecondid, t.kratn=s.kratn, t.disable=s.disable, t.isrecept=s.isrecept, 
            t.national_list=s.national_list, t.min_assort=s.min_assort, t.isjob=s.isjob, t.uktz=s.uktz, t.isaplan=s.isaplan, t.bonus_id=s.bonus_id, t.bonus_fixed=s.bonus_fixed, t.bonus_percent=s.bonus_percent, 
            t.release_form_id=s.release_form_id, t.comments=s.comments, t.age=s.age, t.contraindication=s.contraindication, t.tabletki_href=s.tabletki_href, t.compendium_href=s.compendium_href, t.other_href=s.other_href, 
            t.method_of_application=s.method_of_application, t.benefits=s.benefits, t.dose=s.dose, t.capacity_num=s.capacity_num, t.analog_goodsid_by_nds=s.analog_goodsid_by_nds, t.goodsimagesid=s.goodsimagesid, 
            t.elementsinoneitem=s.elementsinoneitem, t.isgetndsfromgoods=s.isgetndsfromgoods, t.maxcountfromonesale=s.maxcountfromonesale 
            where id<>-1
        when not matched then insert 
            (t.id, t.name, t.name_uc, t.producerid, t.taxid, t.goodstypeid, t.goodsgroupid, t.dimensionid, t.price_regulation, t.pricegroupid, t.regno, t.regdate, t.regexpired, t.barcode, t.storagecondid, 
            t.kratn, t.disable, t.isrecept, t.national_list, t.min_assort, t.isjob, t.uktz, t.isaplan, t.bonus_id, t.bonus_fixed, t.bonus_percent, t.release_form_id, t.comments, t.age, t.contraindication, 
            t.tabletki_href, t.compendium_href, t.other_href, t.method_of_application, t.benefits, t.dose, t.capacity_num, t.analog_goodsid_by_nds, t.goodsimagesid, t.elementsinoneitem, t.isgetndsfromgoods, t.maxcountfromonesale
            ) values (
            s.id, s.name, s.name_uc, s.producerid, s.taxid, s.goodstypeid, s.goodsgroupid, s.dimensionid, s.price_regulation, s.pricegroupid, s.regno, s.regdate, s.regexpired, s.barcode, s.storagecondid, 
            s.kratn, s.disable, s.isrecept, s.national_list, s.min_assort, s.isjob, s.uktz, s.isaplan, s.bonus_id, s.bonus_fixed, s.bonus_percent, s.release_form_id, s.comments, s.age, s.contraindication, 
            s.tabletki_href, s.compendium_href, s.other_href, s.method_of_application, s.benefits, s.dose, s.capacity_num, s.analog_goodsid_by_nds, s.goodsimagesid, s.elementsinoneitem, s.isgetndsfromgoods, s.maxcountfromonesale
            )



Из особенностей запроса скажу следующее:
1) в merge используется DBlink;
2) в запросе задействуется довольно много столбцов;

Благодарю за помощь в решении данной проблемы!
...
Рейтинг: 0 / 0
Зависает merge после добавления столбца в таблицу
    #39951871
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
slawentiy777,

Покажите планы выполнения команды MERGE
1) До ребилда таблицы (всё плохо)
2) После ребилда таблицы (всё хорошо)
...
Рейтинг: 0 / 0
Зависает merge после добавления столбца в таблицу
    #39952019
slawentiy777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Благодарю, что отозвались!
Высылаю скрин плана ДО и ПОСЛЕ ребилда таблицы.
...
Рейтинг: 0 / 0
Зависает merge после добавления столбца в таблицу
    #39952314
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуйте вернуть на родину посредством хинта DRIVING_SITE
...
Рейтинг: 0 / 0
Зависает merge после добавления столбца в таблицу
    #39952332
slawentiy777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я вставил DRIVING_SITE в подзапрос, который извлекает данные с удалённого сервера, но ничего не изменилось.
А вообще разве можно использовать этот хинт в merge?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
merge 
    into goods t
    using (select /*+ DRIVING_SITE(o) */ * from gift.goods@office_vpn o) s
    on (t.id=s.id)
    when matched then update set 
        t.name=s.name, t.name_uc=s.name_uc, t.producerid=s.producerid, t.taxid=s.taxid, t.goodstypeid=s.goodstypeid, t.goodsgroupid=s.goodsgroupid, t.dimensionid=s.dimensionid, t.price_regulation=s.price_regulation, 
        t.pricegroupid=s.pricegroupid, t.regno=s.regno, t.regdate=s.regdate, t.regexpired=s.regexpired, t.barcode=s.barcode, t.storagecondid=s.storagecondid, t.kratn=s.kratn, t.disable=s.disable, t.isrecept=s.isrecept, 
        t.national_list=s.national_list, t.min_assort=s.min_assort, t.isjob=s.isjob, t.uktz=s.uktz, t.isaplan=s.isaplan, t.bonus_id=s.bonus_id, t.bonus_fixed=s.bonus_fixed, t.bonus_percent=s.bonus_percent, 
        t.release_form_id=s.release_form_id, t.comments=s.comments, t.age=s.age, t.contraindication=s.contraindication, t.tabletki_href=s.tabletki_href, t.compendium_href=s.compendium_href, t.other_href=s.other_href, 
        t.method_of_application=s.method_of_application, t.benefits=s.benefits, t.dose=s.dose, t.capacity_num=s.capacity_num, t.analog_goodsid_by_nds=s.analog_goodsid_by_nds, t.goodsimagesid=s.goodsimagesid, 
        t.elementsinoneitem=s.elementsinoneitem, t.isgetndsfromgoods=s.isgetndsfromgoods, t.maxcountfromonesale=s.maxcountfromonesale 
        where id<>-1
    when not matched then insert 
        (t.id, t.name, t.name_uc, t.producerid, t.taxid, t.goodstypeid, t.goodsgroupid, t.dimensionid, t.price_regulation, t.pricegroupid, t.regno, t.regdate, t.regexpired, t.barcode, t.storagecondid, 
        t.kratn, t.disable, t.isrecept, t.national_list, t.min_assort, t.isjob, t.uktz, t.isaplan, t.bonus_id, t.bonus_fixed, t.bonus_percent, t.release_form_id, t.comments, t.age, t.contraindication, 
        t.tabletki_href, t.compendium_href, t.other_href, t.method_of_application, t.benefits, t.dose, t.capacity_num, t.analog_goodsid_by_nds, t.goodsimagesid, t.elementsinoneitem, t.isgetndsfromgoods, t.maxcountfromonesale
        ) values (
        s.id, s.name, s.name_uc, s.producerid, s.taxid, s.goodstypeid, s.goodsgroupid, s.dimensionid, s.price_regulation, s.pricegroupid, s.regno, s.regdate, s.regexpired, s.barcode, s.storagecondid, 
        s.kratn, s.disable, s.isrecept, s.national_list, s.min_assort, s.isjob, s.uktz, s.isaplan, s.bonus_id, s.bonus_fixed, s.bonus_percent, s.release_form_id, s.comments, s.age, s.contraindication, 
        s.tabletki_href, s.compendium_href, s.other_href, s.method_of_application, s.benefits, s.dose, s.capacity_num, s.analog_goodsid_by_nds, s.goodsimagesid, s.elementsinoneitem, s.isgetndsfromgoods, s.maxcountfromonesale
        );
...
Рейтинг: 0 / 0
Зависает merge после добавления столбца в таблицу
    #39952353
Alexander Anokhin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хинт driving_site не поможет, поскольку driving site локальный в обоих случаях.

Если хочешь разобраться, то надо посмотреть SQL monitor отчёты обоих случаев, ну или как минимум медленного, оба плана выполнения в читаемом виде, чтобы было видно что посылается в remote, проверить план выполнения на удалённой стороне. Если надо чтобы заработало и забыть, то можешь попробовать запустить merge с outline из хорошего плана, и если надо, то закрепить его профайлом как описано в Doc ID 1400903.1
...
Рейтинг: 0 / 0
Зависает merge после добавления столбца в таблицу
    #39952354
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
slawentiy777,

вам надо хинт leading. А вообще показывайте планы лучше через dbms_xplan с advanced
...
Рейтинг: 0 / 0
Зависает merge после добавления столбца в таблицу
    #39954193
slawentiy777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Благодарю за ответы, но ничего не помогает.

Вот план запроса, который ЗАВИСАЕТ (я получил через DBMS_XPLAN.DISPLAY):
Код: 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.
Plan hash value: 1483448804
 
---------------------------------------------------------------------------------------------------------
| Id  | Operation               | Name  | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     | Inst   |IN-OUT|
---------------------------------------------------------------------------------------------------------
|   0 | MERGE STATEMENT         |       | 51798 |   395M|       |  3972   (1)| 00:00:48 |        |      |
|   1 |  MERGE                  | GOODS |       |       |       |            |          |        |      |
|   2 |   VIEW                  |       |       |       |       |            |          |        |      |
|*  3 |    HASH JOIN RIGHT OUTER|       | 51798 |    48M|    18M|  3972   (1)| 00:00:48 |        |      |
|   4 |     TABLE ACCESS FULL   | GOODS | 51840 |    17M|       |   827   (1)| 00:00:10 |        |      |
|   5 |     REMOTE              | GOODS | 51798 |    30M|       |   689   (2)| 00:00:09 | OFFIC~ | R->S |
---------------------------------------------------------------------------------------------------------
 
Predicate Information (identified by operation id):
---------------------------------------------------
 
   3 - access("T"."ID"(+)="S"."ID")
 
Remote SQL Information (identified by operation id):
----------------------------------------------------
 
   5 - SELECT "ID","NAME","BARCODE","BARCODEEXT","REGNO","REGDATE","REGEXPIRED","ISJOB","DISABLE"
       ,"PRICEGROUPID","PRODUCERID","TAXID","GOODSTYPEID","DIMENSIONID","STORAGECONDID","GOODSGROUPID","
       ARTICLE","ISAPLAN","ISGROUP","GROUPID","ORDERBOX","DAYPRESENT","DAYABSENT","QTYCURS","QTYSALES","
       QTYSALES30","QTYSALES14","QTYIN","QTYREST","QTYLEFT","QTYINWAY","QTYPASS","QTYNEEDS","QTYORDER","
       SUMSALES","SUMWEEK","PRICE","SALESGROUP","MORIONID","MORIONNAME","CREATORID","CREATEDATE","COMMEN
       TS","UPDATEDDATE","PRICE0","PRICE1","PRICE2","PRICE3","PRICE4","PRICE5","PRICE6","LASTPRICE0","LA
       STPRICE1","LASTPRICE6","GOODSIMAGESID","PRICE_REGULATION","KRATN","RATING","MAINVENDORID","NOTUSE
       INTBARCODE","NOTUSEFACTBARCODE","SALESGROUPA","SALESGROUPB","ZAKLTXT","ZAKLDATE","ZAKLEXPIRED","C
       OLORID","SIZEID","STRUCTUREID","CAPACITY","ARTNAME","ISRECEPT","MAXPRICE","MARGINE","ISWEIGTH","P
       LUCODE","NO_PRINT_STICKER_BARCODE","UKTZ","ISBUDGET","ISTRANSIT","DEFSTICKERSCNT","TMAX","TMIN","
       SVET","DOSE","RELEASE_FORM_ID","CAPACITY_NUM","PRICEREF","NATIONAL_LIST","MIN_ASSORT","LAST_VENDO
       R_ID","SIGNEDBY","METHOD_OF_APPLICATION","BENEFITS","BONUS_ID","BONUS_FIXED","BONUS_PERCENT","WHO
       LESALEPRICE","ISNOSHARE","GOODSNAME_ID","RELEASEFORM","LIMITSALE","TURNOVER","KRATN_ORDER","OWNER
       ID","NAME_BK","PRODUCER_BK","ID_BK","LASTPRICE1_MAINVENDOR","PRICE_SEGMENTS_ID","LAST_CONTRACT_ID
       ","XYZ_TOTAL","XYZ","XYZ_QTYRATIO","XYZ_SUM2RATIO","XYZ_MARGINRATIO","XYZ_MARGIN","PROMOUTERID","
       MARKET_PRIORITY","MARKET_SIPPRICE","MARKET_BONUS_PERCENT","MARKET_BONUS_SUMMA","ANALOG_GOODSID_BY
       _NDS","NOTZAKAZFROMSUPPLIERS","ISNOTINTERNET","ISPRICE6INTERNET","CONTRAINDICATION","AGE","MARGIN
       FORINTERNET","ELEMENTSINONEITEM","MARKET_PACKET","TABLETKI_HREF","COMPENDIUM_HREF","OTHER_HREF","
       SUMREST","MINPRICE6","NAME_UC","ISGETNDSFROMGOODS","MAXCOUNTFROMONESALE" FROM "GIFT"."GOODS" "S" 
       (accessing 'OFFICE_VPN' )
 



Вот план запроса, который работает ОТЛИЧНО (я получил через DBMS_XPLAN.DISPLAY):
Код: 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.
Plan hash value: 1483448804
 
---------------------------------------------------------------------------------------------------------
| Id  | Operation               | Name  | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     | Inst   |IN-OUT|
---------------------------------------------------------------------------------------------------------
|   0 | MERGE STATEMENT         |       | 51798 |   395M|       |  4275   (1)| 00:00:52 |        |      |
|   1 |  MERGE                  | GOODS |       |       |       |            |          |        |      |
|   2 |   VIEW                  |       |       |       |       |            |          |        |      |
|*  3 |    HASH JOIN RIGHT OUTER|       | 51798 |    48M|    19M|  4275   (1)| 00:00:52 |        |      |
|   4 |     TABLE ACCESS FULL   | GOODS | 51808 |    18M|       |  1100   (1)| 00:00:14 |        |      |
|   5 |     REMOTE              | GOODS | 51798 |    30M|       |   689   (2)| 00:00:09 | OFFIC~ | R->S |
---------------------------------------------------------------------------------------------------------
 
Predicate Information (identified by operation id):
---------------------------------------------------
 
   3 - access("T"."ID"(+)="S"."ID")
 
Remote SQL Information (identified by operation id):
----------------------------------------------------
 
   5 - SELECT "ID","NAME","BARCODE","BARCODEEXT","REGNO","REGDATE","REGEXPIRED","ISJOB","DISABLE"
       ,"PRICEGROUPID","PRODUCERID","TAXID","GOODSTYPEID","DIMENSIONID","STORAGECONDID","GOODSGROUPID","
       ARTICLE","ISAPLAN","ISGROUP","GROUPID","ORDERBOX","DAYPRESENT","DAYABSENT","QTYCURS","QTYSALES","
       QTYSALES30","QTYSALES14","QTYIN","QTYREST","QTYLEFT","QTYINWAY","QTYPASS","QTYNEEDS","QTYORDER","
       SUMSALES","SUMWEEK","PRICE","SALESGROUP","MORIONID","MORIONNAME","CREATORID","CREATEDATE","COMMEN
       TS","UPDATEDDATE","PRICE0","PRICE1","PRICE2","PRICE3","PRICE4","PRICE5","PRICE6","LASTPRICE0","LA
       STPRICE1","LASTPRICE6","GOODSIMAGESID","PRICE_REGULATION","KRATN","RATING","MAINVENDORID","NOTUSE
       INTBARCODE","NOTUSEFACTBARCODE","SALESGROUPA","SALESGROUPB","ZAKLTXT","ZAKLDATE","ZAKLEXPIRED","C
       OLORID","SIZEID","STRUCTUREID","CAPACITY","ARTNAME","ISRECEPT","MAXPRICE","MARGINE","ISWEIGTH","P
       LUCODE","NO_PRINT_STICKER_BARCODE","UKTZ","ISBUDGET","ISTRANSIT","DEFSTICKERSCNT","TMAX","TMIN","
       SVET","DOSE","RELEASE_FORM_ID","CAPACITY_NUM","PRICEREF","NATIONAL_LIST","MIN_ASSORT","LAST_VENDO
       R_ID","SIGNEDBY","METHOD_OF_APPLICATION","BENEFITS","BONUS_ID","BONUS_FIXED","BONUS_PERCENT","WHO
       LESALEPRICE","ISNOSHARE","GOODSNAME_ID","RELEASEFORM","LIMITSALE","TURNOVER","KRATN_ORDER","OWNER
       ID","NAME_BK","PRODUCER_BK","ID_BK","LASTPRICE1_MAINVENDOR","PRICE_SEGMENTS_ID","LAST_CONTRACT_ID
       ","XYZ_TOTAL","XYZ","XYZ_QTYRATIO","XYZ_SUM2RATIO","XYZ_MARGINRATIO","XYZ_MARGIN","PROMOUTERID","
       MARKET_PRIORITY","MARKET_SIPPRICE","MARKET_BONUS_PERCENT","MARKET_BONUS_SUMMA","ANALOG_GOODSID_BY
       _NDS","NOTZAKAZFROMSUPPLIERS","ISNOTINTERNET","ISPRICE6INTERNET","CONTRAINDICATION","AGE","MARGIN
       FORINTERNET","ELEMENTSINONEITEM","MARKET_PACKET","TABLETKI_HREF","COMPENDIUM_HREF","OTHER_HREF","
       SUMREST","MINPRICE6","NAME_UC","ISGETNDSFROMGOODS","MAXCOUNTFROMONESALE" FROM "GIFT"."GOODS" "S" 
       (accessing 'OFFICE_VPN' )



По-моему, никакой особой разницы нет, даже "Plan hash value" одинаковый.
В общем, господа, единственный выход из сложившейся ситуации - ребилд таблицы после добавления новых столбцов в таблицу!
Кстати, в Oracle XE 18 всё работает нормально, похоже, что это глюк Oracle XE 11...
...
Рейтинг: 0 / 0
Зависает merge после добавления столбца в таблицу
    #39954335
Мутаген
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Чего такое " ребилд таблицы "?
...
Рейтинг: 0 / 0
Зависает merge после добавления столбца в таблицу
    #39954337
Фотография кит северных морей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
slawentiy777,

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


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