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

Откуда:
Сообщений: 27
set dateformat ymd; select r.request_number , r.request_foldernumber, st.srvtype_name  ,o.org_name ,
convert(nvarchar(10),(select  max(d1.doc_indate_real)
from documents d1 where s.srv_id =d1.doc_service_id and d1.doc_indate_real is not null),104),
(select top 1 docsheet_service_request_no from 
document_sheet_service ds where ds.docsheet_service_service_id =s.srv_id),
convert(nvarchar(10),s.srv_actual_start,104), s.srv_duration, srvtype_duration_unit,
--convert(nvarchar(10),s.srv_end_date,104),   
convert(nvarchar(10),dbo.f_calc_end_date_complect(convert(nvarchar(10),s.srv_actual_start,112), s.srv_duration, (select st3.srvtype_duration_unit from service_types st3
where st3.srvtype_id =s.srv_srvtype_id ),(select srvtype_org_id from service_types st4 where st4.srvtype_id =s.srv_srvtype_id)),104),
case s.srv_state
when 8 then 'да'
when 10 then 'да'
else 'нет' end as 'Отметка',
convert(nvarchar(10),(select MAX( s1.srv_end_date) from services s1 where s1.srv_request_id = r.request_id),104) as q1,
case r.request_req_state 
when 7 then 'да'
else 'нет' end as 'Отметка1',
cust.customer_last_name , cust.customer_first_name , cust.customer_third_name ,
cnt.contacts_phone_number, cnt.contacts_cell_phone_number  
 
from services s
join service_types st on s.srv_srvtype_id =st.srvtype_id 
join organizations o on o.org_id = st.srvtype_org_id 
join requests r on r.request_id = s.srv_request_id 
join customers cust on cust.customer_id =r.request_customer_id 
join contacts cnt on cnt.contacts_customer_id = cust.customer_id  

where (select count(*) from documents d where
d.doc_service_id =s.srv_id and (d.doc_state=12 or d.doc_state=14 or d.doc_state=10
or d.doc_state=11  or (d.doc_state=13 and exists (select *
from documents_flow df3 where d.doc_docflow_id=df3.docflow_id and df3.docflow_isresult=0
and doc_issuedate  is null)))) =0

and (select count(*) from documents d where
d.doc_service_id =s.srv_id)>=0
and r.request_foldernumber is not null
/*
where (select count(*) from documents d where
d.doc_service_id =s.srv_id and (d.doc_state=12 or d.doc_state=14 or d.doc_state=10
or d.doc_state=11 )) >0

and (select count(*) from documents d where
d.doc_service_id =s.srv_id)>0
*/
--and r.request_foldernumber is not null
/*and s.srv_state = 3
*/
and r.request_id>=60000
order by CAST (r.request_number as int),3,4


Сообщение было отредактировано: 1 мар 12, 10:40
1 мар 12, 10:39    [12174917]     Ответить | Цитировать Сообщить модератору
 Re: помогите оптимизировать запрос  [new]
PavlovRoman
Member

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

постоянно вызывает блокировку на рабочей базе. на тестовом контуре выполняет влет. Настройки серверов паяти различаются (на тестовом в худшую сторону)
1 мар 12, 10:41    [12174932]     Ответить | Цитировать Сообщить модератору
 Re: помогите оптимизировать запрос  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Как минимум, ( select count() ... ) = 0 или >= 0 заменить на not exists и exists.

Остальное - надо в план смотреть.
1 мар 12, 10:42    [12174941]     Ответить | Цитировать Сообщить модератору
 Re: помогите оптимизировать запрос  [new]
Гавриленко Сергей Алексеевич
Member

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

постоянно вызывает блокировку на рабочей базе. на тестовом контуре выполняет влет. Настройки серверов паяти различаются (на тестовом в худшую сторону)
Какую блокировку-то?
1 мар 12, 10:42    [12174944]     Ответить | Цитировать Сообщить модератору
 Re: помогите оптимизировать запрос  [new]
PavlovRoman
Member

Откуда:
Сообщений: 27
Гавриленко Сергей Алексеевич,
Транзакция (идентификатор процесса 78) вызвала взаимоблокировку ресурсов блокировка с другим процессом и стала жертвой взаимоблокировки. Запустите транзакцию повторно.
1 мар 12, 10:47    [12174976]     Ответить | Цитировать Сообщить модератору
 Re: помогите оптимизировать запрос  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
PavlovRoman
Гавриленко Сергей Алексеевич,
Транзакция (идентификатор процесса 78) вызвала взаимоблокировку ресурсов блокировка с другим процессом и стала жертвой взаимоблокировки. Запустите транзакцию повторно.
Блокировка и дедлок - не одно и то же. Для дедлока нужен граф.
1 мар 12, 10:49    [12174992]     Ответить | Цитировать Сообщить модератору
 Re: помогите оптимизировать запрос  [new]
PavlovRoman
Member

Откуда:
Сообщений: 27
Гавриленко Сергей Алексеевич,

извините, а граф это план выполнения?
1 мар 12, 11:19    [12175223]     Ответить | Цитировать Сообщить модератору
 Re: помогите оптимизировать запрос  [new]
Гузы
Guest
PavlovRoman,

with(nolock)
?
1 мар 12, 11:26    [12175255]     Ответить | Цитировать Сообщить модератору
 Re: помогите оптимизировать запрос  [new]
Crimean
Member

Откуда:
Сообщений: 13147
Гузы
PavlovRoman,

with(nolock)
?


уж лучше RCSI + поднять порог паралелизЬма
1 мар 12, 12:25    [12175695]     Ответить | Цитировать Сообщить модератору
 Re: помогите оптимизировать запрос  [new]
PavlovRoman
Member

Откуда:
Сообщений: 27
RCSI - можно поподробней. чейчас проверю параллелизм
2 мар 12, 08:24    [12180925]     Ответить | Цитировать Сообщить модератору
 Re: помогите оптимизировать запрос  [new]
PavlovRoman
Member

Откуда:
Сообщений: 27
Большое всем спасибо. После замены count на exist, not exist и подндятия порога параллелизма запрос стал отрабатываться за секунды.
5 мар 12, 03:53    [12193143]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить