Настройка SQL Server Analysis Services для создания файлов дампа памяти

В этой статье описывается настройка SQL Server Analysis Services для автоматического создания файлов дампа памяти.

Оригинальная версия продукта: SQL Server
Исходный номер базы знаний: 919711

Введение

В этой статье описывается настройка сборок Microsoft SQL Server Analysis Services (SSAS) 2012 или более поздних версий для автоматического создания различных типов файлов дампа памяти при обнаружении исключений. В этой статье также описывается, как вручную получить файл дампа памяти для процесса SQL Server Analysis Services с помощью служебной программы Sqldumper.exe.

Дополнительная информация

По умолчанию SQL Server Analysis Services автоматически создает файлы minidump при возникновении исключения. Для установки по умолчанию файлы minidump записываются в расположение по умолчанию:

Версия служб Analysis Services Расположение
2019 %ProgramFiles%\Microsoft SQL Server\MSAS15.InstanceName\OLAP\log
2017 %ProgramFiles%\Microsoft SQL Server\MSAS14.InstanceName\OLAP\log
2016 %ProgramFiles%\Microsoft SQL Server MSAS13.InstanceName\OLAP\log
2014 %ProgramFiles%\Microsoft SQL Server MSAS12.InstanceName\OLAP\log
2012 %ProgramFiles%\Microsoft SQL Server MSAS11.InstanceName\OLAP\log

Примечание.

InstanceName — это заполнитель для соответствующего значения для SQL Server Analysis Services версии.

Расположение журнала SQL Server Analysis Services экземпляра можно изменить после установки, чтобы проверить расположение журнала, просмотрив файл msmdsrv.ini для установленного SQL Server Analysis Services.

Чтобы определить соответствующее значение для системы, определите значение ключа регистрации ImagePath. Он должен содержать путь к пути Config, содержащий msmdsrv.ini.

Версия служб Analysis Services Подраздел реестра
Экземпляр по умолчанию HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSSQLServerOLAPService\ImagePath
Именованный экземпляр HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSOLAP$InstanceName\ImagePath

Файлы minidump будут содержать следующие сведения:

  • Все стеки потоков

  • Память второго порядка, на которую ссылаются указатели в стеке

  • Сведения о блоке среды обработки (PEB)

  • Сведения о блоке среды потока (TEB)

  • Сведения о недавно выгруженных модулях

  • Сведения о состоянии потока

Создание файла дампа памяти управляется раздел "Исключение" в файле Msmdsrv.ini. Файл по умолчанию находится в папке %ProgramFiles%\Microsoft SQL Server\MSASxx.InstanceName\OLAP\Config . MSASxx — это заполнитель для соответствующей версии службы SQL Server Analysis Service. При открытии файла в Блокноте вы увидите раздел в XML-теге Exception, который выглядит следующим образом:

<Exception>
<CreateAndSendCrashReports>1</CreateAndSendCrashReports>
<CrashReportsFolder/>
<SQLDumperFlagsOn>0x0</SQLDumperFlagsOn>
<SQLDumperFlagsOff>0x0</SQLDumperFlagsOff>
<MiniDumpFlagsOn>0x0</MiniDumpFlagsOn>
<MiniDumpFlagsOff>0x0</MiniDumpFlagsOff>
<MinidumpErrorList>0xC1000000, 0xC1000001, 0xC1000016, 0xC11D0005, 0xC102003F</MinidumpErrorList>
<ExceptionHandlingMode>0</ExceptionHandlingMode>
<CriticalErrorHandling>1</CriticalErrorHandling>
</Exception>

Вы можете управлять поведением создания файла дампа памяти, изменив параметры в этом разделе. Эти параметры также можно изменить в SQL Server Management Studio. Дополнительные сведения об этих параметрах см. на веб-сайте SQL Server Management Studio скачивания: Свойства журнала.

Отключение файла автоматического дампа памяти для служб Analysis Services

Значение параметра CreateAndSendCrashReports определяет, будет ли создан файл дампа памяти. Этот параметр может иметь одно из значений, перечисленных в следующей таблице.

Значение Описание
0 Это значение указывает, что службы Analysis Services не создают файл дампа памяти. Кроме того, значение других параметров в разделе Исключения игнорируется.
1 Это значение по умолчанию включает файл дампа памяти. Однако SQL Server Analysis Services не отправляет отчет об ошибке в корпорацию Майкрософт.
2 Это значение указывает, что SQL Server Analysis Services создает файл дампа памяти и отправляет отчет об ошибке в корпорацию Майкрософт.

Если для параметра CreateAndSendCrashReports задано значение 1 или 2, другие параметры в разделе Исключения могут управлять типом файла дампа памяти и информацией, которую следует включить в файл дампа памяти.

Настройка SQL Server Analysis Services для автоматического создания полного файла дампа

Чтобы настроить SQL Server Analysis Services автоматическое создание полного файла дампа при возникновении исключения, можно задать для параметра SQLDumperFlagsOn значение 0x34. Кроме того, если вы хотите настроить SQL Server Analysis Services для создания полного файла дампа, содержащего сведения о дескрипторе, можно задать для параметра SQLDumperFlagsOn значение 0x34, а для параметра MiniDumpFlagsOn — 0x4. Например, раздел Исключения в файле Msmdsrv.ini может выглядеть следующим образом:

<Exception>
<CreateAndSendCrashReports>1</CreateAndSendCrashReports>
<CrashReportsFolder/>
<SQLDumperFlagsOn>0x34</SQLDumperFlagsOn>
<SQLDumperFlagsOff>0x0</SQLDumperFlagsOff>
<MiniDumpFlagsOn>0x4</MiniDumpFlagsOn>
<MiniDumpFlagsOff>0x0</MiniDumpFlagsOff>
<MinidumpErrorList>0xC1000000, 0xC1000001, 0xC1000016, 0xC11D0005, 0xC102003F</MinidumpErrorList>
<ExceptionHandlingMode>0</ExceptionHandlingMode>
<CriticalErrorHandling>1</CriticalErrorHandling>
</Exception>

Создание полного файла дампа, включающего сведения об обработке вручную

Для устранения таких проблем, как сервер, который перестает отвечать (зависает), может потребоваться создать полный файл дампа, который включает обработку данных вручную. Для этого можно запустить служебную программу Sqldumper.exe в командной строке вместе со следующими аргументами:

Sqldumper.exe PID 0 0x34:0x4 0 PathToDumpFile

Примечание.

PID представляет идентификатор процесса SQL Server Analysis Services процесса. PathToDumpFile представляет папку, в которую записывается файл дампа.

Эту команду необходимо выполнить из общего каталога, в котором установлен экземпляр, или указать полный путь к файлу Sqldumper.exe в команде .

Версия служб Analysis Services Расположение
2019 %ProgramFiles%\Microsoft SQL Server\150\Shared
2017 %ProgramFiles%\Microsoft SQL Server\140\Shared
2016 %ProgramFiles%\Microsoft SQL Server\130\Shared
2014 %ProgramFiles%\Microsoft SQL Server\120\Shared
2012 %ProgramFiles%\Microsoft SQL Server\110\Shared

Например, каталог по умолчанию для запуска sqldumper.exe для SQL Server Analysis Services 2019 — .C:\Program Files\Microsoft SQL Server\1590\Shared

Дополнительные сведения

Параметр SQLDumperFlagsOn можно использовать для указания различных флагов SQLDumper. В следующей таблице перечислены значения битовой маски, которые можно использовать в качестве значения для параметра флага.

Мнемоническое имя Шестнадцатеричное значение Описание
SQLDUMPER_DBGBREAK 0x0001 Этот флаг заставляет служебную программу Sqldumper.exe запускать вызов API DebugBreak в начале программы при анализе параметров. Как правило, специалисты службы поддержки продуктов Майкрософт не используют этот флаг, так как флаг используется только для отладки Sqldumper.exe проблем со служебной программой.
Примечание Этот флаг прерывает процесс Sqldumper.exe. Этот флаг не прерывает процесс отладки служебной программы Sqldumper.exe.
SQLDUMPER_NOMINIDUMP 0x0002 При использовании этого флага служебная программа Sqldumper.exe не создает файл дампа. Этот флаг используется для тестирования служебной программы Sqldumper.exe.
SQLDUMPER_NOWATSON 0x0004 Как правило, этот флаг используется при создании файлов дампа вручную. Этот флаг переопределяет поведение отчетов об ошибках по умолчанию. По умолчанию файл дампа отправляется на сайт отчетов об ошибках, настроенный в реестре.
SQLDUMPER_REFERENCED_MEMORY 0x0008 Этот флаг заставляет служебную программу Sqldumper.exe задать флаг MiniDumpWithIndirectlyReferencedMemory для параметра MiniDumpType при вызове функции MiniDumpWritedump. Память для указателей (только на одном уровне), которые основаны на стеке (параметры или локальные переменные), будет храниться в файле дампа. Тестирование показывает, что некоторые локальные параметры, основанные на данных локального хранилища потока (TLS), такие как вероятностная схема подписи (PSS) и структуры EC, не работают даже при установке этого флага.
SQLDUMPER_ALL_MEMORY 0x0010 Этот флаг заставляет служебную программу Sqldumper.exe задать флагMiniDumpWithFullMemory для MiniDumpType, когда служебная программа вызывает функцию MiniDumpWriteDump. Это поведение аналогично использованию команды .dump /mf в отладчике. Однако для включения всех стеков потоков необходимо также задать для флага SQLDUMPER_DUMP_ALL_THREADS значение включено.
SQLDUMPER_DUMP_ALL_THREADS 0x0020 Этот флаг не требуется, если вы вручную запускаете служебную программу Sqldumper.exe и указываете значение параметра ThreadId, равное 0. Значение параметра ThreadId, равное 0, указывает, что все потоки должны быть дампами. Если указать определенное значение параметра ThreadId, отличное от нуля, но вы также используете этот флаг, все потоки записываются в файл дампа. Этот флаг существует потому, что типичное поведение в процессе Sqlservr.exe заключается в передаче текущего значения свойства ThreadId потока, который порождает процесс Sqlservr.exe. При таком поведении флаг необходим в качестве параметра для дампа всех потоков.
SQLDUMPER_MATCH_FILE_NAME 0x0040 Этот флаг можно использовать, чтобы попытаться заставить служебную программу Sqldumper.exe создать имя файла дампа, похожее на определенное соглашение об именовании. Это конкретное соглашение об именовании может быть основано на существующем имени файла. Так как необходимо настроить специальную структуру памяти, содержащую существующее имя файла в собственной программе, а затем передать этот указатель в служебную программу Sqldumper.exe в качестве параметра SqlInfoPtr, этот флаг не полезен при запуске программы Sqldumper.exe вручную.
SQLDUMPER_SKIP_DW_REG_READ 0x0080 Этот флаг приводит к тому, что служебная программа Sqldumper.exe не будет использовать реестр в качестве пути для выполнения программы Dw15.exe. Программа Dw15.exe используется для отправки файлов дампа на сайт отчетов об ошибках.
SQLDUMPER_VERBOSE 0x0100 Этот флаг может быть полезным, если вы не уверены в параметрах, которые, по мнению служебной программы Sqldumper.exe, используются в качестве входных данных. При использовании этого флага служебная программа Sqldumper.exe отображает значения параметров и количество значений параметров, указанных в командной строке.
SQLDUMPER_WAIT_AT_EXIT 0x0200 Этот флаг можно использовать для присоединения отладчика к служебной программе Sqldumper.exe. Этот отладчик можно использовать для устранения любых проблем с Sqldumper.exe служебной программой. Эти проблемы особенно могут возникать, когда служебная программа Sqldumper.exe порождена Sqlservr.exe или другой программой. При установке этого флага служебная программа Sqldumper.exe вызывает функцию SleepEx в течение 15 секунд непосредственно перед Sqldumper.exe программой и после завершения всех остальных операций.
SQLDUMPER_FILTERED 0x0800 Этот флаг можно использовать для создания отфильтрованного файла дампа. SQL Server Analysis Services пока не поддерживает этот флаг.

Вы можете использовать параметр MiniDumpFlagsOn, чтобы указать флаги minidump. В следующей таблице перечислены доступные флаги minidump:

Вариант Значение Описание
MiniDumpNormal 0x00000000 Создайте типичный файл мини-дампа, использующий перезапись.
MiniDumpWithDataSegs 0x00000001 Включите сегмент данных для всех загруженных модулей. Флаг, в который загруженные модули получают глобальные переменные.
MiniDumpWithFullMemory 0x00000002 Создайте полный файл дампа пользователя. Отфильтрованный файл дампа отключается при установке флага.
MiniDumpWithHandleData 0x00000004 Включите сведения о дескрипторе.
MiniDumpFilterMemory 0x00000010 Память стека и резервного хранилища должна проверяться на наличие ссылок указателей на модули в списке модулей. Пользователь не должен использовать этот флаг для SQL Server Analysis Services.
MiniDumpWithUnloadedModules 0x00000020 Этот флаг предоставляет сведения о недавно выгруженных модулях. Только Microsoft Windows XP и Microsoft Windows Server 2003 поддерживают этот флаг. Операционная система не хранит сведения о выгруженных модулях до Windows Server 2003 с пакетом обновления 1 (SP1) и Windows XP с пакетом обновления 2 (SP2).
MiniDumpWithIndirectlyReferencedMemory 0x00000040 Включите страницы, на которые ссылаются локальные данные или другая память стека.
MiniDumpFilterModulePaths 0x00000080 Если путь к модулю удален из сведений о модуле, не используйте этот флаг.
MiniDumpWithProcessThreadData 0x00000100 Этот флаг содержит сведения о блоке среды обработки (PEB) и блоке среды потока (TEB).
MiniDumpWithPrivateReadWriteMemory 0x00000200 Проверьте виртуальное адресное пространство на наличие других типов памяти для включения.
MiniDumpWithoutOptionalData 0x00000400 Уменьшите объем данных, которые создаются в дампе, исключив не нужные области памяти. Сделайте это, чтобы соответствовать условиям, заданным для файла дампа. Использование этого флага позволяет избежать дампа памяти, которая может содержать данные, которые являются частными для пользователя. Однако это не гарантирует отсутствие личной информации. Не используйте этот флаг.
MiniDumpWithFullMemoryInfo 0x00000800 Включите описательные сведения о регионе памяти с перечислением.
MiniDumpWithThreadInfo 0x00001000 Включите сведения о состоянии потока.
MiniDumpWithCodeSegs 0x00002000 Включите разделы кода и связанные с кодом разделы для всех загруженных модулей.

Ссылки

Использование служебной программы Sqldumper.exe для создания файла дампа в SQL Server