Як отримати точну ефективність запиту?


9

Я намагаюся покращити продуктивність збереженої процедури. Коли я запускаю SP, він закінчується майже миттєво, ніби щось кешується. Мені сказали використовувати наступні два рядки SQL перед виконанням SP у SSMS:

DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE

Коли я запускаю SP з двома рядками коду над SP закінчується приблизно за 8 секунд. Однак чи справді це дає мені реальний час виконання (як якщо я запускаю це з програми)? Звідки я знаю?


Відповіді:


9

Ці команди виконують дві речі:

  • Очистіть кеш сторінок, у якому зберігаються сторінки даних, які вже були отримані з диска (як правило, найбільшим фактором часу в запиті є доступ до диска)
  • Очистіть кеш плану запитів, а це означає, що серверу потрібно створити новий план запитів. Зазвичай це не суттєво, за винятком дуже великих обсягів транзакцій.

Ви в основному отримуєте час, еквівалентний "гіршому випадку", ви просто перезавантажили сервер і нічого не залишається в пам'яті. Подальші запуски не потребують оплати витрат на витяг даних з диска, оскільки ці сторінки вже завантажені в пам'ять.

Це схоже на ситуацію в реальному світі - вашому першому користувачеві, який виконує певний запит, швидше за все, доведеться чекати довше, ніж при наступних запусках, якщо припустити, що ви перевіряєте ті самі дані.

Хороший метод, який мені подобається використовувати, - це запуск декількох разів та взяття середнього. Це особливо корисно в спільному середовищі, оскільки ви не маєте повного контролю над спільними ресурсами, такими як tempdb.

Ви також можете скористатися цими командами, щоб отримати більше інформації про те, що насправді відбувається за лаштунками:

SET STATISTICS IO ON
SET STATISTICS TIME ON

Вони дадуть вам детальну інформацію про зчитування сторінки з диска (на об'єкт), логічні зчитування сторінки, час, витрачений на складання плану, і час, витрачений на виконання запиту.


відмінна відповідь, як зазвичай JNK.
OO

Раді допомогти! У вас просто трапляються запитання про речі, з якими я багато займався. Якщо ви запитаєте про реплікацію чи управління пам’яттю, мені не доведеться багато додати :)
JNK

2
Я знав про SET STATISTICS IO ON, але ніколи не знав про SET STATISTICS TIME ON. Дякую ЮНК.
datagod

2
Просто FYI ви можете отримати багато цієї інформації без усіх налаштувань SET, генеруючи фактичні плани за допомогою SQL Sentry Plan Explorer. А щоб отримати кілька (скажімо, 5) запусків, ви можете просто закінчити партію так GO 5само, як у SSMS. Це безкоштовне завантаження, я не намагаюся вам нічого продати. sqlsentry.net/plan-explorer/sql-server-query-view.asp
Аарон Бертран

1
@ JNK, звичайно, це безкоштовно, це економить час, і він показує інформацію, яку неможливо або дуже громіздко вийти з студії управління. І я там працюю. :-)
Аарон Бертран
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.