У нас є активна база даних OLTP 40GB на SQL Server 2014 SP1. Запитання IO_Completion чекають повільно, довжина черги диска зростає до 900, а SQL Server перестає відповідати. Що ми спробували:
Перезапустіть екземпляр і вже через хвилину він почне поводитись так само.
Після другого перезапуску ми змінили початковий розмір кожного файлу даних tempdb (створено 16 файлів даних) і він почав працювати правильно.
Примітка: Ми використовуємо змінні таблиці для проміжних наборів результатів. Ці набори результатів дуже малі.
Це сталося двічі на місяць. Кожен раз, коли я додаю небагато місця вручну до файлів даних, тоді він починає нормально працювати. Більш цікавим є те, що та сама установка (те саме обладнання, однакова настройка папок і файлів, однакове навантаження) у нас на SQL Server 2008 R2 та на SQL Server 2012 працює нормально.
Ласкаво допоможіть нам знайти постійне рішення.
Початковий розмір усіх файлів даних однаковий 1000MB, струм - 1500MB кожен. Всі однакові. Автозростання - 100 МБ для кожного. До цього ми стикалися із суперечкою сторінок PFS та GAM, і ми збільшилися до 16, і проблема вирішена. Увімкнено обидва сліди прапорів 1117 та 1118. 24 ядра на 2 вузлах NUMA. Усі файли даних мають однаковий об'єм. Простий диск, без SAN.
Екземпляр знаходиться на фізичній машині. Запити із табличними змінними та запити з Hash Joins найчастіше генерують очікування IO_Completion.
Детальна відповідь від wBob підштовхнула нас до пошуку детальніше. Як ми пропустили його раніше:
Авторозростання файлу 'templog' у базі даних 'tempdb' було скасовано користувачем або вичерпано через 7704 мілісекунди. Використовуйте ALTER DATABASE для встановлення меншого значення FILEGROWTH для цього файлу або для явного встановлення нового розміру файлу.
Це ми виявили в журналі, коли виникає такий тип проблем. Ми переміщуємо TempDB, щоб розділити швидкий диск.