По материалам статьи Esther Xin «Prevent SQL Server Dump Generation in Hot Cases: Common Ways & Scenarios»
14 ноября 2021г.
В этой статье будут описаны способы предотвращения создания дампа SQL Server для наиболее часто встречающихся видов исключений. В промышленной среде это позволит продержаться до решения проблемы, в случае, когда генерация дампов сильно мешает нормальной работе. Подразумевается, что у вас уже есть файл дампа, пригодный для расследования RCA. Также, вы должны быть уверены, что причиной создания дампов является одно и то же исключение, о чём говорит одинаковый стек вызовов для потока, приведшего к дампу.
В продуктиве, особенно когда SQL Server является частью кластера (SQL AG или FCI), в качестве быстрого решения для защиты от сбоев, вызванных процессом генерации дампа, поддержка Майкрософт может предложить рассмотреть возможность отключения процесса создания дампа.
Главной опасностью того, что файл дампа не будет генерироваться после того, как произойдёт исключение, является невозможность дальнейшего поиска и устранения проблем на основании содержащейся в дампе информации. Кроме того, само отключение возможности создания дампа не может избавить от возникновения исключения в процессе SQL Server. Применяя этот метод, будьте осторожны и учитывайте возможные риски, связанные с тем, что отсутствие дампов может ввести в заблуждение при оценке состояния сервера. Обязательно согласуйте отключение дампов со всеми заинтересованными сторонами, прежде чем вносить какие-либо изменения.
Конечно, увеличение тайм-аута проверки статуса сервера и тайм-аута проверки работоспособности может быть альтернативным вариантом реакции на череду дампов, но в типичном продуктиве в случае аварии, когда требуется быстрый отклик и быстрая отработка отказа, такой вариант не подходит (нежелательно ждать генерации дампа перед отработкой отказа или длительное создание дампа само может стать причиной отработки отказа).
Ниже показаны несколько флагов трассировки, которые позволяют отключить создание дампа в наиболее часто встречающихся случаях. В других случаях, следует обратиться к документации Майкрософт, которая описывает соответствующие флаги трассировки и поведение сервера после их включения.
1. Отключение non-yielding дампа
Следует помнить, что при включении этих трёх флагов трассировки (особенно 2542), вы могли бы получить другие дампы исключений SQL Server, но их создание будет предотвращено, поскольку это предписано флагом 2542. Однако не исключены случаи, когда вы все равно сможете увидеть дамп SQL Server, созданный, несмотря на включение всех трёх показанных далее флагов. Для решения подобных проблем, обратитесь к другим флагам трассировки, обсуждаемым в этом документе или в документации Майкрософт.
1260 |
Отключить дамп для всех non-yielding планировщиков |
Startup | DBCC |
3646 |
Не создавать дампы симптомов «symptom dumps» |
Startup | DBCC |
2542 |
Отключить дампы в sqldumper.exe |
Startup | DBCC |
2. Отключение дампа поврежденного индекса
11063 |
Не создавать дампы из-за невозможности найти строку в индексе |
Startup | DBCC |
3. Отключение latch timeout дампа
837 |
Не создавать дампы «latch timeout» |
Startup | DBCC |
4. Создавать только один файл дампа для триггера дампов
8026 |
Прерывать работу триггера дампов после генерации первого дампа |
Startup | DBCC |
5. Задать в реестре ограничение максимального числа генерируемых дампов
Для ограничения числа дампов можно внести изменения в ключи системного реестра Windows. По умолчанию значение ключей установлено в ноль (0), что означает бесконечное число генерируемых дампов. Если изменить значение на 1, максимальное число дампов будет равно одному. Счетчик сбрасывается при перезапуске службы SQL Server.
Ключи должны располагаться в следующей ветке реестра:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL15.MSSQLSERVER\Setup
(внесите изменение в этот путь в соответствии с установленной версией)
Создайте следующие ключи:
MaxDumps (DWORD) value --> поставить 1
MaxFullDumps (DWORD) value --> поставить 1
6. Ещё о полезных флагах, без которых сервер может не работать:
Use Trace Flag 902 (TF902) to Bring Up Your SQL Service in Failed Post Upgrade Script
DISCLAIMER : THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.