Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Запрос из приложения выполняется за 200мс а из Management Studio за 3 мс  [new]
Int23
Guest
Есть запрос такого вида

exec sp_executesql N'select N0."OID",N0."TerritoryObjectType",N0."CodeKLADR",N0."OKATO",N0."TerritoryMunicipalUnion",N0."CodeAutonomy",N0."CodeArea",N0."CodeCity",N0."CodeIntraCityDistrict",N0."CodeLocality",N0."CodeStreet",N0."CodeAdditionElement",N0."CodeChildAdditionElement",N0."CodeRegion",N0."Index",N0."FullName",N0."Name",N0."Owner",N0."OptimisticLockField",N0."GCRecord" from "dbo"."TerritoryObject" N0
where (N0."GCRecord" is null and (N0."Owner" = @p0))',N'@p0 bigint',@p0=1237888


Смотрю поле Duration в Профиллере. Когда выполняется из приложения то выполняется за 200 миллисек. А когда делаю так

declare @d datetime = GetDate()

exec sp_executesql N'select N0."OID",N0."TerritoryObjectType",N0."CodeKLADR",N0."OKATO",N0."TerritoryMunicipalUnion",N0."CodeAutonomy",N0."CodeArea",N0."CodeCity",N0."CodeIntraCityDistrict",N0."CodeLocality",N0."CodeStreet",N0."CodeAdditionElement",N0."CodeChildAdditionElement",N0."CodeRegion",N0."Index",N0."FullName",N0."Name",N0."Owner",N0."OptimisticLockField",N0."GCRecord" from "dbo"."TerritoryObject" N0
where (N0."GCRecord" is null and (N0."Owner" = @p0))',N'@p0 bigint',@p0=1237888

select GetDate() - @d


ТО максимум за 3мсек. А то и вообще за 0. В чём может быть причина? Счас поднял тестовый сервак. Ничего кроме моей БД на нём нету
24 июн 12, 13:31    [12766124]     Ответить | Цитировать Сообщить модератору
 Re: Запрос из приложения выполняется за 200мс а из Management Studio за 3 мс  [new]
ultima
Member

Откуда: СПб
Сообщений: 121
Int23,

Проверьте что существуют индексы по полям из where.
Была похожая проблема после перехода с 2000.
24 июн 12, 14:07    [12766163]     Ответить | Цитировать Сообщить модератору
 Re: Запрос из приложения выполняется за 200мс а из Management Studio за 3 мс  [new]
step_ks
Member

Откуда:
Сообщений: 936
показывайте планы и
DBCC USEROPTIONS
с обоих мест
24 июн 12, 14:07    [12766166]     Ответить | Цитировать Сообщить модератору
 Re: Запрос из приложения выполняется за 200мс а из Management Studio за 3 мс  [new]
Int23
Guest
Вот план моего выполнения из M Studio
24 июн 12, 15:11    [12766297]     Ответить | Цитировать Сообщить модератору
 Re: Запрос из приложения выполняется за 200мс а из Management Studio за 3 мс  [new]
Int23
Guest
Не прикрепился

К сообщению приложен файл. Размер - 21Kb
24 июн 12, 15:15    [12766306]     Ответить | Цитировать Сообщить модератору
 Re: Запрос из приложения выполняется за 200мс а из Management Studio за 3 мс  [new]
Int23
Guest
А вот опции
24 июн 12, 15:16    [12766310]     Ответить | Цитировать Сообщить модератору
 Re: Запрос из приложения выполняется за 200мс а из Management Studio за 3 мс  [new]
Int23
Guest


К сообщению приложен файл. Размер - 6Kb
24 июн 12, 15:16    [12766314]     Ответить | Цитировать Сообщить модератору
 Re: Запрос из приложения выполняется за 200мс а из Management Studio за 3 мс  [new]
Int23
Guest
А вот опции в программе

К сообщению приложен файл. Размер - 7Kb
24 июн 12, 15:38    [12766365]     Ответить | Цитировать Сообщить модератору
 Re: Запрос из приложения выполняется за 200мс а из Management Studio за 3 мс  [new]
step_ks
Member

Откуда:
Сообщений: 936
попробовать сделать
set arithabort on
в коннекте программы
24 июн 12, 15:43    [12766369]     Ответить | Цитировать Сообщить модератору
 Re: Запрос из приложения выполняется за 200мс а из Management Studio за 3 мс  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
1) Обновить статистику
и
2) можно использовать хинт c указанием индекса в запросе.
3) Либо можно использовать хинт option( recompile)

попробовать сделать

set arithabort on

в коннекте программы 

Это только временное решение и годное наверное только для диагностики.
25 июн 12, 09:50    [12768222]     Ответить | Цитировать Сообщить модератору
 Re: Запрос из приложения выполняется за 200мс а из Management Studio за 3 мс  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
еще можно попробовать сделать покрывающий индекс.
25 июн 12, 09:52    [12768240]     Ответить | Цитировать Сообщить модератору
 Re: Запрос из приложения выполняется за 200мс а из Management Studio за 3 мс  [new]
Int23
Guest
Пробовал покрывающий. Такая же ситуация
25 июн 12, 10:01    [12768297]     Ответить | Цитировать Сообщить модератору
 Re: Запрос из приложения выполняется за 200мс а из Management Studio за 3 мс  [new]
Int23
Guest
1.Поставил set arithabort on в коннекте программы. Не полегчало
2.Перекомпилил статистику по всем индексам на данной таблице. Не помогло
25 июн 12, 10:04    [12768319]     Ответить | Цитировать Сообщить модератору
 Re: Запрос из приложения выполняется за 200мс а из Management Studio за 3 мс  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
А планы-то сравнили?
25 июн 12, 10:12    [12768355]     Ответить | Цитировать Сообщить модератору
 Re: Запрос из приложения выполняется за 200мс а из Management Studio за 3 мс  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
Int23
1.Поставил set arithabort on в коннекте программы. Не полегчало
2.Перекомпилил статистику по всем индексам на данной таблице. Не помогло


Если еще остались тормоза, то можно попробовать сравнить планы при разных настройках ARITHABORT. По идее они должны быть разные и второй должен быть медленный
SET ARITHABORT ON
go
exec sp_executesql N'select N0."OID",N0."TerritoryObjectType",N0."CodeKLADR",N0."OKATO",N0."TerritoryMunicipalUnion",N0."CodeAutonomy",N0."CodeArea",N0."CodeCity",N0."CodeIntraCityDistrict",N0."CodeLocality",N0."CodeStreet",N0."CodeAdditionElement",N0."CodeChildAdditionElement",N0."CodeRegion",N0."Index",N0."FullName",N0."Name",N0."Owner",N0."OptimisticLockField",N0."GCRecord" from "dbo"."TerritoryObject" N0
where (N0."GCRecord" is null and (N0."Owner" = @p0))',N'@p0 bigint',@p0=1237888
go
SET ARITHABORT OFF
go
exec sp_executesql N'select N0."OID",N0."TerritoryObjectType",N0."CodeKLADR",N0."OKATO",N0."TerritoryMunicipalUnion",N0."CodeAutonomy",N0."CodeArea",N0."CodeCity",N0."CodeIntraCityDistrict",N0."CodeLocality",N0."CodeStreet",N0."CodeAdditionElement",N0."CodeChildAdditionElement",N0."CodeRegion",N0."Index",N0."FullName",N0."Name",N0."Owner",N0."OptimisticLockField",N0."GCRecord" from "dbo"."TerritoryObject" N0
where (N0."GCRecord" is null and (N0."Owner" = @p0))',N'@p0 bigint',@p0=1237888
25 июн 12, 10:32    [12768475]     Ответить | Цитировать Сообщить модератору
 Re: Запрос из приложения выполняется за 200мс а из Management Studio за 3 мс  [new]
Int23
Guest
Я сделал скрин событий из профиллера. Может кто-нить подскажет в чём причина?

К сообщению приложен файл. Размер - 32Kb
25 июн 12, 10:34    [12768485]     Ответить | Цитировать Сообщить модератору
 Re: Запрос из приложения выполняется за 200мс а из Management Studio за 3 мс  [new]
step_ks
Member

Откуда:
Сообщений: 936
включите в профайлере отображение актуальных планов выполнения и выложите их.
25 июн 12, 10:37    [12768502]     Ответить | Цитировать Сообщить модератору
 Re: Запрос из приложения выполняется за 200мс а из Management Studio за 3 мс  [new]
Int23
Guest
Коллеги. А ведь у меня получается что с SET ARITHABORT OFF как раз мои 200 мсек. Странно что моё соединение показывает SET ARITHABORT ON

К сообщению приложен файл. Размер - 44Kb
25 июн 12, 10:43    [12768560]     Ответить | Цитировать Сообщить модератору
 Re: Запрос из приложения выполняется за 200мс а из Management Studio за 3 мс  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
Int23
Коллеги. А ведь у меня получается что с SET ARITHABORT OFF как раз мои 200 мсек. Странно что моё соединение показывает SET ARITHABORT ON

план с SET ARITHABORT OFF закешировался при не очень удачном раскладе параметров. По этому план получился со сканированием всей таблицы.
Если
2) можно использовать хинт c указанием индекса в запросе.
3) Либо можно использовать хинт option( recompile)

То должно помочь.
25 июн 12, 10:49    [12768598]     Ответить | Цитировать Сообщить модератору
 Re: Запрос из приложения выполняется за 200мс а из Management Studio за 3 мс  [new]
Int23
Guest
Скажите. Как правильнее
1. Писать во всех динамичсеких запросах, которые посылаются из программы, хинт option( recompile)
2. Только выставить set arithabort on и всё
3. Комбинация 1 и 2?
25 июн 12, 10:55    [12768638]     Ответить | Цитировать Сообщить модератору
 Re: Запрос из приложения выполняется за 200мс а из Management Studio за 3 мс  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
Int23
Скажите. Как правильнее
1. Писать во всех динамичсеких запросах, которые посылаются из программы, хинт option( recompile)
2. Только выставить set arithabort on и всё
3. Комбинация 1 и 2?

2 это не решение, а просто воспроизведение тех же настроек, что и в клиенте. План "плохой" может при любых настройках сохранится.
25 июн 12, 11:02    [12768696]     Ответить | Цитировать Сообщить модератору
 Re: Запрос из приложения выполняется за 200мс а из Management Studio за 3 мс  [new]
Int23
Guest
Значит остаётся только 1 решение?
25 июн 12, 11:18    [12768839]     Ответить | Цитировать Сообщить модератору
 Re: Запрос из приложения выполняется за 200мс а из Management Studio за 3 мс  [new]
step_ks
Member

Откуда:
Сообщений: 936
Int23, сделайте DBCC FREEPROCCACHE перед запуском каждого из запросов (с OFF и с ON) - разница будет?
25 июн 12, 11:26    [12768922]     Ответить | Цитировать Сообщить модератору
 Re: Запрос из приложения выполняется за 200мс а из Management Studio за 3 мс  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
Int23
Значит остаётся только 1 решение?

почему, можно еще хинт с указанием индекса из 'быстрого' запроса,
либо индекс create index IX_Owner_GCRecord on dbo.TerritoryObject(Owner,GCRecord)include(все поля в выборке)

Но перекомпиляция смотрится выигрышно, если этот запрос не будет очень часто выполнятся. Т.е. стоимость перекомпиляции не критична.
25 июн 12, 11:27    [12768937]     Ответить | Цитировать Сообщить модератору
 Re: Запрос из приложения выполняется за 200мс а из Management Studio за 3 мс  [new]
Int23
Guest
Если вызвать до запроса DBCC FREEPROCCACHE, то оба запроса дают одинаковые планы независимо от значения SET ARITHABORT
25 июн 12, 12:29    [12769564]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить