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