|
табличные конвейерные функции тормоза на разный базах
|
|||
---|---|---|---|
#18+
Имеются 2 примерно одинаковые по объему базы oracle 11xe 64bit есть пакет который выдает таблицу select * from table(pk_salary.salary_view) order by 1 на одной базе выполняется за 1,23с на другой 135,3с куда копать не понятно планы выглядят одинаково Description Object owner Object name Cost Cardinality Bytes SELECT STATEMENT, GOAL = CHOOSE SORT ORDER BY COLLECTION ITERATOR PICKLER FETCH PK_SALARY SALARY_VIEW покажите в каком направлении копать накатывали этот запрос примерно на 200 баз в сети где в 15 базах обнаружены тормоза никакой закономерности обнаружить не удалось ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2019, 18:24 |
|
табличные конвейерные функции тормоза на разный базах
|
|||
---|---|---|---|
#18+
Всем добрый день!! забыл написать :) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2019, 18:25 |
|
табличные конвейерные функции тормоза на разный базах
|
|||
---|---|---|---|
#18+
IMHO PL SQL Developer - Profiller ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2019, 18:29 |
|
табличные конвейерные функции тормоза на разный базах
|
|||
---|---|---|---|
#18+
ilyuha111в каком направлении копатьЭто невообразимо сложно понять, что в ilyuha111пакет который выдает таблицу ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2019, 19:05 |
|
табличные конвейерные функции тормоза на разный базах
|
|||
---|---|---|---|
#18+
сделал но понятней от этого не стало -- Created on 09.04.2019 by ANT declare -- Local variables here i integer; begin -- Test statements here for c in (select * from table(pk_salary.salary_view(v_salary_head_id => :v_salary_head_id, v_product_id => :v_product_id)) ) loop null; end loop; end; сделал вот такой скрипт PK_SALARY 631 134 548 9264 for cc in (select sr.salary_rule_id , -- база с тормозами PK_SALARY 631 257 7002 for cc in (select sr.salary_rule_id , -- база без тормозов ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2019, 19:31 |
|
табличные конвейерные функции тормоза на разный базах
|
|||
---|---|---|---|
#18+
В пакетах ничего интересного нет вот тексет type salary_rec is record( product_id t_product.product_id%type, sum_w_nds number, zp_fond number, zp_kass number, zp_zav number ); type salary_tab is table of salary_rec; function salary_view( v_salary_head_id t_salary_head.salary_head_id%type default null, v_product_id t_product.product_id%type default null ) return salary_tab pipelined as TYPE cur_typ IS REF CURSOR; c cur_typ; bc_roznica_rec type_roznica_rec; bc1_roznica_rec roznica_rec ; i number; bc_salary_tab salary_tab; bc_salary_rec salary_rec; vl_sql varchar2(30000); vl_name_search_stub varchar2(3000); vl_name_search_condition varchar2(3000); vl_salary_rule_priority number; vl_salary_rule_type_id number; vl_serial_value number; vl_salary_summ number; vl_salary_rule_paralel number; vl_salary_rule_name t_salary_rule.salary_rule_name%type; vl_salary_rule_type_name t_salary_rule_type.salary_rule_type_name%type; vl_product_id varchar2(32000); vl_partner_params_id varchar2(32000); vl_partner_params_id1 varchar2(32000); vl_bonus_zav number; vl_partner number; vl_base_zp_err number; begin vl_product_id :=''; if v_product_id is not null then vl_product_id :='and i.product_id ='||v_product_id; end if; vl_partner := organiz.pk_system.GetMyPartnerID; vl_sql := 'select s.product_id,' || chr(10) || ' 1 as outcome_count,' || chr(10) || ' max(s.outcome_price_one_w_nds) as sum_w_nds,' || chr(10) || ' max(s.outcome_price_one_w_nds - i.income_price_w_nds) as sum_nac ,' || chr(10) || ' max(pb.bonus_zav) as bonus_zav' || chr(10) || ' from' || chr(10) || ' t_sklad_state s,' || chr(10) || ' t_income i,' || chr(10) || ' t_partner_link_buh pb,' || chr(10) || ' t_owner p' || chr(10) || ' where' || chr(10) || ' i.income_id = s.income_id' || chr(10) || ' and s.product_count_sale>0' || chr(10) || vl_product_id || chr(10) || --' and i.product_id = 5100001333' || chr(10) || ' and pb.partner_id = p.partner_id' || chr(10) || ' GROUP BY' || chr(10) || ' s.product_id'|| chr(10) || ''; --dbms_output.put_line(vl_sql) ; OPEN c FOR vl_sql; LOOP FETCH c INTO bc1_roznica_rec; EXIT WHEN c%NOTFOUND; i:=0; vl_base_zp_err :=0; for cc in (select sr.salary_rule_id , sr.salary_head_id , sr.salary_rule_name , srt.salary_rule_type_name, sr.salary_rule_priority , sr.salary_rule_paralel , sr.salary_rule_type_id , srpro.product_value from t_salary_rule sr, t_salary_head sh, t_salary_rule_type srt, t_salary_rule_product srpro, t_salary_rule_partner srp where srt.salary_rule_type_id = sr.salary_rule_type_id and sr.salary_head_id = sh.salary_head_id and srt.salary_rule_type_id = sr.salary_rule_type_id and srp.salary_rule_id = sr.salary_rule_id and srpro.salary_rule_id = sr.salary_rule_id and srpro.product_id =bc1_roznica_rec.product_id and srp.is_del_flag = 0 and srpro.is_del_flag = 0 and sr.is_del_flag = 0 and sh.is_del_flag = 0 and sh.document_status_id= 290102 and trunc(sysdate) between sr.salary_head_date_start and coalesce(sr.salary_head_date_end,sh.salary_head_date_end) and srp.partner_id =vl_partner order by sr.salary_rule_priority ) loop i:=1; if cc.salary_rule_type_id = 1 then vl_salary_summ:= bc1_roznica_rec.sum_w_nds*cc.product_value/100; end if; if cc.salary_rule_type_id = 2 then vl_salary_summ:= bc1_roznica_rec.sum_nac*cc.product_value/100; end if; if cc.salary_rule_type_id = 3 then vl_salary_summ:= bc1_roznica_rec.outcome_count*cc.product_value; end if; if cc.salary_rule_type_id =4 then vl_salary_summ:= bc1_roznica_rec.outcome_count*cc.product_value; end if; if cc.salary_rule_paralel = 1 then vl_bonus_zav := bc1_roznica_rec.bonus_zav; else vl_bonus_zav := 0; end if; bc_salary_rec.product_id := bc1_roznica_rec.product_id; bc_salary_rec.sum_w_nds := bc1_roznica_rec.sum_w_nds; bc_salary_rec.zp_fond := vl_salary_summ; bc_salary_rec.zp_kass := vl_salary_summ*(1-vl_bonus_zav/100); bc_salary_rec.zp_zav := vl_salary_summ*(vl_bonus_zav/100); pipe row(bc_salary_rec); exit; end loop; if i=0 then begin select sr.salary_rule_priority, sr.salary_rule_type_id, sr.serial_value , sr.salary_rule_paralel into vl_salary_rule_priority, vl_salary_rule_type_id , vl_serial_value , vl_salary_rule_paralel from t_salary_rule sr, t_salary_head sh, t_salary_rule_type srt, t_salary_rule_partner srp where srt.salary_rule_type_id = sr.salary_rule_type_id and sr.salary_rule_priority = 100 -- базовая зп на все товары код 100 and sr.salary_head_id = sh.salary_head_id and srt.salary_rule_type_id = sr.salary_rule_type_id and srp.salary_rule_id = sr.salary_rule_id and srp.is_del_flag = 0 and sr.is_del_flag = 0 and sh.is_del_flag = 0 and sh.document_status_id= 290102 and trunc(sysdate) between sr.salary_head_date_start and coalesce(sr.salary_head_date_end,sh.salary_head_date_end) and srp.partner_id =vl_partner; exception when too_many_rows then vl_base_zp_err :=2; when no_data_found then vl_base_zp_err :=1; when others then raise; end; if vl_base_zp_err = 0 then if vl_salary_rule_type_id = 1 then vl_salary_summ:= bc1_roznica_rec.sum_w_nds* vl_serial_value /100; end if; if vl_salary_rule_type_id = 2 then vl_salary_summ:= bc1_roznica_rec.sum_nac* vl_serial_value /100; end if; if vl_salary_rule_type_id = 3 then vl_salary_summ:= vl_serial_value *bc1_roznica_rec.outcome_count; end if; if vl_salary_rule_type_id = 4 then vl_salary_summ:= vl_serial_value *bc1_roznica_rec.outcome_count; end if; if vl_salary_rule_paralel = 1 then vl_bonus_zav := bc1_roznica_rec.bonus_zav; else vl_bonus_zav := 0; end if; bc_salary_rec.product_id := bc1_roznica_rec.product_id; bc_salary_rec.sum_w_nds := bc1_roznica_rec.sum_w_nds; bc_salary_rec.zp_fond := vl_salary_summ; bc_salary_rec.zp_kass := vl_salary_summ*(1-vl_bonus_zav/100); bc_salary_rec.zp_zav := vl_salary_summ*(vl_bonus_zav/100); pipe row(bc_salary_rec); end if; end if; end loop; CLOSE c; return; end; не понятно почему в 90% баз работает нормально а в 10% тормозит ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2019, 19:33 |
|
табличные конвейерные функции тормоза на разный базах
|
|||
---|---|---|---|
#18+
ilyuha111Имеются 2 примерно одинаковые по объему базы oracle 11xe 64bit есть пакет который выдает таблицу select * from table(pk_salary.salary_view) order by 1 на одной базе выполняется за 1,23с на другой 135,3с куда копать не понятно планы выглядят одинаково Description Object owner Object name Cost Cardinality Bytes SELECT STATEMENT, GOAL = CHOOSE SORT ORDER BY COLLECTION ITERATOR PICKLER FETCH PK_SALARY SALARY_VIEW покажите в каком направлении копать накатывали этот запрос примерно на 200 баз в сети где в 15 базах обнаружены тормоза никакой закономерности обнаружить не удалось Ключевое слово здесь "примерно". Сравнение наборов данных, сбора статистики - на первом месте копания. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2019, 22:38 |
|
табличные конвейерные функции тормоза на разный базах
|
|||
---|---|---|---|
#18+
ilyuha111вот тексетЧудак, научись общаться в проф-форуме. Твой говно-текст никто даже смотреть не станет. ilyuha111не понятно почему в 90% баз работает нормально а в 10% тормозитПотому что есть 10% людей, которые способны понять почему, а 90% даже пытаться объяснять бесполезно. Правило Парето. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2019, 07:51 |
|
табличные конвейерные функции тормоза на разный базах
|
|||
---|---|---|---|
#18+
Переформулирую есть базы oracle 11xe 64bit и oracle 11xe 32bit операционистки от Winxp 32 до win10 64 примерно 200 баз возраст с 01,05,2018 по сегодня (устанавливалось в течении полугода ) размер данных от 200М до 1000М по неясным причинам в 20 базах запрос - select * from table(pk_salary.salary_view) order by 1 отрабатывает очень медленно (100-300 сек), в 180 базах 0,1-2 сек пытались найти закономерности проверяли: операционистки разрядность оракла 32-64 настройки памяти содержимое зависимых от запроса таблиц сбор статистики количество строк в результате запроса от 1000 до 9000 в разных базах, нет закономерности упрощали переписывали функцию закономерностей не нашли пытались : сбор статистики не помогает пересоздание зависимых таблиц не помогает переустановка оракла помогает раз из 3х замена компа помогает примерно 50/50 переписать запрос на SQL (без функции) помогает на 100%, но не учитывает сложную логику создание временной таблицы (вставка из функции) работает, но её нужно часть обновлять (delete insrt примерно 3-5 минут и в это время запросы подтормаживают) поднимали разные базы на дохлых компах (ATOM 1G оперативы hdd5200 ) все рано работает быстро примерно 5-10 сек возможно мы не там ищем, такие запросы применять стали недавно так как раньше особой необходимости в них не было ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2019, 10:18 |
|
табличные конвейерные функции тормоза на разный базах
|
|||
---|---|---|---|
#18+
ilyuha111переустановка оракла помогает раз из 3х замена компа помогает примерно 50/50Надо было ещё форточки открыть/закрыть. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2019, 10:37 |
|
табличные конвейерные функции тормоза на разный базах
|
|||
---|---|---|---|
#18+
ilyuha111пытались :Статистически логично начать разбираться с большей группы, где по неясным причинам "0,1-2 сек". ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2019, 10:41 |
|
табличные конвейерные функции тормоза на разный базах
|
|||
---|---|---|---|
#18+
-2-, не вижу смысла когда велась разработка то не сразу все заработало на тестовых стендах довели до нужного уровня и в работу ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2019, 10:47 |
|
табличные конвейерные функции тормоза на разный базах
|
|||
---|---|---|---|
#18+
ЕХИДСТВО_ОН Запустить на проблемных базах в профайлере и посмотреть, где, что и почему тормозить не судьба? Переустанавливать Oracle и заменять компы проще? ilyuha111....когда велась разработка то не сразу все заработало на тестовых стендах довели.... ilyuha111переустановка оракла помогает раз из 3х замена компа помогает примерно 50/50 Интересно, сколько раз пришлось переустанавливать Oracle и заменять комп на тестовых базах, что бы "довести до нужного уровня" ? Еще десять тысяч вёдер воды, синьор, — и золотой ключик у нас в кармане! ( C ) ЕХИДСТВО_ОФФ ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2019, 14:46 |
|
табличные конвейерные функции тормоза на разный базах
|
|||
---|---|---|---|
#18+
ilyuha111Переформулирую есть базы oracle 11xe 64bit и oracle 11xe 32bit операционистки от Winxp 32 до win10 64 примерно 200 баз возраст с 01,05,2018 по сегодня (устанавливалось в течении полугода ) размер данных от 200М до 1000М по неясным причинам в 20 базах запрос - select * from table(pk_salary.salary_view) order by 1 отрабатывает очень медленно (100-300 сек), в 180 базах 0,1-2 сек пытались найти закономерности проверяли: операционистки разрядность оракла 32-64 настройки памяти содержимое зависимых от запроса таблиц сбор статистики количество строк в результате запроса от 1000 до 9000 в разных базах, нет закономерности упрощали переписывали функцию закономерностей не нашли пытались : сбор статистики не помогает пересоздание зависимых таблиц не помогает переустановка оракла помогает раз из 3х замена компа помогает примерно 50/50 переписать запрос на SQL (без функции) помогает на 100%, но не учитывает сложную логику создание временной таблицы (вставка из функции) работает, но её нужно часть обновлять (delete insrt примерно 3-5 минут и в это время запросы подтормаживают) поднимали разные базы на дохлых компах (ATOM 1G оперативы hdd5200 ) все рано работает быстро примерно 5-10 сек возможно мы не там ищем, такие запросы применять стали недавно так как раньше особой необходимости в них не было фразу "план запроса" я так понимаю вы уже слышали? и даже писали Осталось сравнить их не только по внешнему запросу, но и по запросам из пакетa А как - гуглить по фразе trace in oracle ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2019, 15:27 |
|
табличные конвейерные функции тормоза на разный базах
|
|||
---|---|---|---|
#18+
да советы помогли есть запрос внутри функции с разными планами содержимое всех таблиц одинаковое вопрос почему отличаются планы ? возможно каким то образом план запроса из одной базы перемести в другую? ну или что ту вообще можно сделать ? запрос SELECT SR.SALARY_RULE_ID, SR.SALARY_HEAD_ID, SR.SALARY_RULE_NAME, SRT.SALARY_RULE_TYPE_NAME, SR.SALARY_RULE_PRIORITY, SR.SALARY_RULE_PARALEL, SR.SALARY_RULE_TYPE_ID, SRPRO.PRODUCT_VALUE FROM T_SALARY_RULE SR, T_SALARY_HEAD SH, T_SALARY_RULE_TYPE SRT, T_SALARY_RULE_PRODUCT SRPRO, T_SALARY_RULE_PARTNER SRP WHERE SRT.SALARY_RULE_TYPE_ID = SR.SALARY_RULE_TYPE_ID AND SR.SALARY_HEAD_ID = SH.SALARY_HEAD_ID AND SRT.SALARY_RULE_TYPE_ID = SR.SALARY_RULE_TYPE_ID AND SRP.SALARY_RULE_ID = SR.SALARY_RULE_ID AND SRPRO.SALARY_RULE_ID = SR.SALARY_RULE_ID AND SRPRO.PRODUCT_ID = :B2 AND SRP.PARTNER_ID = :B1 AND SRP.IS_DEL_FLAG = 0 AND SRPRO.IS_DEL_FLAG = 0 AND SR.IS_DEL_FLAG = 0 AND SH.IS_DEL_FLAG = 0 AND SH.DOCUMENT_STATUS_ID = 290102 AND TRUNC (SYSDATE) BETWEEN SR.SALARY_HEAD_DATE_START AND COALESCE (SR.SALARY_HEAD_DATE_END, SH.SALARY_HEAD_DATE_END) ORDER BY SR.SALARY_RULE_PRIORITY план с тормозами Код: plaintext 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.
план без тормозов Код: plaintext 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2019, 09:07 |
|
табличные конвейерные функции тормоза на разный базах
|
|||
---|---|---|---|
#18+
все вопрос решиться кому интересно 1 починили сбор статистики план поменялся на нормально но запрос отрабатывал долго 2 alter system flush shared_pool выполнили команду и все заработало ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2019, 09:22 |
|
табличные конвейерные функции тормоза на разный базах
|
|||
---|---|---|---|
#18+
ilyuha111все вопрос решиться кому интересно ... Вы сами хоть какие-то выводы сделали для себя или нет? даже тегом Код: plsql 1. 2. 3.
пользоваться не научились! ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2019, 09:34 |
|
|
start [/forum/topic.php?fid=52&msg=39798995&tid=1882593]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
41ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
others: | 307ms |
total: | 449ms |
0 / 0 |