Запрс на 7.5 в 16 раз медленне чем на 7.0
Добавлено: 05 июл 2006, 17:16
Проблема:
запрос на IB 7.5 выполняется раз в 16 медленне, чем на IB 7.0.
Выполнялись на одном сервере W2003, в один день. Настройки сервера не менялись. Параметры конфиг. файла практически одинаковы, за исключением новых для 7.5.
БД многофайловая, сразу после b/r:
DS_P1OF8.GDB 1610616832
DS_P2OF8.GDB 1610616832
DS_P3OF8.GDB 1610616832
DS_P4OF8.GDB 278261760
DS_P5OF8.GDB 8192
DS_P6OF8.GDB 8192
DS_P7OF8.GDB 8192
DS_P8OF8.GDB 8192
Запрос:
select
min(tt.descr) as descr_tt,
min(la_t.descr) as descr_la_t,
min(c.code) as code_c,
min(cf0.descr) as descr_cf
min(c.descr) as descr_c,
c.ADDRESS,
a.ts_doc,
min(a.docdef) as docdef,
min(a.num_doc) as num_doc,
min(cast(f_left(p.descr,1) as varchar(1))) as descr_pa,
min(a.days_cre) as days_cre,
min(UDF_SIIF3(a.discount,0,a.discount)) as discount,
max(UDF_SIIF3(a.izd,0,a.izd)) as izd,
min(a.price_level) as price_level,
min(UDF_SIIF3(n_payed,0,n_payed)+UDF_SIIF3(b_payed,0,b_payed)) as payed,
a.id_i,
i.code,
i.descr as descr_i,
min(ifl.descr) as descr_if,
a.id_d,
-sum(a.kol) as kol,
-sum(a.sum_ss) as sum_ss,
-sum(a.summ) as summ
from sa_type1 a
left join sc_clients c on c.id_c=a.id_c
left join sc_clients cf0 on cf0.id_c=c.pid
left join sc_clients cf1 on cf1.id_c=cf0.pid
left join sc_clients cf2 on cf2.id_c=cf1.pid
left join sc_items i on i.id_i=a.id_i
left join sc_items ifl on ifl.id_i=i.pid
left join sc_tradetypes tt on tt.id_tt=a.id_tt
left join sc_laibors la_t on la_t.id_la=a.id_la_t
left join sc_paytypes p on p.id_pa=a.id_pa
where
/* Uni limit begin */
a.ID_PR=124
/* Uni limit end */
and sign=1 and a.date_doc>='2006-06-01' and a.date_doc<'2006-07-01'
group by a.id_tt, a.id_la, a.id_c, C.ADDRESS, a.ts_doc, i.pid, a.id_i, i.code, i.descr, id_d
order by tt.descr, la_t.descr, c.descr, ifl.descr, i.descr
Результаты, выданные IBExpert:
>> IB 7.0 on server #2 --------------------------------------------------------------------------------------------------
Plan
SORT (SORT (JOIN (JOIN (JOIN (JOIN (JOIN (JOIN (JOIN (JOIN (JOIN (A INDEX (X_SA_TYPE1_DATE_DOC,SA_TYPE1_ID_PR),C INDEX (RDB$PRIMARY7)),CF0 INDEX (RDB$PRIMARY7)),CF1 INDEX (RDB$PRIMARY7)),CF2 INDEX (RDB$PRIMARY7)),I INDEX (RDB$PRIMARY12)),IFL INDEX (RDB$PRIMARY12)),TT INDEX (RDB$PRIMARY19)),LA_T INDEX (RDB$PRIMARY14)),P INDEX (RDB$PRIMARY15))))
Adapted Plan
SORT (SORT (JOIN (JOIN (JOIN (JOIN (JOIN (JOIN (JOIN (JOIN (JOIN (A INDEX (X_SA_TYPE1_DATE_DOC,SA_TYPE1_ID_PR),C INDEX (RDB$PRIMARY7)),CF0 INDEX (RDB$PRIMARY7)),CF1 INDEX (RDB$PRIMARY7)),CF2 INDEX (RDB$PRIMARY7)),I INDEX (RDB$PRIMARY12)),IFL INDEX (RDB$PRIMARY12)),TT INDEX (RDB$PRIMARY19)),LA_T INDEX (RDB$PRIMARY14)),P INDEX (RDB$PRIMARY15))))
------ Performance info ------
Prepare time = 0ms
Execute time = 33s 938ms
Avg fetch time = 2 121.13 ms
Current memory = 301 017 314
Max memory = 301 018 338
Memory buffers = 65 535
Reads from disk to cache = 17 572
Writes from cache to disk = 0
Fetches from cache = 4 190 984
>> IB 7.5 on server #2 --------------------------------------------------------------------------------------------------
Plan
PLAN SORT (SORT (JOIN (JOIN (JOIN (JOIN (JOIN (JOIN (JOIN (JOIN (JOIN (A INDEX (X_SA_TYPE1_DATE_DOC,SA_TYPE1_ID_PR),C INDEX (RDB$PRIMARY7)),CF0 INDEX (RDB$PRIMARY7)),CF1 INDEX (RDB$PRIMARY7)),CF2 INDEX (RDB$PRIMARY7)),I INDEX (RDB$PRIMARY12)),IFL INDEX (RDB$PRIMARY12)),TT INDEX (RDB$PRIMARY19)),LA_T INDEX (RDB$PRIMARY14)),P INDEX (RDB$PRIMARY15))))
Adapted Plan
PLAN SORT (SORT (JOIN (JOIN (JOIN (JOIN (JOIN (JOIN (JOIN (JOIN (JOIN (A INDEX (X_SA_TYPE1_DATE_DOC,SA_TYPE1_ID_PR),C INDEX (RDB$PRIMARY7)),CF0 INDEX (RDB$PRIMARY7)),CF1 INDEX (RDB$PRIMARY7)),CF2 INDEX (RDB$PRIMARY7)),I INDEX (RDB$PRIMARY12)),IFL INDEX (RDB$PRIMARY12)),TT INDEX (RDB$PRIMARY19)),LA_T INDEX (RDB$PRIMARY14)),P INDEX (RDB$PRIMARY15))))
------ Performance info ------
Prepare time = 16ms
Execute time = 9m 11s 547ms
Avg fetch time = 34 471.69 ms
Current memory = 585 275 116
Max memory = 585 279 944
Memory buffers = 131 070
Reads from disk to cache = 17 884
Writes from cache to disk = 0
Fetches from cache = 4 191 043
Не подскажете как избежать этого?
И можно ли добиться того, чтобы этот запрос выполнялся на 7.5 не медленнее, чем на 7.0?
запрос на IB 7.5 выполняется раз в 16 медленне, чем на IB 7.0.
Выполнялись на одном сервере W2003, в один день. Настройки сервера не менялись. Параметры конфиг. файла практически одинаковы, за исключением новых для 7.5.
БД многофайловая, сразу после b/r:
DS_P1OF8.GDB 1610616832
DS_P2OF8.GDB 1610616832
DS_P3OF8.GDB 1610616832
DS_P4OF8.GDB 278261760
DS_P5OF8.GDB 8192
DS_P6OF8.GDB 8192
DS_P7OF8.GDB 8192
DS_P8OF8.GDB 8192
Запрос:
select
min(tt.descr) as descr_tt,
min(la_t.descr) as descr_la_t,
min(c.code) as code_c,
min(cf0.descr) as descr_cf
min(c.descr) as descr_c,
c.ADDRESS,
a.ts_doc,
min(a.docdef) as docdef,
min(a.num_doc) as num_doc,
min(cast(f_left(p.descr,1) as varchar(1))) as descr_pa,
min(a.days_cre) as days_cre,
min(UDF_SIIF3(a.discount,0,a.discount)) as discount,
max(UDF_SIIF3(a.izd,0,a.izd)) as izd,
min(a.price_level) as price_level,
min(UDF_SIIF3(n_payed,0,n_payed)+UDF_SIIF3(b_payed,0,b_payed)) as payed,
a.id_i,
i.code,
i.descr as descr_i,
min(ifl.descr) as descr_if,
a.id_d,
-sum(a.kol) as kol,
-sum(a.sum_ss) as sum_ss,
-sum(a.summ) as summ
from sa_type1 a
left join sc_clients c on c.id_c=a.id_c
left join sc_clients cf0 on cf0.id_c=c.pid
left join sc_clients cf1 on cf1.id_c=cf0.pid
left join sc_clients cf2 on cf2.id_c=cf1.pid
left join sc_items i on i.id_i=a.id_i
left join sc_items ifl on ifl.id_i=i.pid
left join sc_tradetypes tt on tt.id_tt=a.id_tt
left join sc_laibors la_t on la_t.id_la=a.id_la_t
left join sc_paytypes p on p.id_pa=a.id_pa
where
/* Uni limit begin */
a.ID_PR=124
/* Uni limit end */
and sign=1 and a.date_doc>='2006-06-01' and a.date_doc<'2006-07-01'
group by a.id_tt, a.id_la, a.id_c, C.ADDRESS, a.ts_doc, i.pid, a.id_i, i.code, i.descr, id_d
order by tt.descr, la_t.descr, c.descr, ifl.descr, i.descr
Результаты, выданные IBExpert:
>> IB 7.0 on server #2 --------------------------------------------------------------------------------------------------
Plan
SORT (SORT (JOIN (JOIN (JOIN (JOIN (JOIN (JOIN (JOIN (JOIN (JOIN (A INDEX (X_SA_TYPE1_DATE_DOC,SA_TYPE1_ID_PR),C INDEX (RDB$PRIMARY7)),CF0 INDEX (RDB$PRIMARY7)),CF1 INDEX (RDB$PRIMARY7)),CF2 INDEX (RDB$PRIMARY7)),I INDEX (RDB$PRIMARY12)),IFL INDEX (RDB$PRIMARY12)),TT INDEX (RDB$PRIMARY19)),LA_T INDEX (RDB$PRIMARY14)),P INDEX (RDB$PRIMARY15))))
Adapted Plan
SORT (SORT (JOIN (JOIN (JOIN (JOIN (JOIN (JOIN (JOIN (JOIN (JOIN (A INDEX (X_SA_TYPE1_DATE_DOC,SA_TYPE1_ID_PR),C INDEX (RDB$PRIMARY7)),CF0 INDEX (RDB$PRIMARY7)),CF1 INDEX (RDB$PRIMARY7)),CF2 INDEX (RDB$PRIMARY7)),I INDEX (RDB$PRIMARY12)),IFL INDEX (RDB$PRIMARY12)),TT INDEX (RDB$PRIMARY19)),LA_T INDEX (RDB$PRIMARY14)),P INDEX (RDB$PRIMARY15))))
------ Performance info ------
Prepare time = 0ms
Execute time = 33s 938ms
Avg fetch time = 2 121.13 ms
Current memory = 301 017 314
Max memory = 301 018 338
Memory buffers = 65 535
Reads from disk to cache = 17 572
Writes from cache to disk = 0
Fetches from cache = 4 190 984
>> IB 7.5 on server #2 --------------------------------------------------------------------------------------------------
Plan
PLAN SORT (SORT (JOIN (JOIN (JOIN (JOIN (JOIN (JOIN (JOIN (JOIN (JOIN (A INDEX (X_SA_TYPE1_DATE_DOC,SA_TYPE1_ID_PR),C INDEX (RDB$PRIMARY7)),CF0 INDEX (RDB$PRIMARY7)),CF1 INDEX (RDB$PRIMARY7)),CF2 INDEX (RDB$PRIMARY7)),I INDEX (RDB$PRIMARY12)),IFL INDEX (RDB$PRIMARY12)),TT INDEX (RDB$PRIMARY19)),LA_T INDEX (RDB$PRIMARY14)),P INDEX (RDB$PRIMARY15))))
Adapted Plan
PLAN SORT (SORT (JOIN (JOIN (JOIN (JOIN (JOIN (JOIN (JOIN (JOIN (JOIN (A INDEX (X_SA_TYPE1_DATE_DOC,SA_TYPE1_ID_PR),C INDEX (RDB$PRIMARY7)),CF0 INDEX (RDB$PRIMARY7)),CF1 INDEX (RDB$PRIMARY7)),CF2 INDEX (RDB$PRIMARY7)),I INDEX (RDB$PRIMARY12)),IFL INDEX (RDB$PRIMARY12)),TT INDEX (RDB$PRIMARY19)),LA_T INDEX (RDB$PRIMARY14)),P INDEX (RDB$PRIMARY15))))
------ Performance info ------
Prepare time = 16ms
Execute time = 9m 11s 547ms
Avg fetch time = 34 471.69 ms
Current memory = 585 275 116
Max memory = 585 279 944
Memory buffers = 131 070
Reads from disk to cache = 17 884
Writes from cache to disk = 0
Fetches from cache = 4 191 043
Не подскажете как избежать этого?
И можно ли добиться того, чтобы этот запрос выполнялся на 7.5 не медленнее, чем на 7.0?