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

Откуда:
Сообщений: 347
Бьюсь уже не первый месяц.
Крутится служба, которая с небольшой периодичностью в 8 параллельных потоков Parallel.ForEach(qHosts, options, g =>.... делает запросы к базе и формирует файлы xml. Запрос указан ниже с примером.
Иногда монитор показывает среднее время выполнения от 90 до 300 сек. Поскольку таких обращений не одна сотня, то весь процесс тормозит. При этом процессор sql сервера тужится во всю.
Но если в этот момент я сам делаю запрос из SSMS то он проходит за 1-2 сек.

Индексы таблиц проверил, все нормально.

Где собака зарыта?
11 дек 13, 12:13    [15276099]     Ответить | Цитировать Сообщить модератору
 Re: Медленное выполнение запросов  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10234
Блог
https://www.sql.ru/articles/mssql/2005/070704techniqueforensuringplanstabilityinsqlserver2000.shtml
11 дек 13, 12:19    [15276147]     Ответить | Цитировать Сообщить модератору
 Re: Медленное выполнение запросов  [new]
Rebelint
Member

Откуда:
Сообщений: 347
В данном случае это хранимка, своя система. которая динамически формирует запросы.


Приложил план запроса. В нем подозрительно что 47% ищется по полю Version таблицы POSOrderToReassessGoods , если я все правильно понимаю. Это timestamp поле.
Хотя по идее наверно лучше чтобы сначала находил нужные ID и из них убирал те, которые не входят в Version...


Вот запрос с примером:
DECLARE @HostName VARCHAR(50)
SET @HostName = '000001-00064034'

SELECT  id ,
        idTradeNames ,
        NewPrice ,
        idPOSOrderToReassess ,
        VERSION
FROM    [POSOrderToReassessGoods]
WHERE   ( Version > 10 )
        AND ( id IN (
              SELECT    PRG.id
              FROM      POSOrderToReassessGoods AS PRG
                        INNER JOIN POSOrderToReassess AS PR ON PRG.idPOSOrderToReassess = PR.id
                        INNER JOIN vPOSTerminalMovement ON PR.idOrganizationAddress = vPOSTerminalMovement.idAddress
                        INNER JOIN ( SELECT POSOrderToReassessGoods.idTradeNames ,
                                            MAX(POSOrderToReassess.DateIns) AS DateIns ,
                                            vPOSTerminalMovement.HostName
                                     FROM   POSOrderToReassessGoods
                                            INNER JOIN POSOrderToReassess ON POSOrderToReassessGoods.idPOSOrderToReassess = POSOrderToReassess.id
                                            INNER JOIN vPOSTerminalMovement ON POSOrderToReassess.idOrganizationAddress = vPOSTerminalMovement.idAddress
                                     WHERE  ( vPOSTerminalMovement.HostName = @HostName )
                                     GROUP BY POSOrderToReassessGoods.idTradeNames ,
                                            vPOSTerminalMovement.HostName
                                   ) t ON t.idTradeNames = prg.idTradeNames
                                          AND t.DateIns = pr.DateIns ) )


К сообщению приложен файл (1.sqlplan - 56Kb) cкачать
11 дек 13, 12:36    [15276279]     Ответить | Цитировать Сообщить модератору
 Re: Медленное выполнение запросов  [new]
Rebelint
Member

Откуда:
Сообщений: 347
блин, в запросе Version > 10 на самом деле Version > @VersionRow
11 дек 13, 12:37    [15276287]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить