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

Откуда: С-Петербург
Сообщений: 616
Здравствуйте!
столкнулся с каким-то странным эффектом
вроде простой запрос. возвращает что-то порядка 6000 записей
ежели просто так то исполняется за десятки милисекунд
select *
from SESSION_HISTORY s (nolock)
join CLASS u (nolock) on u.ID=s.USER_ID
where 51077=s.ID
order by s._id desc
ежели вот так то что-то порядка секунды
select '
  <tr>
    <td nowrap>
      <a href="PAGE_NAME=&Sel_ID='+cast(s._id as varchar)+'">'+u.CODE+'</a>
    </td>
    <td nowrap>'+cast(s.USER_ID as varchar)+'</td>
    <td nowrap>'+convert(varchar,s.LAST_CALL,120)+'</td>
    <td nowrap align="right">
      '+convert(varchar, datediff(hh,s .CREATED, s.LAST_CALL))
+substring(convert(varchar, s.LAST_CALL-s.CREATED, 108), 3,6)+'
    </td>
    <td nowrap align="right">'+cast(s.HIT as varchar)+'</td>
    <td nowrap>'+s.IP+'</td>
    <td nowrap>'+s.PAGE_NAME+'</td>
    <td nowrap align="right">'+cast(isnull(s.DURATION,0) as varchar)+'</td>
    <td nowrap>'+cast(s.SPID as varchar)+'</td>
  </tr>
' TEXT, s.*
from SESSION_HISTORY s (nolock)
join CLASS u (nolock) on u.ID=s.USER_ID
where 51077=s.ID
order by s._id desc
а вот так как оно в общем-то надо порядка 6 секунд
select '
  <tr>
    <td nowrap>
      <a href="PAGE_NAME=&Sel_ID='+cast(s._id as varchar)+'">'+u.CODE+'</a>
    </td>
    <td nowrap>'+cast(s.USER_ID as varchar)+'</td>
    <td nowrap>'+convert(varchar,s.LAST_CALL,120)+'</td>
    <td nowrap align="right">
      '+convert(varchar, datediff(hh,s .CREATED, s.LAST_CALL))
+substring(convert(varchar, s.LAST_CALL-s.CREATED, 108), 3,6)+'
    </td>
    <td nowrap align="right">'+cast(s.HIT as varchar)+'</td>
    <td nowrap>'+s.IP+'</td>
    <td nowrap>'+s.PAGE_NAME+'</td>
    <td nowrap align="right">'+cast(isnull(s.DURATION,0) as varchar)+'</td>
    <td nowrap>'+cast(s.SPID as varchar)+'</td>
  </tr>
' TEXT
from SESSION_HISTORY s (nolock)
join CLASS u (nolock) on u.ID=s.USER_ID
where 51077=s.ID
order by s._id desc
планы запросов все время аналогичные. поиск по индексам идет
не поможете ли разобраться с такими странностями
31 авг 09, 11:22    [7596639]     Ответить | Цитировать Сообщить модератору
 Re: странно притормаживает запрос  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
профайлером смотрели? или на глаз определяли?

для спящего время бодрствования равносильно сну
31 авг 09, 11:27    [7596678]     Ответить | Цитировать Сообщить модератору
 Re: странно притормаживает запрос  [new]
leov
Member

Откуда: С-Петербург
Сообщений: 616
Алексей2003,

и так и эдак делал. один хрен
31 авг 09, 11:32    [7596718]     Ответить | Цитировать Сообщить модератору
 Re: странно притормаживает запрос  [new]
leov
Member

Откуда: С-Петербург
Сообщений: 616
вот нашел как планы текстовые достать
первый конечно план несколько другой
но вот второй и третий идентичны, а разница в скорости выполнения чуть не в порядок
  |--Sort(ORDER BY:([s].[_id] DESC))
       |--Merge Join(Inner Join, MERGE:([u].[ID])=([s].[USER_ID]), RESIDUAL:([s].[USER_ID]=[u].[ID]))
            |--Clustered Index Scan(OBJECT:([pdp20090712].[dbo].[CLASS].[PK_CLASS] AS [u]), ORDERED FORWARD)
            |--Sort(ORDER BY:([s].[USER_ID] ASC))
                 |--Clustered Index Seek(OBJECT:([pdp20090712].[dbo].[SESSION_HISTORY].[IDX_SESSION_HISTORY_ID] AS [s]), SEEK:([s].[ID]=51077) ORDERED FORWARD)

  
  |--Compute Scalar(DEFINE:([Expr1002]='
  <tr>
    <td nowrap>
      <a href="PAGE_NAME=&Sel_ID='+Convert([s].[_id])+'">'+[u].[code]+'</a>
    </td>
    <td nowrap>'+Convert([s].[USER_ID])+'</td>
    <td nowrap>'+Convert([s].[LAST_CALL])+'</td>
    <td nowrap align="right">
      '+Convert(datediff(hour, [s].[CREATED], [s].[LAST_CALL]))+substring(Convert([s].[LAST_CALL]-[s].[CREATED]), 3, 6)+'
    </td>
    <td nowrap align="right">'+Convert([s].[HIT])+'</td>
    <td nowrap>'+[s].[IP]+'</td>
    <td nowrap>'+[s].[PAGE_NAME]+'</td>
    <td nowrap align="right">'+Convert(isnull([s].[DURATION], 0))+'</td>
    <td nowrap>'+Convert([s].[SPID])+'</td>
  </tr>
'))
       |--Sort(ORDER BY:([s].[_id] DESC))
            |--Hash Match(Inner Join, HASH:([u].[ID])=([s].[USER_ID]))
                 |--Index Scan(OBJECT:([pdp20090712].[dbo].[CLASS].[IX_CLASS] AS [u]))
                 |--Clustered Index Seek(OBJECT:([pdp20090712].[dbo].[SESSION_HISTORY].[IDX_SESSION_HISTORY_ID] AS [s]), SEEK:([s].[ID]=51077) ORDERED FORWARD)

  |--Compute Scalar(DEFINE:([Expr1002]='
  <tr>
    <td nowrap>
      <a href="PAGE_NAME=&Sel_ID='+Convert([s].[_id])+'">'+[u].[code]+'</a>
    </td>
    <td nowrap>'+Convert([s].[USER_ID])+'</td>
    <td nowrap>'+Convert([s].[LAST_CALL])+'</td>
    <td nowrap align="right">
      '+Convert(datediff(hour, [s].[CREATED], [s].[LAST_CALL]))+substring(Convert([s].[LAST_CALL]-[s].[CREATED]), 3, 6)+'
    </td>
    <td nowrap align="right">'+Convert([s].[HIT])+'</td>
    <td nowrap>'+[s].[IP]+'</td>
    <td nowrap>'+[s].[PAGE_NAME]+'</td>
    <td nowrap align="right">'+Convert(isnull([s].[DURATION], 0))+'</td>
    <td nowrap>'+Convert([s].[SPID])+'</td>
  </tr>
'))
       |--Sort(ORDER BY:([s].[_id] DESC))
            |--Hash Match(Inner Join, HASH:([u].[ID])=([s].[USER_ID]))
                 |--Index Scan(OBJECT:([pdp20090712].[dbo].[CLASS].[IX_CLASS] AS [u]))
                 |--Clustered Index Seek(OBJECT:([pdp20090712].[dbo].[SESSION_HISTORY].[IDX_SESSION_HISTORY_ID] AS [s]), SEEK:([s].[ID]=51077) ORDERED FORWARD)
31 авг 09, 11:48    [7596846]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить