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

Откуда:
Сообщений: 229
Доброго времени суток. Мне пожаловались на замедление операции в бизнес-приложении. Посмотрел профайлером, вызов одной и той же хранимой процедуры, днем - 150308659 Reads, вечером - 179848 Reads. Посмотрел действительный план выполнения, он идентичный, но я как понимаю, смотрел не правильно, так как запускал эту функцию через SSMS. Куда мне еще посмотреть, и от чего может быть такое возрастание ? Из-за нагрузки это вряд ли, так как она у меня и днем и вечером примерно равна.
15 июл 16, 08:32    [19412266]     Ответить | Цитировать Сообщить модератору
 Re: Возрастает чтение на одной и той же операции в дневное время суток.  [new]
Ondayl
Member

Откуда:
Сообщений: 229
Версия Microsoft SQL Server 2012 - 11.0.5343.0 (Intel X86)
15 июл 16, 08:38    [19412294]     Ответить | Цитировать Сообщить модератору
 Re: Возрастает чтение на одной и той же операции в дневное время суток.  [new]
Студент123,
Guest
Мне кажется Вам нужно именно это http://www.somewheresomehow.ru/fast-in-ssms-slow-in-app-part2/
значительно выросла производительность клиентского приложения на первом проекте.
15 июл 16, 09:02    [19412413]     Ответить | Цитировать Сообщить модератору
 Re: Возрастает чтение на одной и той же операции в дневное время суток.  [new]
sti
Member

Откуда:
Сообщений: 769
В первую очередь надо смотреть, что процедура делает. Нет ничего удивительного, если в разное время попадает под одни и теже условия разное количество записей. Обработка заявок или импорт внешних данных, например.
15 июл 16, 09:16    [19412478]     Ответить | Цитировать Сообщить модератору
 Re: Возрастает чтение на одной и той же операции в дневное время суток.  [new]
Ondayl
Member

Откуда:
Сообщений: 229
Студент123
Мне кажется Вам нужно именно это http://www.somewheresomehow.ru/fast-in-ssms-slow-in-app-part2/

Спасибо, посмотрю.

sti
В первую очередь надо смотреть, что процедура делает. Нет ничего удивительного, если в разное время попадает под одни и теже условия разное количество записей. Обработка заявок или импорт внешних данных, например.

Дело в том, что она должна выдавать примерно одинаковое количество строк в результирующем наборе. Сейчас выдает 19000 записей, такого, что она днем выдает 3 000 000, а вечером 19 000, такого быть не может.
15 июл 16, 09:21    [19412496]     Ответить | Цитировать Сообщить модератору
 Re: Возрастает чтение на одной и той же операции в дневное время суток.  [new]
Ondayl
Member

Откуда:
Сообщений: 229
Студент123,
Мне кажется Вам нужно именно это http://www.somewheresomehow.ru/fast-in-ssms-slow-in-app-part2/
значительно выросла производительность клиентского приложения на первом проекте.


Увы, судя по всему это не мой случай. Я получаю в SSMS абсолютно одинаковые планы запросов что с SET ARITHABORT OFF, что с SET ARITHABORT ON. По прежнему мне не совсем понятно как в такой ситуации мне получить медленный план запроса.
26 июл 16, 23:03    [19459404]     Ответить | Цитировать Сообщить модератору
 Re: Возрастает чтение на одной и той же операции в дневное время суток.  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8805
Ondayl,
автор
Я получаю в SSMS


Если Вы получаете заведомо хороший план, то используйте этот план с помощью option (use plan N'...').
При этом должны понимать последствия решения, разумеется.
Все планы, которые применяются к запросу можно найти в представлении sys.dm_exec_cached_plans (читайте справку).
27 июл 16, 11:21    [19460762]     Ответить | Цитировать Сообщить модератору
 Re: Возрастает чтение на одной и той же операции в дневное время суток.  [new]
Ondayl
Member

Откуда:
Сообщений: 229
Владислав Колосов, спасибо. А такой вопрос, если я знаю plan_handle, я могу как то посмотреть этот план в XML виде ?
27 июл 16, 11:49    [19461054]     Ответить | Цитировать Сообщить модератору
 Re: Возрастает чтение на одной и той же операции в дневное время суток.  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
Ondayl,

sys.dm_exec_query_plan ( plan_handle )
27 июл 16, 11:56    [19461139]     Ответить | Цитировать Сообщить модератору
 Re: Возрастает чтение на одной и той же операции в дневное время суток.  [new]
Владислав Колосов
Member

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

наизусть не помню, в справке есть примеры. По тексту запроса ищите.
27 июл 16, 11:56    [19461141]     Ответить | Цитировать Сообщить модератору
 Re: Возрастает чтение на одной и той же операции в дневное время суток.  [new]
3unknown
Member

Откуда: New York
Сообщений: 140
SELECT cp.objtype AS ObjectType,
OBJECT_NAME(st.objectid,st.dbid) AS ObjectName,
cp.usecounts AS ExecutionCount,
st.TEXT AS QueryText,
qp.query_plan AS QueryPlan_XML
FROM sys.dm_exec_cached_plans AS cp
CROSS APPLY sys.dm_exec_query_plan(cp.plan_handle) AS qp
CROSS APPLY sys.dm_exec_sql_text(cp.plan_handle) AS st
27 июл 16, 11:59    [19461173]     Ответить | Цитировать Сообщить модератору
 Re: Возрастает чтение на одной и той же операции в дневное время суток.  [new]
Ondayl
Member

Откуда:
Сообщений: 229
Я в небольшом смятении, так как я перед перед экспериментом очистил кеш планов, потом запросом который мне написал 3unknown , увидел два плана, один был скомпилирован для выполнения из бизнес-приложения, другой при выполнении из SSMS и...оба эти плана идентичны. Куда же дальше копать ?
27 июл 16, 13:59    [19462177]     Ответить | Цитировать Сообщить модератору
 Re: Возрастает чтение на одной и той же операции в дневное время суток.  [new]
o-o
Guest
при идентичных планах идентичное же число ридов.
надо было смотреть, когда разное число было.
но если считать, что с ридами вы ошиблись и их то же число,
просто смотрите ожидания в момент торможения (sys.dm_os_waiting_tasks).
может доблестные дба в это самое время делают dbcc checkdb, например.
а может у вас там были minimally logged operations,
а стали fully logged, потому что бэкап делают.
и все это вылезет в виде PAGEIOLATCH_SH/WRITELOG.
а то может просто блокировки, и они тоже будут видны
27 июл 16, 14:29    [19462444]     Ответить | Цитировать Сообщить модератору
 Re: Возрастает чтение на одной и той же операции в дневное время суток.  [new]
Ondayl
Member

Откуда:
Сообщений: 229
o-o, получается, что у меня заголовок темы уже не правильный, но раньше было действительно так. Сейчас же, у меня постоянно много чтений через приложение, и мало через SSMS.
автор
надо было смотреть, когда разное число было.

вот сейчас как раз и есть тот момент. Но вы подсказали что еще можно посмотреть, спасибо, буду копать дальше.
27 июл 16, 14:47    [19462579]     Ответить | Цитировать Сообщить модератору
 Re: Возрастает чтение на одной и той же операции в дневное время суток.  [new]
o-o
Guest
откуда разное число чтений-то, если план один?
разве что когда запрос запускает приложение, кто-то ему строк подливает.
а как только запускаете вы, так сразу их уже удалили, эти строки.
кстати, а что в sys.dm_exec_query_stats для этого запроса?
там же и число строк, и последнее время выполнения.
запрос-то на что, чтение/запись/удаление?
27 июл 16, 15:07    [19462716]     Ответить | Цитировать Сообщить модератору
 Re: Возрастает чтение на одной и той же операции в дневное время суток.  [new]
Ondayl
Member

Откуда:
Сообщений: 229
o-o,

может доблестные дба в это самое время делают dbcc checkdb, например.
а может у вас там были minimally logged operations,
а стали fully logged, потому что бэкап делают.

Но это точно нет, так как dba нет в принципе, место них я, и бекапы я тоже делаю. Так что это отметаем.
27 июл 16, 15:10    [19462737]     Ответить | Цитировать Сообщить модератору
 Re: Возрастает чтение на одной и той же операции в дневное время суток.  [new]
o-o
Guest
Ondayl
o-o,

может доблестные дба в это самое время делают dbcc checkdb, например.
а может у вас там были minimally logged operations,
а стали fully logged, потому что бэкап делают.

Но это точно нет, так как dba нет в принципе, место них я, и бекапы я тоже делаю. Так что это отметаем.

это относилось к одинаковому числу строк, но разному времени выполнения.
это были причины торможения в принципе.
а раз строк у вас там больше, тут меньше, то планы явно разные.
потому что слишком трудно поверить, что вот как вы выполняете, так чтений мало,
а как приложение, так сразу много.
кто ж так хитро подливает в нужный момент строки???
не верю
27 июл 16, 15:14    [19462757]     Ответить | Цитировать Сообщить модератору
 Re: Возрастает чтение на одной и той же операции в дневное время суток.  [new]
o-o
Guest
чего-то я начинаю подозревать.
вы как нашли идентичные планы-то,
просто выполнив из студии с разными опциями?
откуда у вас взят plan handle?
почему не выловить план выполнения из приложения
прямо во время его выполнения?
из sys.dm_exec_requests вылавливайте план, в реальном времени
(к нему тот же apply sys.dm_exec_query_plan(plan_handle))
27 июл 16, 15:23    [19462811]     Ответить | Цитировать Сообщить модератору
 Re: Возрастает чтение на одной и той же операции в дневное время суток.  [new]
Ondayl
Member

Откуда:
Сообщений: 229
откуда разное число чтений-то, если план один?

Вот и это меня смущает. Может я не так смотрю ? Я 1 раз выполнил действие в приложении, и 6 раз выполнил эту процедуру из ssms. Смотрю в запросе от 3unknown, столбец EcexutionCount, там 1 - это получается из приложения, 6 - получается когда я запускал через ssms. Рядом ссылка на план, жму, планы одинаковые. Не правильная логика ?

автор
разве что когда запрос запускает приложение, кто-то ему строк подливает.
а как только запускаете вы, так сразу их уже удалили, эти строки.

Думаю, вряд ли такое может быть. Эта процедура вообще выдает всегда примерно 20 тысяч строчек.

кстати, а что в sys.dm_exec_query_stats для этого запроса?
там же и число строк, и последнее время выполнения.

Мне нужно время, чтобы сообразить как это посмотреть, т.к как до этого этими представлениями пользоваться не приходилось.

запрос-то на что, чтение/запись/удаление?

Это хранимая процедура, вот ее код:

+
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[PATP_GetOrderDataForBuffer]
(@Or_Id INT, @Day_Num VARCHAR(100) = '')
AS
	SET NOCOUNT ON
	
	DECLARE @ODD_ID TABLE (ODD_ID INT, OD_ID INT)
	
	
	IF ISNULL(@Day_Num, '') = ''
	BEGIN
	    INSERT INTO @ODD_ID
	    SELECT b.id,
	           a.id
	    FROM   PATP_OrderData a
	           INNER LOOP JOIN PATP_OrderDataDay b
	                ON  a.id = b.order_data_id
	    WHERE  a.order_id = @Or_Id
	END
	ELSE
	    INSERT INTO @ODD_ID
	    SELECT b.id,
	           a.id
	    FROM   PATP_OrderData a
	           INNER LOOP JOIN PATP_OrderDataDay b
	                ON  a.id = b.order_data_id
	    WHERE  a.order_id = @Or_Id
	           AND @Day_Num LIKE('%-' + CAST(day_num AS VARCHAR(2)) + '-%')	
	
	
	SELECT a.id,
	       b.id AS ODD_id,
	       a.mList_id,
	       a.personnel_id,
	       b.day_num,
	       b.start_time,
	       b.start_control_time,
	       b.end_time,
	       c.id AS OrderDayTypeID,
	       c.name AS FullNameTextWork,
	       CASE 
	            WHEN g.Id IS NULL OR (g.Id IS NOT NULL AND l.Id IS NOT NULL) THEN 
	                 c.short_name
	            ELSE CAST('' AS VARCHAR(8))
	       END AS ShortNameTextWork,
	       c.color AS BrushColor,
	       e.name AS MarshrutName,
	       a.trans_id AS IDTransport,
	       f.Garag_Number,
	       f.Gos_Number,
	       c.is_control,
	       g.ord AS Graph_Num,
	       c.smena_num,
	       k.Position_id,
	       c.is_work_time
	FROM   @ODD_ID oddid
	       INNER JOIN PATP_OrderData a
	            ON  a.id = oddid.OD_ID
	       INNER JOIN PATP_OrderDataDay b
	            ON  oddid.ODD_ID = b.id
	       LEFT JOIN PATP_OrderDayType c
	            ON  b.order_day_type = c.id
	       LEFT JOIN PATP_MarshrutList d
	            ON  a.mList_id = d.id
	       LEFT JOIN vwMarshruts e
	            ON  d.Marshrut_id = e.id
	       LEFT JOIN vwTransport f
	            ON  a.trans_id = f.id
	       LEFT JOIN PATP_ScheduleGraphic g
	            ON  b.graph_id = g.id
	       LEFT JOIN vwPersonnel k
	            ON  a.personnel_id = k.id
	       LEFT JOIN vwShift l
	            ON  g.Id = l.SchedGraphId
	            AND c.is_control = 1
	            AND c.is_work_time = 1
	            AND c.smena_num = l.ShiftNo
	ORDER BY
	       a.personnel_id,
	       b.start_time 


Дело еще в том, что раньше бывало, что ее "отпускало" само собой, но сейчас уже несколько дней она тормозит.
27 июл 16, 15:39    [19462945]     Ответить | Цитировать Сообщить модератору
 Re: Возрастает чтение на одной и той же операции в дневное время суток.  [new]
Ondayl
Member

Откуда:
Сообщений: 229
o-o,
чего-то я начинаю подозревать.

Ну я так понял, не правильно я ловлю. Прошу прощения, что я наколхозил черти что, просто навыков работы с этими представлениями нет.

автор
просто выполнив из студии с разными опциями?

Один раз выполнил из приложения, 6 раз из студии. В ExecutionCount посмотрел где 1, а где 6, рядом была ссылка на план.
27 июл 16, 15:49    [19463029]     Ответить | Цитировать Сообщить модератору
 Re: Возрастает чтение на одной и той же операции в дневное время суток.  [new]
3unknown
Member

Откуда: New York
Сообщений: 140
А какое место тромозит, вставка в таблицу-параметр или последняя выбока?
27 июл 16, 15:53    [19463051]     Ответить | Цитировать Сообщить модератору
 Re: Возрастает чтение на одной и той же операции в дневное время суток.  [new]
Ondayl
Member

Откуда:
Сообщений: 229
3unknown, в студии никакое. Функция отрабатывает мгновенно выдавая 19500 строк. А какое место тормозит когда она же отрабатывает в приложении, я не знаю как посмотреть.
27 июл 16, 15:57    [19463089]     Ответить | Цитировать Сообщить модератору
 Re: Возрастает чтение на одной и той же операции в дневное время суток.  [new]
3unknown
Member

Откуда: New York
Сообщений: 140
Сделайте внутри процедуры логирование, там у Вас 2 места, после каждого пишите в отдельную таблицу getdate() - будет сразу видно где тормоза.
Там при вставке в параметр-таблицу стоит loop join - это вполне может сильно увеличивать время запроса на большом количестве записей.
27 июл 16, 16:03    [19463126]     Ответить | Цитировать Сообщить модератору
 Re: Возрастает чтение на одной и той же операции в дневное время суток.  [new]
o-o
Guest
кто-то уже насильно лупы прописал, интересно, зачем?
вот эти вот таблицы PATP_OrderData, PATP_OrderDataDay какого размера?

затем, уже само название @Day_Num говорит о числе,
но это что-то строковое, это зачем?
при том, что в таблице-то оно числовое (индекс пролетел, если он вообще был)
что-то мне не нравятся лупы при наверное полном отсутствии индекса,
не дай бог таблицы здоровые.
правда как же это вы в студии умудряетесь быстро выполнять, не меняя текст процедуры?

давайте тогда актуальный план,
пускай даже из студии,
там уже и число строк подписано, и видно, стоит ли так делать
27 июл 16, 16:11    [19463183]     Ответить | Цитировать Сообщить модератору
 Re: Возрастает чтение на одной и той же операции в дневное время суток.  [new]
o-o
Guest
кстати, может ответ-то еще проще:
да, планы одинаковые.
но приложение выполняет с одними значениями параметров, вы с другими.
и так вышло, что план строился под параметры типа ваших,
а приложение выполняет с такими параметрами, что этот план совсем негодный.
вот вам и один план, но разное число чтений, разное время.
27 июл 16, 16:18    [19463223]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить