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

Откуда:
Сообщений: 257
Уважаемые форумчани)Нужна Ваша помощь.
Есть вот такой запрос.

SELECT TOP 1
       order_queue_id        ,
       o.service_id          ,
       [Function]            ,
       ExtId                 ,
       Language              ,
       Phone                 ,
       Spin2                 ,
       Type                  ,
       [Sum]                 ,
       Description           ,
       duration				 ,
       s.cm_max_count        ,
       s.call_max_count      ,
       s.smarty_max_count
    FROM order_queue o(UPDLOCK)
                                INNER JOIN
                                            service_c s(NOLOCK) ON(o.service_id = s.service_id)
                                INNER JOIN service_state_c ss ON(o.state_id = ss.service_state_id)
        WHERE is_processing_f = 0
              AND is_order_complete_f = 0           
              AND next_try_datetime <=  dbo.cnf_GetAbsolutDByDatetime(GETDATE()) 
    ORDER BY order_queue_id ASC

1-е.Перед выполнением запроса ставлю,чтобы узнать точное время выполнения запроса.
SET STATISTICS TIME ON
GO
Что выдает мне
SQL Server parse and compile time: 
   CPU time = 26 ms, elapsed time = 26 ms.

 SQL Server Execution Times:
   CPU time = 16 ms,  elapsed time = 32 ms.
SQL Server parse and compile time: 
   CPU time = 0 ms, elapsed time = 0 ms.
Хотел бы знать что конкретно каждый параметр обозначает.

