Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 запрос через линкованный сервер выполняется в тысячи раз медленнее, чем напрямую  [new]
debirs
Member

Откуда:
Сообщений: 30
Добрый день!

Был у нас один длинный запрос к прилинкованной БД Oracle версии 10.
Время выполлнения было приемлемым.

После обновления Oracle до 11 версии тот же запрос стал выполняться несколько часов.

Фишка в том, что этот же запрос непосредственно к БД Oracle делается не более минуты, а через прилинкованный сервер - несколько часов.

В чем может быть дело?

Вот текст запроса:

+
DECLARE @SQL varchar(max) 
set @SQL= ' SELECT  left.*,right.* FROM (select  rep.report_date,rep.pa_r,
DECODE(z.oper_report_id,NULL,dbms_lob.substr(rep.xml_source,(dbms_lob.instr(rep.xml_source,''</H_R_LIST_DATE>'')-dbms_lob.instr(rep.xml_source,''<H_R_LIST_DATE>'')-15), dbms_lob.instr(rep.xml_source,''<H_R_LIST_DATE>'')+15),utl_raw.cast_to_varchar2(dbms_lob.substr(UTL_COMPRESS.lz_uncompress(z.xml_source_zip),(dbms_lob.instr(UTL_COMPRESS.lz_uncompress(z.xml_source_zip), utl_raw.cast_to_raw(''</H_R_LIST_DATE>''))-dbms_lob.instr(UTL_COMPRESS.lz_uncompress(z.xml_source_zip),utl_raw.cast_to_raw(''<H_R_LIST_DATE>''))-15), dbms_lob.instr(UTL_COMPRESS.lz_uncompress(z.xml_source_zip),utl_raw.cast_to_raw(''<H_R_LIST_DATE>''))+15))) as pr_date, 
DECODE(z.oper_report_id,NULL,dbms_lob.substr(rep.xml_source,(dbms_lob.instr(rep.xml_source,''</G_S1_D_C2_B>'')-dbms_lob.instr(rep.xml_source,''<G_S1_D_C2_B>'')-13), dbms_lob.instr(rep.xml_source,''<G_S1_D_C2_B>'')+13),utl_raw.cast_to_varchar2(dbms_lob.substr(UTL_COMPRESS.lz_uncompress(z.xml_source_zip),(dbms_lob.instr(UTL_COMPRESS.lz_uncompress(z.xml_source_zip),utl_raw.cast_to_raw(''</G_S1_D_C2_B>''))-dbms_lob.instr(UTL_COMPRESS.lz_uncompress(z.xml_source_zip),utl_raw.cast_to_raw(''<G_S1_D_C2_B>''))-13), dbms_lob.instr(UTL_COMPRESS.lz_uncompress(z.xml_source_zip),utl_raw.cast_to_raw(''<G_S1_D_C2_B>''))+13))) as now1, 
DECODE(z.oper_report_id,NULL,dbms_lob.substr(rep.xml_source,(dbms_lob.instr(rep.xml_source,''</G_S1_D_C3_B>'')-dbms_lob.instr(rep.xml_source,''<G_S1_D_C3_B>'')-13), dbms_lob.instr(rep.xml_source,''<G_S1_D_C3_B>'')+13),utl_raw.cast_to_varchar2(dbms_lob.substr(UTL_COMPRESS.lz_uncompress(z.xml_source_zip),(dbms_lob.instr(UTL_COMPRESS.lz_uncompress(z.xml_source_zip),utl_raw.cast_to_raw(''</G_S1_D_C3_B>''))-dbms_lob.instr(UTL_COMPRESS.lz_uncompress(z.xml_source_zip),utl_raw.cast_to_raw(''<G_S1_D_C3_B>''))-13), dbms_lob.instr(UTL_COMPRESS.lz_uncompress(z.xml_source_zip),utl_raw.cast_to_raw(''<G_S1_D_C3_B>''))+13))) as now3, 
DECODE(z.oper_report_id,NULL,dbms_lob.substr(rep.xml_source,(dbms_lob.instr(rep.xml_source,''</G_S1_D_C4_B>'')-dbms_lob.instr(rep.xml_source,''<G_S1_D_C4_B>'')-13), dbms_lob.instr(rep.xml_source,''<G_S1_D_C4_B>'')+13),utl_raw.cast_to_varchar2(dbms_lob.substr(UTL_COMPRESS.lz_uncompress(z.xml_source_zip),(dbms_lob.instr(UTL_COMPRESS.lz_uncompress(z.xml_source_zip),utl_raw.cast_to_raw(''</G_S1_D_C4_B>''))-dbms_lob.instr(UTL_COMPRESS.lz_uncompress(z.xml_source_zip),utl_raw.cast_to_raw(''<G_S1_D_C4_B>''))-13), dbms_lob.instr(UTL_COMPRESS.lz_uncompress(z.xml_source_zip),utl_raw.cast_to_raw(''<G_S1_D_C4_B>''))+13))) as now5, 
DECODE(z.oper_report_id,NULL,dbms_lob.substr(rep.xml_source,(dbms_lob.instr(rep.xml_source,''</G_S1_D_C5_B>'')-dbms_lob.instr(rep.xml_source,''<G_S1_D_C5_B>'')-13), dbms_lob.instr(rep.xml_source,''<G_S1_D_C5_B>'')+13),utl_raw.cast_to_varchar2(dbms_lob.substr(UTL_COMPRESS.lz_uncompress(z.xml_source_zip),(dbms_lob.instr(UTL_COMPRESS.lz_uncompress(z.xml_source_zip), utl_raw.cast_to_raw(''</G_S1_D_C5_B>''))-dbms_lob.instr(UTL_COMPRESS.lz_uncompress(z.xml_source_zip),utl_raw.cast_to_raw(''<G_S1_D_C5_B>''))-13), dbms_lob.instr(UTL_COMPRESS.lz_uncompress(z.xml_source_zip),utl_raw.cast_to_raw(''<G_S1_D_C5_B>''))+13))) as now7, 
DECODE(z.oper_report_id,NULL,dbms_lob.substr(rep.xml_source,(dbms_lob.instr(rep.xml_source,''</G_S1_D_C6_B>'')-dbms_lob.instr(rep.xml_source,''<G_S1_D_C6_B>'')-13), dbms_lob.instr(rep.xml_source,''<G_S1_D_C6_B>'')+13),utl_raw.cast_to_varchar2(dbms_lob.substr(UTL_COMPRESS.lz_uncompress(z.xml_source_zip),(dbms_lob.instr(UTL_COMPRESS.lz_uncompress(z.xml_source_zip), utl_raw.cast_to_raw(''</G_S1_D_C6_B>''))-dbms_lob.instr(UTL_COMPRESS.lz_uncompress(z.xml_source_zip),utl_raw.cast_to_raw(''<G_S1_D_C6_B>''))-13), dbms_lob.instr(UTL_COMPRESS.lz_uncompress(z.xml_source_zip), utl_raw.cast_to_raw(''<G_S1_D_C6_B>''))+13))) as now9 
from xxt_rp_oper_reports rep left join xxt_rp_oper_rep_zip z on z.oper_report_id=rep.oper_report_id where rep.form_ref=''GL_M07_02'' and rep.report_date=to_date(''19.02.2015'',''dd.mm.yyyy'')) LEFT 
LEFT JOIN (select rep2.report_date rd2, rep2.pa_r pa, 
DECODE(z2.oper_report_id,NULL,dbms_lob.substr(rep2.xml_source,(dbms_lob.instr(rep2.xml_source,''</G_S1_D_C2_E>'')-dbms_lob.instr(rep2.xml_source,''<G_S1_D_C2_E>'')-13), dbms_lob.instr(rep2.xml_source,''<G_S1_D_C2_E>'')+13),utl_raw.cast_to_varchar2(dbms_lob.substr(UTL_COMPRESS.lz_uncompress(z2.xml_source_zip),(dbms_lob.instr(UTL_COMPRESS.lz_uncompress(z2.xml_source_zip), utl_raw.cast_to_raw(''</G_S1_D_C2_E>''))-dbms_lob.instr(UTL_COMPRESS.lz_uncompress(z2.xml_source_zip),utl_raw.cast_to_raw(''<G_S1_D_C2_E>''))-13), dbms_lob.instr(UTL_COMPRESS.lz_uncompress(z2.xml_source_zip), utl_raw.cast_to_raw(''<G_S1_D_C2_E>''))+13))) as now2,
DECODE(z2.oper_report_id,NULL,dbms_lob.substr(rep2.xml_source,(dbms_lob.instr(rep2.xml_source,''</G_S1_D_C3_E>'')-dbms_lob.instr(rep2.xml_source,''<G_S1_D_C3_E>'')-13), dbms_lob.instr(rep2.xml_source,''<G_S1_D_C3_E>'')+13),utl_raw.cast_to_varchar2(dbms_lob.substr(UTL_COMPRESS.lz_uncompress(z2.xml_source_zip),(dbms_lob.instr(UTL_COMPRESS.lz_uncompress(z2.xml_source_zip), utl_raw.cast_to_raw(''</G_S1_D_C3_E>''))-dbms_lob.instr(UTL_COMPRESS.lz_uncompress(z2.xml_source_zip),utl_raw.cast_to_raw(''<G_S1_D_C3_E>''))-13), dbms_lob.instr(UTL_COMPRESS.lz_uncompress(z2.xml_source_zip), utl_raw.cast_to_raw(''<G_S1_D_C3_E>''))+13))) as now4, 
DECODE(z2.oper_report_id,NULL,dbms_lob.substr(rep2.xml_source,(dbms_lob.instr(rep2.xml_source,''</G_S1_D_C4_E>'')-dbms_lob.instr(rep2.xml_source,''<G_S1_D_C4_E>'')-13), dbms_lob.instr(rep2.xml_source,''<G_S1_D_C4_E>'')+13), utl_raw.cast_to_varchar2(dbms_lob.substr(UTL_COMPRESS.lz_uncompress(z2.xml_source_zip),(dbms_lob.instr(UTL_COMPRESS.lz_uncompress(z2.xml_source_zip),utl_raw.cast_to_raw(''</G_S1_D_C4_E>''))-dbms_lob.instr(UTL_COMPRESS.lz_uncompress(z2.xml_source_zip), utl_raw.cast_to_raw(''<G_S1_D_C4_E>''))-13), dbms_lob.instr(UTL_COMPRESS.lz_uncompress(z2.xml_source_zip),utl_raw.cast_to_raw(''<G_S1_D_C4_E>''))+13))) as now6, 
DECODE(z2.oper_report_id,NULL,dbms_lob.substr(rep2.xml_source,(dbms_lob.instr(rep2.xml_source,''</G_S1_D_C5_E>'')-dbms_lob.instr(rep2.xml_source,''<G_S1_D_C5_E>'')-13), dbms_lob.instr(rep2.xml_source,''<G_S1_D_C5_E>'')+13), utl_raw.cast_to_varchar2(dbms_lob.substr(UTL_COMPRESS.lz_uncompress(z2.xml_source_zip),(dbms_lob.instr(UTL_COMPRESS.lz_uncompress(z2.xml_source_zip),utl_raw.cast_to_raw(''</G_S1_D_C5_E>''))-dbms_lob.instr(UTL_COMPRESS.lz_uncompress(z2.xml_source_zip), utl_raw.cast_to_raw(''<G_S1_D_C5_E>''))-13), dbms_lob.instr(UTL_COMPRESS.lz_uncompress(z2.xml_source_zip),utl_raw.cast_to_raw(''<G_S1_D_C5_E>''))+13))) as now8,
DECODE(z2.oper_report_id,NULL,dbms_lob.substr(rep2.xml_source,(dbms_lob.instr(rep2.xml_source,''</G_S1_D_C6_E>'')-dbms_lob.instr(rep2.xml_source,''<G_S1_D_C6_E>'')-13), dbms_lob.instr(rep2.xml_source,''<G_S1_D_C6_E>'')+13), utl_raw.cast_to_varchar2(dbms_lob.substr(UTL_COMPRESS.lz_uncompress(z2.xml_source_zip),(dbms_lob.instr(UTL_COMPRESS.lz_uncompress(z2.xml_source_zip),utl_raw.cast_to_raw(''</G_S1_D_C6_E>''))-dbms_lob.instr(UTL_COMPRESS.lz_uncompress(z2.xml_source_zip), utl_raw.cast_to_raw(''<G_S1_D_C6_E>''))-13), dbms_lob.instr(UTL_COMPRESS.lz_uncompress(z2.xml_source_zip),utl_raw.cast_to_raw(''<G_S1_D_C6_E>''))+13))) as now10 
from xxt_rp_oper_reports rep2 left join xxt_rp_oper_rep_zip z2 on z2.oper_report_id=rep2.oper_report_id where rep2.form_ref=''GL_M07_02'') right on (left.PA_R=right.pa) and (left.pr_date=to_char(right.rd2,''dd.mm.yyyy'')) 
WHERE DECODE(left.now1,NULL,''-'',left.now1)<>DECODE(right.now2,NULL,''-'',right.now2) OR 
     DECODE(left.now3,NULL,''-'',left.now3)<>DECODE(right.now4,NULL,''-'',right.now4) OR 
     DECODE(left.now5,NULL,''-'',left.now5)<>DECODE(right.now6,NULL,''-'',right.now6) OR 
     DECODE(left.now7,NULL,''-'',left.now7)<>DECODE(right.now8,NULL,''-'',right.now8) OR 
     DECODE(left.now9,NULL,''-'',left.now9)<>DECODE(right.now10,NULL,''-'',right.now10) ' 
