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

Откуда:
Сообщений: 612
Добрый вечер!

Сразу скажу что не силен в администрировании.
Имеется 2 сервера, назовем их DEV и PROD, оба VM, и там и там SQL Server 2012 SP1 - Microsoft SQL Server 2012 (SP1) - 11.0.3401.0 (X64) Jan 9 2014 13:22:15 Copyright (c) Microsoft Corporation Standard Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) (Hypervisor) .
Настройки одинаковые, большинство по умолчанию. Единственное, что виртуальное железо PROD в два раза мощнее DEV.

Есть таблица в обоих, одинаковая структура и содержание, индексы и статистика обновлены.
Запускаю профайлер для DEV и PROD, выполняю и там и там простой параметризированный запрос выбирающий одну строку и столбец из этой таблицы, смотрю актуальный план выполнения - он одинаковый, Index Seek и там и там, даже хэш один и тот же.
Но, в профайлере количество чтений PROD в 15(!) раз больше чем в DEV - 3 против 45. Соответственно, duration тоже.
запускал много раз - картина одинаковая.

Я также протестировал данный запрос на третьем сервере PROD2 с аналогичными результатами, поэтому я исключаю SQL Server, структуру данных и содержание как факторы.
Остается либо ОС, либо VM, либо какой-то сторонний софт.

Вопрос - куда копать?
Что может так сильно увеличить количество чтений?
26 ноя 16, 20:02    [19938235]     Ответить | Цитировать Сообщить модератору
 Re: 2 сервера SQL 2012, разное количество чтений для одинакового запроса и данных  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
Диклевич Александр,

Количество чтений - это количество 8 кб страниц. 3 и 45 - это очень очень мало.
Кстати, включенное отображение планов тоже на эти счетчики влияет, включенный профайлер, вероятно, тоже. А сколько у вас в секундах выполнение?
27 ноя 16, 02:59    [19939187]     Ответить | Цитировать Сообщить модератору
 Re: 2 сервера SQL 2012, разное количество чтений для одинакового запроса и данных  [new]
Диклевич Александр
Member

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

это мало, да.
Duration в профайлере DEV - 0-1 мс, PROD - 5 мс.
отображение плана и профайлеры включены были и там и там, так что влияние учитывается в обоих случаях.

Смысл в том, что эти мелкие запросы вызываются сотни тысяч раз как часть процесса обновления DWH.
Как результат, полное обновление в DEV занимает 40 минут, PROD - 2 часа.

причем это началось 3 дня назад без каких-либо причин.
никаких разработок и деплоя не было с нашей стороны.

Единственное что админы что-то шаманили с шарами на PROD сервере, в смысле подключали расшаренные папки с какими-то хитрыми настройками безопасности.
Не знаю, могло ли это как-либо повлиять.
27 ноя 16, 04:23    [19939209]     Ответить | Цитировать Сообщить модератору
 Re: 2 сервера SQL 2012, разное количество чтений для одинакового запроса и данных  [new]
aleks2
Guest
Диклевич Александр
Единственное, что виртуальное железо PROD в два раза мощнее DEV.

Чудесная формулировка!
Этого вполне достаточно, шоб планы запросов изменились.

Осподе, когда чайники научатся запускать sp_updatestat?
27 ноя 16, 09:26    [19939313]     Ответить | Цитировать Сообщить модератору
 Re: 2 сервера SQL 2012, разное количество чтений для одинакового запроса и данных  [new]
Диклевич Александр
Member

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

Я написал в начале - планы идентичные вплоть до хэша.
там очень простой запрос, меняться нечему.

sp_updatestats запускался, как и обновление индексов.
27 ноя 16, 10:18    [19939367]     Ответить | Цитировать Сообщить модератору
 Re: 2 сервера SQL 2012, разное количество чтений для одинакового запроса и данных  [new]
Диклевич Александр
Member

Откуда:
Сообщений: 612
Наиболее вероятно то, что что-то не то с VM на PROD в части IO.
просто надо найти способ это доказать.
я так понимаю, что для этого надо смотреть счетчики производительности Windows, доступа к которым у меня нет.
27 ноя 16, 11:02    [19939398]     Ответить | Цитировать Сообщить модератору
 Re: 2 сервера SQL 2012, разное количество чтений для одинакового запроса и данных  [new]
invm
Member

Откуда: Москва
Сообщений: 9845
Диклевич Александр
Наиболее вероятно то, что что-то не то с VM на PROD в части IO.
Пока что это предположение высосано из пальца.
Для начала запустите этот запрос в SSMS на обоих серверах, обеспечив идентичность языка и опций соединения данным из профайлера и включив statistics io и statistics time и сравните результаты.
27 ноя 16, 12:48    [19939516]     Ответить | Цитировать Сообщить модератору
 Re: 2 сервера SQL 2012, разное количество чтений для одинакового запроса и данных  [new]
aleks2
Guest
Диклевич Александр
aleks2,

Я написал в начале - планы идентичные вплоть до хэша.
там очень простой запрос, меняться нечему.

sp_updatestats запускался, как и обновление индексов.


При "идентичном плане" единственная причина для
"чтений PROD в 15(!) раз больше чем в DEV - 3 против 45."
может быть только в различии данных в таблицах.

Виртуальные и прочие машины тут побоку.

ЗЫ. А обновлять индексы - удел блондинок. Еще бы пнуть колесо и пепельницу вытряхнуть.
27 ноя 16, 14:18    [19939658]     Ответить | Цитировать Сообщить модератору
 Re: 2 сервера SQL 2012, разное количество чтений для одинакового запроса и данных  [new]
Диклевич Александр
Member

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

ага, так вот прям и блондинок.
чтения я показал в профайлере, как есть.
Данные 1:1, так как это таблица из стейджинга DWH, обновляется каждый день full load - TRUNCATE, потом BULK INSERT в SSIS.
количество записей:
DEV: 2677540
PROD: 2676435

invm,
языки и все идентично. при включенном SET STATISTIC IO и TIME:

+ DEV

SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 0 ms.

SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 0 ms.
SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 0 ms.

SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 0 ms.

SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 0 ms.

(1 row(s) affected)
Table 'tmp_eirFee_pl'. Scan count 1, logical reads 3, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 0 ms.
SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 0 ms.


+ PROD

SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 0 ms.

SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 0 ms.
SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 5 ms.

SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 0 ms.

SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 0 ms.

(1 row(s) affected)
Table 'tmp_eirFee_pl'. Scan count 1, logical reads 3, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 0 ms.
SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 0 ms.


получается, разница вот в этом - SQL Server parse and compile time.
27 ноя 16, 18:42    [19940206]     Ответить | Цитировать Сообщить модератору
 Re: 2 сервера SQL 2012, разное количество чтений для одинакового запроса и данных  [new]
Диклевич Александр
Member

Откуда:
Сообщений: 612
PS. данная проблема началась 3 дня назад и относится ко всем запросам и процессам.
Запрос выше как пример странной разницы времени исполнения.
Как я написал выше, даже .NET Script Transformation в SSIS в DEV отрабатывает 40 минут, а в PROD - 2 часа. Этот Script Transformation вызывает много таких мелких запросов и потом делает BULK INSERT в OLE DB Destination, вот и все.
Тестировал сегодня, никакой нагрузки на PROD нет, сервер только для DWH, выходные, пользователей 0.
27 ноя 16, 18:58    [19940248]     Ответить | Цитировать Сообщить модератору
 Re: 2 сервера SQL 2012, разное количество чтений для одинакового запроса и данных  [new]
invm
Member

Откуда: Москва
Сообщений: 9845
Диклевич Александр
получается, разница вот в этом - SQL Server parse and compile time.
Как и предполагалось.
Ваши лишние чтения - это компиляция. Запросы не параметризованы?
27 ноя 16, 20:02    [19940451]     Ответить | Цитировать Сообщить модератору
 Re: 2 сервера SQL 2012, разное количество чтений для одинакового запроса и данных  [new]
Диклевич Александр
Member

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

Есть такое, передаются 6 параметров через SqlCommand.
27 ноя 16, 22:43    [19940835]     Ответить | Цитировать Сообщить модератору
 Re: 2 сервера SQL 2012, разное количество чтений для одинакового запроса и данных  [new]
Диклевич Александр
Member

Откуда:
Сообщений: 612
В общем, проблема решилась рестартом SQL сервера в PROD.
Админы перезапустили инстанс, я прогнал запросы и SSIS пакет.
Не знаю, что да как, но теперь все идентично DEV - то же время и количество чтений и в профайлере и в SSMS с включенной статистикой.
Я сказал админам проанализировать логи SQL server на предмет выявления причин.
28 ноя 16, 12:30    [19942348]     Ответить | Цитировать Сообщить модератору
 Re: 2 сервера SQL 2012, разное количество чтений для одинакового запроса и данных  [new]
invm
Member

Откуда: Москва
Сообщений: 9845
Диклевич Александр,

При повторении проблемы, вам нужно будет включить в трассу событие SQL:StmtRecompile и определить причину постоянных рекомпиляций.
28 ноя 16, 13:24    [19942594]     Ответить | Цитировать Сообщить модератору
 Re: 2 сервера SQL 2012, разное количество чтений для одинакового запроса и данных  [new]
Диклевич Александр
Member

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

Спасибо за совет по делу. Если повторится, уведомлю админов.
28 ноя 16, 15:53    [19943382]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить