Остаточний перелік етапів тестування базової лінії SQL Server?


10

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

Чи відповідає цей перелік кроків встановлення SQL Server на "чистий" стан?

Логічна / правильна послідовність?

Чи є зайві кроки?

CHECKPOINT              -- Write all dirty pages

DBCC DROPCLEANBUFFERS   -- All should be clean after checkpoint?

DBCC FREEPROCCACHE      -- Clear the plan cache

DBCC FREESYSTEMCACHE    -- Is this necessary after FREEPROCCACHE?

DBCC FREESESSIONCACHE   -- May not be necessary if distributed queries aren't used, but want to catch all scenarios

EXEC SP_UPDATESTATS     -- Refresh stats

'BEGIN TESTING!'

5
FYI, DROPCLEANBUFFERSце приємно для тестування, але не завжди точно. Якщо ви посилаєтесь на таблицю з великим обсягом, дуже ймовірно, у вас майже завжди будуть сторінки в пам'яті, а час введення-виводу не буде великим фактором у цьому запиті. Ви можете надати більше ваги на IO, ніж це реально в цьому випадку.
JNK

Ви говорите про тестування у виробничому середовищі чи ізольованому тестовому середовищі?
bopapa_1979

Усі, хто тестує в середовищі Prod, повинні бути звільнені. :) Так, тестові середовища.
Ерік Хіггінс

Відповіді:


5

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

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


Дуже хороші очки, мета - щоб все було однакове між пробіжками. Вимірювання, які я беру в цьому випадку @ hand, - це час запуску для певних функцій програми (x секунд для повернення списку до програми, y секунд для додавання елемента черги тощо). Зміни між тестами можуть бути фрагментами коду програми, а не об'єктами SQL, об'єктами SQL, а не кодом програми, або налаштуваннями рівня екземпляра / БД, такими як паралельність без змін коду програми. Якщо я хотів би додати відновлення поза воротами перед кожним тестом, як ви ставитесь до мого списку вище @ цього пункту? Я щось пропускаю, чи послідовність потребує певної роботи?
Ерік Хіггінс

Brent, ти враховуєш CPU під час тестування?
АК

@EricHiggins Замість того, щоб перевіряти кілька речей одночасно, я б протестував деталі окремо. Я б краще перевірити запити безпосередньо і побачити, що зміни впливають на продуктивність. Наприклад, запустіть SQL-слід, виконуючи певні функції в додатку, а потім продовжуйте відтворювати цей слід, вносячи зміни в індексі / конфігурації для поліпшення продуктивності, а також спостерігайте за такими речами, як логічні зчитування та показники процесора, у слідах.
Брент Озар

@AlexKuznetsov Насправді я не той, хто робить тестування - Ерік - це той, хто задав питання. Коли я займаюся подібною роботою, я дивлюся на показники процесора на рівні запитів, а також на загальний сервер.
Брент Озар

Ми використовуємо сторонній генератор навантажень (і працюємо штатним персоналом, присвяченим розробці навантажувальних тестів). Тож мої тести точні до транзакції, послідовності, кількості користувачів, точних кроків, виконаних у додатку ... все. Тому мені не обов’язково взагалі дивитися на метрику типу інформаційної панелі SQL. Програмне забезпечення для тестування навантаження відстежує час відгуку модулів програми до мілісекунди. Отже, відновлення БД - хороша ідея. Мені потрібно з розумом перевірити інші кроки, які я роблю, щоб бути впевненим, що я домагаюся того стану «Чистий сланцевий», якого я шукаю перед кожним раундом тестування.
Ерік Хіггінс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.