exec(@SQL) AT SMS
25 фев 15, 11:08    [17308905]     Ответить | Цитировать Сообщить модератору
 Re: запрос через линкованный сервер выполняется в тысячи раз медленнее, чем напрямую  [new]
Glory
Member

Откуда:
Сообщений: 104760
debirs
В чем может быть дело?

Ну так вот и мониторьте Oracle на предмет того, как он выполняет этот запрос
25 фев 15, 11:12    [17308935]     Ответить | Цитировать Сообщить модератору
 Re: запрос через линкованный сервер выполняется в тысячи раз медленнее, чем напрямую  [new]
Jaffar
Member

Откуда:
Сообщений: 633
debirs,

да элементарно, на таблицу xxt_rp_oper_reports нет кластерного индекса - вот и всё.
25 фев 15, 11:33    [17309082]     Ответить | Цитировать Сообщить модератору
 Re: запрос через линкованный сервер выполняется в тысячи раз медленнее, чем напрямую  [new]
debirs
Member

Откуда:
Сообщений: 30
Извиняюсь, если чего то недопонимаю, но средствами PL/SQL этот же запрос выполняется секунд 20.

И к сожалению нет возможности менять структуру БД, т.к. она централизованно поставлена
25 фев 15, 11:45    [17309176]     Ответить | Цитировать Сообщить модератору
 Re: запрос через линкованный сервер выполняется в тысячи раз медленнее, чем напрямую  [new]
Glory
Member

Откуда:
Сообщений: 104760
debirs
Извиняюсь, если чего то недопонимаю, но средствами PL/SQL этот же запрос выполняется секунд 20.

Причем тут средства PL/SQL ?
Мониторьте то, что происходит на Оракл, когда вы выполняете приведенный вами скрипт
25 фев 15, 11:52    [17309250]     Ответить | Цитировать Сообщить модератору
 Re: запрос через линкованный сервер выполняется в тысячи раз медленнее, чем напрямую  [new]
debirs
Member

Откуда:
Сообщений: 30
Glory,

если направите, какими средствами и что именно смотреть - буду очень признателен
25 фев 15, 11:56    [17309284]     Ответить | Цитировать Сообщить модератору
 Re: запрос через линкованный сервер выполняется в тысячи раз медленнее, чем напрямую  [new]
Glory
Member

Откуда:
Сообщений: 104760
debirs
Glory,

если направите, какими средствами и что именно смотреть - буду очень признателен

Это вопрос к администратору Оракла
Пускай он выясняет, чем отличаются выполнения одного запроса из разных клиентских приложений
25 фев 15, 12:08    [17309346]     Ответить | Цитировать Сообщить модератору
 Re: запрос через линкованный сервер выполняется в тысячи раз медленнее, чем напрямую  [new]
debirs
Member

Откуда:
Сообщений: 30
Извиняюсь, что побеспокоил всех по пустякам, оказалось, что тексты запросов таки разные были....

Посыпаю голову пеплом...
25 фев 15, 19:50    [17312272]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить