Короткий відповідь: Бачення більш високих кіосків вводу-виводу може бути проблемою само по собі. Потрібно ознайомитися з додатковою інформацією, щоб дізнатися, чи є у вас проблеми. Це здається трохи високим, так, але ви страждаєте? Якщо це так, це, мабуть, тому, що або ваша система вводу-виводу не справляється з завантаженням правильно (бо не може, тому що у вас все є на одному диску або з іншої причини), або ви занадто багато робите в TempDB (змінюючи першу проблему - продуктивність IO - це, мабуть, простіше та ефективніше виправити, але спочатку визначте, чи є у вас проблеми)
Більш тривала дискусія / відповідь:
Тут є два питання -
1.) Що робити, коли бачу високі кінці IO?
По-перше, "високий" є в очах глядача. Якби ви запитали 10 DBA, що таке "занадто високий" для IO кіосків, ви, ймовірно, отримаєте 2-3 різні відповіді з цифрами в них, 5-6 відповідей "Це залежить" і один простий погляд. Моє припущення, що в середньому 400 мс тут потенційно занадто велике, особливо коли інші БД становлять 2 мс або менше за середній час зупинки.
Незалежно від того, яка база даних бачить високі кіоски, ви повинні підходити до неї однаково. Інтервал IO - це те, що це звучить ... Запит IO займає більше часу, ніж очікувалося. Такі трапляються. Вони відбуваються постійно в системі, де ресурси поділяються і обмежуються ресурсами (насправді всі наші системи). Вони стають проблемою, коли кіоски стають проблемами з роботою або призводять до них. Тож я вірю, що ви розглядаєте тут як проактивну частину моніторингу або тому, що у вас виникли проблеми з ефективністю, які ви вирішуєте. Ми також не хочемо загубитися лише в кіосках з IO. Ми дивимося на фрагмент головоломки, а не на велику картину. Ви можете просто переглядати статистику очікування або статистику файлів, оскільки SQL востаннє перезапущений, тому що ви переглядаєте весь час, і якесь вікно технічного обслуговування або велике вікно завантаження може перекосити лічильники. Тому переконайтесь, що ви подивіться на повну картину.
Але коли я підозрюю, що у мене є проблема продуктивності диска або я бачу щось вимкнене в такому запиті, я зазвичай дотримуюся процесу, який виглядає так:
- Подивіться статистику очікування на сервері. @swasheck поділився чудовим посиланням як коментар у відповіді нижче. Це призведе до публікації Пола Рандала про перегляд та аналіз статистики очікування на SQL Server. Іти туди. Яке очікування ви бачите? Річ у тім чекає , пов'язані з виконанням IO (
PAGEIOLATCH_*
, IO_COMPLETION
, WRITELOG
і т.д.?). Якщо ви це зробите, це ще одна ознака того, що у вас є деякі проблеми, пов’язані з роботою вводу-виводу, так само, як і прилавки для IO. Але це дає вам іншу форму згоди тут.
- Подивіться на IO продуктивність. Зокрема, загляньте всередину парфмонів на стійки
Physical Disk:Avg Disk Sec/Read
та Avg Sec Disk Sec/Write
прилавки. Вони вимірюють вашу затримку. Переглядайте ці лічильники протягом певного періоду часу, збереженого у файлі журналу продуктивності. Що ти бачив середні? Якщо ви бачите номери за 0,020 секунд (20 мс), це може бути проблемою. Якщо ви бачите цифри, що перевищують 40-50 мс або більше, це є більш твердим ознакою проблеми. Подивіться також на свої колоски? Як високо вони піднімаються і як довго вони тривають? Якщо ви бачите сплески в сотні мс, і вони тривають десятки або десятки секунд і більше і / або трапляються часто, ви, швидше за все, матимете проблеми з продуктивністю IO для вашого навантаження.
- Подивіться на ваш IO налаштування. Що це? Локальні диски? SAN? Зберігання масиву? Який вигляд і ВПЗ ви повинні бачити з цього? Чи достатньо для того, що ви намагаєтесь зробити? Можливо, ви підкреслили свій IO під час навантаження. Не дивіться лише на свої фізичні шпинделі, налаштування RAID тощо. Подивіться на шляхи до своїх дисків. Ви все просуваєте через одне посилання на 1 Гб, яким ви ділитеся з багатьма іншими трафіком? Чи можете ви дивитись показники продуктивності диска з точки зору пам’яті.
( Примітка: для цього аналізу статистики очікування та аналізу за парфмон - подивіться на різні періоди та тип використання. Чи є у вас різні статистичні дані щодо використання в нічний час, ніж у вас вдень? Пакетна обробка вікон? Вікна технічного обслуговування, де ви збираєте багато індексів? Перегляньте ці інструменти протягом кожного з цих періодів і зрозумійте, що ви бачите для кожного)
Ще один розгляд результатів роботи IO -
- Ви сказали, що системні БД та БД користувачів є спільними. Це виробництво? Якщо так, то це не завжди найкращий сценарій. Ви також обмінюєтесь файлами журналів та файлами даних на одних дисках? Це теж не найкращий сценарій. Що ще ділиться цим сховищем? У світі, де ти турбуєшся про шпинделі та рейдові групи та диски і мусиш приймати рішення щодо того, хто отримує найкращі диски, які я працюю, я схильний (як правило, як правило, що не дуже добре мати у світі БД але це, як правило, відповідає дійсності), перейдіть з моїм найшвидшим і найбільш відданим TempDB (докладніше про це нижче), потім файли журналу, потім файли даних. У світі, де у вас є велика купа дисків на таких пристроях, як NetApp, Dell Equal Logic або EMC VNX тощо.
2.) Які причини TempDB можуть бути вищими?
Отже, TempDB - це база даних, і вона може мати кіоски IO, як і будь-яка інша база даних, як я щойно обговорював. Але які причини TempDB можуть мати більш високі показники? (не вичерпно, я вітаю доповнення чи думки в редакціях, інших відповідях чи коментарях) -
- Через ваш код - Чи багато ви використовуєте TempDB у своєму коді цілеспрямовано? Створено та знищено багато темп-таблиць та змінних таблиць? Робите багато тем у TempDB, як це? Це не погано або добре не обов'язково, але ви можете подивитися на це і зрозуміти свою навмисну схему використання TempDB.
- TempDB - це спільна робоча коня - TempDB - це одна база даних, яка використовується як тимчасовий простір для визначених користувачем тимчасових об'єктів та різних робочих таблиць та операцій, які використовуються вашим усім екземпляром SQL. Скільки баз даних користувачів є? Яке навантаження ви взагалі бачите? TempDB - це один ресурс для спільного використання всіх речей.
- Неефективні запити та недостатня пам'ять. Можливо, є запити, які не використовують індекси досить чітко або виконують великі операції сканування та сортування. Великі хеш-операції, і пам'ять на сервері для цього недостатня. Ці операції "перекинуться" на TempDB як робочі таблиці за кадром. Іноді цього можна уникнути, переглянувши свої плани запитів та індексуючи або налаштувавши запити. Іноді це трапляється (тим більше, на складські навантаження, я вважаю). Якщо у вас достатньо пам’яті, це може допомогти, але ці запити можуть все-таки розпливатися. Подивіться і на це.
- Чи використовуєте Ви проаналізований рівень Ізольований знімків знімків із достатньою кількістю оновлень у вашій системі? Це також може призвести до збільшення активності TempDB.
Справа в тому, що TempDB використовується в багатьох напрямках, і це мене зовсім не дивує, коли я бачу це як одну із ваших найзайнятіших, якщо не найзайнятішої бази даних. Це також не дивує мене, коли я бачу, що він має найбільшу кількість та найвищий середній кіоск усіх баз даних на сайті клієнта. Іноді характер її завантаженості. Дивлячись на деякі згадані тут речі, безумовно, можна допомогти вам визначити, чи вказують ці цифри на проблему, і якщо так, як глибше вирішити її.