2-е

  |--Top(TOP EXPRESSION:((1)))
       |--Nested Loops(Inner Join, WHERE:([Direct24].[dbo].[service_state_c].[service_state_id] as [ss].[service_state_id]=[Direct24].[dbo].[order_queue].[state_id] as [o].[state_id]))
            |--Filter(WHERE:([Direct24].[dbo].[order_queue].[next_try_datetime] as [o].[next_try_datetime]<=[Direct24].[dbo].[cnf_GetAbsolutDByDatetime](getdate())))
            |    |--Clustered Index Scan(OBJECT:([Direct24].[dbo].[order_queue].[XPKочередь_заявок] AS [o]),  WHERE:([Direct24].[dbo].[order_queue].[is_processing_f] as [o].[is_processing_f]=(0) AND [Direct24].[dbo].[order_queue].[is_order_complete_f] as [
            |--Table Scan(OBJECT:([Direct24].[dbo].[service_state_c] AS [ss]))

Данный план запроса читать снизу или сверху,и как японимаю поиск идет по класерному индексу,если ошибаюсь поправьте меня.
1 фев 11, 13:47    [10164417]     Ответить | Цитировать Сообщить модератору
 Re: пмогите разобраться  [new]
Glory
Member

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

Идет цикл по результату Clustered Index Scan
Для каждой итерации выполняется Table Scan(OBJECT:([Direct24].[dbo].[service_state_c] AS [ss]))
1 фев 11, 13:51    [10164476]     Ответить | Цитировать Сообщить модератору
 Re: пмогите разобраться  [new]
user87
Member

Откуда:
Сообщений: 257
Понял.
А по поводу

SQL Server parse and compile time:
Время разбора запроса?

SQL Server Execution Times:
Время выполнения запроса?
1 фев 11, 14:22    [10164759]     Ответить | Цитировать Сообщить модератору
 Re: пмогите разобраться  [new]
Lecter
Member

Откуда: Киев
Сообщений: 2032
user87
Понял.
А по поводу

SQL Server parse and compile time:
Время разбора запроса?

SQL Server Execution Times:
Время выполнения запроса?


Угу
1 фев 11, 14:44    [10164933]     Ответить | Цитировать Сообщить модератору
 Re: пмогите разобраться  [new]
user87
Member

Откуда:
Сообщений: 257
Прошу сильно не бейте.
Изменил код
SELECT TOP 1
       order_queue_id			,
       o.state_id				,
       o.service_id				,
       [Function]				,
       ExtId					,
       Language					,
       Phone					,
       Spin2					,
       Type						,
       [Sum]					,
       Description				,
	  (SELECT s.smarty_max_count
		FROM service_c s(NOLOCK) where o.service_id = s.service_id)	,
	  (SELECT duration FROM service_state_c ss WHERE o.state_id = ss.service_state_id AND o.service_id  = ss.service_id )
    FROM order_queue o
    ORDER BY order_queue_id ASC

  |--Compute Scalar(DEFINE:([Expr1009]=[Direct24].[dbo].[service_state_c].[duration] as [ss].[duration]))
       |--Top(TOP EXPRESSION:((1)))
            |--Nested Loops(Left Outer Join, WHERE:([Direct24].[dbo].[order_queue].[state_id] as [o].[state_id]=[Direct24].[dbo].[service_state_c].[service_state_id] as [ss].[service_state_id] AND [Direct24].[dbo].[order_queue].[service_id] as [o].[service
                 |--Compute Scalar(DEFINE:([Expr1005]=[Direct24].[dbo].[service_c].[smarty_max_count] as [s].[smarty_max_count]))
                 |    |--Nested Loops(Left Outer Join, WHERE:([Direct24].[dbo].[order_queue].[service_id] as [o].[service_id]=[Direct24].[dbo].[service_c].[service_id] as [s].[service_id]))
                 |         |--Clustered Index Scan(OBJECT:([Direct24].[dbo].[order_queue].[XPKочередь_заявок] AS [o]), ORDERED FORWARD)
                 |         |--Clustered Index Scan(OBJECT:([Direct24].[dbo].[service_c].[XPKservice_c] AS [s]))
                 |--Clustered Index Scan(OBJECT:([Direct24].[dbo].[service_state_c].[XPKсостояния_услуг] AS [ss]))

Как я понял по плану можно судить,что этот запрос будет более оптимальным,чем предыдущий
1 фев 11, 15:16    [10165184]     Ответить | Цитировать Сообщить модератору
 Re: пмогите разобраться  [new]
_djХомяГ
Guest
Ну сначала может оценить по statistics time и statistics io

для чистоты перед оценкой статистики
dbcc dropcleanbuffers
dbcc freeproccache

А визуально CLUST INDEX scanов во втором случае больше :)
1 фев 11, 15:24    [10165260]     Ответить | Цитировать Сообщить модератору
 Re: пмогите разобраться  [new]
user87
Member

Откуда:
Сообщений: 257
_djХомяГ ,
Спасибо про statistics io не знал,сейчас буду смотреть,а по поводу statistic time, это запрос лучше.
И по поводу
dbcc dropcleanbuffers
dbcc freeproccache

тоже делаю.
Спасибо
1 фев 11, 15:32    [10165321]     Ответить | Цитировать Сообщить модератору
 Re: пмогите разобраться  [new]
_djХомяГ
Guest
user87
_djХомяГ ,
Спасибо про statistics io не знал,сейчас буду смотреть,а по поводу statistic time, это запрос лучше.
И по поводу
dbcc dropcleanbuffers
dbcc freeproccache

тоже делаю.
Спасибо

dbcc лучше делать не на боевом серевере ....просто сбрасываются планы запросов и процедурный кеш со всеми вытекающими
1 фев 11, 15:35    [10165356]     Ответить | Цитировать Сообщить модератору
 Re: пмогите разобраться  [new]
user87
Member

Откуда:
Сообщений: 257
_djХомяГ , да само собой.Но спасибо что предупредили на всякий случай.Все что делаю это на тестовом сервере
1 фев 11, 15:49    [10165500]     Ответить | Цитировать Сообщить модератору
 Re: пмогите разобраться  [new]
user87
Member

Откуда:
Сообщений: 257
Чтобы не плодить тем отпишусь в старой,все разбираюсь с планами запросов.
RID Lookup(OBJECT:([Svetophone_Statistic].[dbo].[video_statistic]), SEEK:([Bmk1000]=[Bmk1000]) LOOKUP ORDERED FORWARD)

Из msdn узнал,но особо не понял.
Оператор RID Lookup осуществляет поиск закладки в куче при помощи заданного идентификатора строки. Столбец Аргумент  всегда содержит метку закладки, которая применяется для поиска строки в таблице, и имя таблицы, в которой осуществляется поиск. Оператору RID Lookup всегда сопутствует оператор NESTED LOOP JOIN.

RID Lookup является физическим оператором. 

Пожалуйста объясните на пальцах,что этот оператор значит?

Заранее спасибо.
18 мар 11, 12:23    [10391034]     Ответить | Цитировать Сообщить модератору
 Re: пмогите разобраться  [new]
iljy
Member

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

https://www.sql.ru/articles/mssql/03013101indexes.shtml
18 мар 11, 12:31    [10391107]     Ответить | Цитировать Сообщить модератору
 Re: пмогите разобраться  [new]
user87
Member

Откуда:
Сообщений: 257
Да и еще верно ли я понял,что фраза LOOKUP ORDERED FORWARDЮ обозначает,что надо сортировать данные в запросе?
18 мар 11, 12:31    [10391108]     Ответить | Цитировать Сообщить модератору
 Re: пмогите разобраться  [new]
alekseich.n
Member

Откуда:
Сообщений: 71
Приветствую.

Сижу ломаю голову, не могу понять скрипт. Расшифруйте, будьте добры.

use cdr
go
set nocount on
go
declare @from datetime,@to datetime,@curr datetime
select @curr = getdate()
select @to = convert(varchar(32),@curr,101)
select @from = dateadd(day,-1,@to)

print "Period: from "+convert(varchar(255),@from)+" to "+convert(varchar(255),@to)

select count (distinct globalCallID_CallId) as coun,
datepart(hh,dateadd(ss, dateTimeOrigination, '01/01/1970 04:00:00')) as dtc_h

from callDetailRecord (nolock)
where dateTimeOrigination between
datediff(ss,'01/01/1970 04:00:00',@from) and
datediff(ss,'01/01/1970 04:00:00',@to) --здесь промежуток времени
group by datepart(hh,dateadd(ss, dateTimeOrigination, '01/01/1970 04:00:00'))

order by coun desc, dtc_h
go
16 авг 11, 18:24    [11128763]     Ответить | Цитировать Сообщить модератору
 Re: пмогите разобраться  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31948
alekseich.n
Сижу ломаю голову, не могу понять скрипт. Расшифруйте, будьте добры.
1. Какая строчка непонятна?

2. Зачем именно в этой теме, что связывает вопросы?
16 авг 11, 18:29    [11128781]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить