Configurare SQL Server Analysis Services per generare file di dump della memoria

Questo articolo descrive come configurare SQL Server Analysis Services per generare automaticamente file di dump della memoria.

Versione originale del prodotto: SQL Server
Numero KB originale: 919711

Introduzione

Questo articolo descrive come configurare le build di Microsoft SQL Server Analysis Services (SSAS) 2012 o versioni successive per generare automaticamente tipi diversi di file dump di memoria quando rileva eccezioni. L'articolo descrive anche come usare l'utilità Sqldumper.exe per ottenere manualmente un file di dump della memoria per il processo di SQL Server Analysis Services.

Ulteriori informazioni

Per impostazione predefinita, SQL Server Analysis Services genera automaticamente file minidump quando si verifica un'eccezione. Per l'installazione predefinita, i file minidump vengono scritti nel percorso predefinito:

Versione di Analysis Services Posizione
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

Nota

InstanceName è un segnaposto per il valore corrispondente per SQL Server Analysis Services versione.

Il percorso del log dell'istanza di SQL Server Analysis Services può essere modificato dopo l'installazione, pertanto è possibile verificare il percorso del log esaminando il file di msmdsrv.ini per il SQL Server Analysis Services installato.

Per determinare il valore corrispondente per il sistema, determinare il valore della chiave di registrazione ImagePath, deve contenere il percorso del percorso di configurazione che contiene il msmdsrv.ini.

Versione di Analysis Services Sottochiave del Registro di sistema
Istanza predefinita HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSSQLServerOLAPService\ImagePath
Istanza denominata HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSOLAP$InstanceName\ImagePath

I file minidump includeranno le informazioni seguenti:

  • Tutti gli stack di thread

  • Memoria di secondo ordine a cui fanno riferimento i puntatori nello stack

  • Informazioni sul blocco dell'ambiente di elaborazione (PEB)

  • Informazioni sul blocco dell'ambiente thread (TEB)

  • Informazioni sui moduli scaricati di recente

  • Informazioni sullo stato del thread

La sezione Exception nel file Msmdsrv.ini controlla la generazione di file dump di memoria. Il file per impostazione predefinita si trova nella %ProgramFiles%\Microsoft SQL Server\MSASxx.InstanceName\OLAP\Config cartella . MSASxx è un segnaposto per la versione corrispondente per SQL Server Analysis Service. Quando si apre il file nel Blocco note, si nota una sezione del tag XML eccezione simile alla seguente:

<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>

È possibile controllare il comportamento della generazione del file di dump della memoria modificando le impostazioni in questa sezione. È anche possibile modificare queste impostazioni in SQL Server Management Studio. Per altre informazioni su queste impostazioni, visitare il sito Web di download SQL Server Management Studio: Proprietà log.

Disabilitare il file di dump automatico della memoria per Analysis Services

Il valore dell'impostazione CreateAndSendCrashReports determina se verrà generato un file di dump della memoria. Questa impostazione può avere uno dei valori elencati nella tabella seguente.

Valore Descrizione
0 Questo valore specifica che Analysis Services non genera alcun file di dump della memoria. Inoltre, il valore delle altre impostazioni nella sezione Eccezione viene ignorato.
1 Questo valore predefinito abilita il file di dump della memoria. Tuttavia, SQL Server Analysis Services non invia una segnalazione errori a Microsoft.
2 Questo valore specifica che SQL Server Analysis Services genera un file di dump della memoria e invia un report degli errori a Microsoft.

Quando l'impostazione CreateAndSendCrashReports è impostata su 1 o 2, le altre impostazioni nella sezione Eccezione possono controllare il tipo di file dump della memoria e le informazioni da includere nel file di dump della memoria.

Configurare SQL Server Analysis Services per generare automaticamente un file di dump completo

Per configurare SQL Server Analysis Services per generare automaticamente un file dump completo quando si verifica un'eccezione, è possibile impostare l'impostazione SQLDumperFlagsOn su 0x34. Inoltre, se si desidera configurare SQL Server Analysis Services per generare un file dump completo che include le informazioni sull'handle, è possibile impostare l'impostazione SQLDumperFlagsOn su 0x34 e l'impostazione MiniDumpFlagsOn su 0x4. Ad esempio, la sezione Eccezione nel file Msmdsrv.ini può essere simile alla seguente:

<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>

Generare un file dump completo che include manualmente l'handle delle informazioni

Per risolvere i problemi, ad esempio un server che smette di rispondere (si blocca), è possibile generare un file dump completo che include manualmente le informazioni di gestione. A tale scopo, è possibile eseguire l'utilità Sqldumper.exe al prompt dei comandi insieme agli argomenti seguenti:

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

Nota

PID rappresenta l'ID processo del processo SQL Server Analysis Services. PathToDumpFile rappresenta la cartella in cui viene scritto il file di dump.

È necessario eseguire questo comando dalla directory Condivisa in cui è installata l'istanza oppure specificare il percorso completo del file Sqldumper.exe nel comando .

Versione di Analysis Services Posizione
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

Ad esempio, la directory predefinita da eseguire sqldumper.exe per SQL Server Analysis Services 2019 è C:\Program Files\Microsoft SQL Server\1590\Shared.

Ulteriori informazioni

È possibile usare l'impostazione SQLDumperFlagsOn per specificare i diversi flag SQLDumper. Nella tabella seguente sono elencati i valori della maschera di bit che è possibile usare come valore per il parametro flag.

Nome mnemonico Valore esadecimale Descrizione
SQLDUMPER_DBGBREAK 0x0001 Questo flag fa sì che l'utilità Sqldumper.exe eserciti la chiamata API DebugBreak all'inizio del programma quando vengono analizzati i parametri. In genere, i professionisti del Servizio Supporto Tecnico Clienti Microsoft non useranno questo flag perché il flag viene usato solo per eseguire il debug di Sqldumper.exe problemi di utilità.
Nota Questo flag viene interrotto nel processo di Sqldumper.exe. Questo flag non entra nel processo di debug dell'utilità Sqldumper.exe.
SQLDUMPER_NOMINIDUMP 0x0002 Quando si usa questo flag, l'utilità Sqldumper.exe non genera un file di dump. Questo flag viene usato per testare l'utilità Sqldumper.exe.
SQLDUMPER_NOWATSON 0x0004 In genere, questo flag viene usato quando si generano manualmente file di dump. Questo flag sostituisce il comportamento predefinito di segnalazione degli errori. Per impostazione predefinita, il file di dump viene inviato al sito di segnalazione degli errori configurato nel Registro di sistema.
SQLDUMPER_REFERENCED_MEMORY 0x0008 Questo flag fa sì che l'utilità Sqldumper.exe imposti il flag MiniDumpWithIndirectlyReferencedMemory per il parametro MiniDumpType quando chiama la funzione MiniDumpWritedump. La memoria per i puntatori (solo a un livello) basati su stack (parametri o variabili locali) verrà archiviata nel file di dump. Il test rivela che alcuni parametri locali basati su dati TLS (Thread Local Storage), ad esempio lo schema di firma probabilistica (PSS, Probabilistic Signature Scheme) e le strutture EC, non sembrano funzionare anche quando si imposta questo flag.
SQLDUMPER_ALL_MEMORY 0x0010 Questo flag fa sì che l'utilità Sqldumper.exe imposti il flagMiniDumpWithFullMemory per MiniDumpType quando l'utilità chiama la funzione MiniDumpWriteDump. Questo comportamento equivale all'uso del comando .dump /mf nel debugger. È tuttavia necessario che il flag SQLDUMPER_DUMP_ALL_THREADS sia impostato su on per assicurarsi che tutti gli stack di thread siano inclusi.
SQLDUMPER_DUMP_ALL_THREADS 0x0020 Questo flag non è necessario quando si esegue manualmente l'utilità Sqldumper.exe e si specifica un valore del parametro ThreadId pari a 0. Un valore del parametro ThreadId pari a 0 indica che è necessario eseguire il dump di tutti i thread. Se si specifica un valore di parametro ThreadId diverso da zero, ma si usa anche questo flag, tutti i thread vengono scritti nel file di dump. Questo flag esiste perché il comportamento tipico nel processo di Sqlservr.exe consiste nel passare il valore corrente della proprietà ThreadId del thread che genera il processo Sqlservr.exe. Quando si verifica questo comportamento, il flag è necessario come opzione per eseguire il dump di tutti i thread.
SQLDUMPER_MATCH_FILE_NAME 0x0040 È possibile usare questo flag per tentare di forzare l'utilità Sqldumper.exe a generare un nome di file dump simile a una convenzione di denominazione specifica. Questa convenzione di denominazione specifica può essere basata su un nome file esistente. Poiché è necessario configurare una struttura di memoria speciale che contiene il nome file esistente nel proprio programma e quindi passare tale puntatore all'utilità Sqldumper.exe come parametro SqlInfoPtr, questo flag non è utile quando si esegue manualmente l'utilità Sqldumper.exe.
SQLDUMPER_SKIP_DW_REG_READ 0x0080 Questo flag fa sì che l'utilità Sqldumper.exe non usi il Registro di sistema come percorso per l'esecuzione del programma Dw15.exe. Il programma Dw15.exe viene usato per caricare i file di dump nel sito di segnalazione errori.
SQLDUMPER_VERBOSE 0x0100 Questo flag può essere utile se non si è certi dei parametri che l'utilità Sqldumper.exe ritiene vengano usati come input. Quando si usa questo flag, l'utilità Sqldumper.exe visualizza i valori dei parametri e il numero di valori di parametro specificati dalla riga di comando.
SQLDUMPER_WAIT_AT_EXIT 0x0200 È possibile usare questo flag per collegare un debugger all'utilità Sqldumper.exe. È possibile usare questo debugger per risolvere eventuali problemi relativi all'utilità Sqldumper.exe. Questi problemi possono verificarsi soprattutto quando l'utilità Sqldumper.exe viene generata da Sqlservr.exe o da un altro programma. Quando si imposta questo flag, l'utilità Sqldumper.exe chiama la funzione SleepEx per 15 secondi poco prima dell'esistenza del programma Sqldumper.exe e al termine di tutte le altre operazioni.
SQLDUMPER_FILTERED 0x0800 È possibile usare questo flag per generare un file di dump filtrato. SQL Server Analysis Services non supporta ancora questo flag.

È possibile usare l'impostazione MiniDumpFlagsOn per fornire flag minidump. Nella tabella seguente sono elencati i flag minidump disponibili:

Opzione Valore Descrizione
MiniDumpNormal 0x00000000 Creare un file mini-dump tipico che usa la sovrascrittura.
MiniDumpWithDataSegs 0x00000001 Includere un segmento di dati per tutti i moduli caricati. Flag che i moduli caricati recuperano variabili globali.
MiniDumpWithFullMemory 0x00000002 Creare un file dump utente completo. Un file di dump filtrato viene disabilitato quando il flag è impostato.
MiniDumpWithHandleData 0x00000004 Includere le informazioni sull'handle.
MiniDumpFilterMemory 0x00000010 La memoria dello stack e dell'archivio di backup deve essere analizzata per i riferimenti ai puntatori ai moduli nell'elenco dei moduli. L'utente non deve usare questo flag per SQL Server Analysis Services.
MiniDumpWithUnloadedModules 0x00000020 Questo flag fornisce informazioni sui moduli scaricati di recente. Solo Microsoft Windows XP e Microsoft Windows Server 2003 supportano questo flag. Il sistema operativo non gestisce le informazioni per i moduli scaricati fino a Windows Server 2003 Service Pack 1 (SP1) e Windows XP Service Pack 2 (SP2).
MiniDumpWithIndirectlyReferencedMemory 0x00000040 Includere pagine con dati a cui fanno riferimento variabili locali o altra memoria dello stack.
MiniDumpFilterModulePaths 0x00000080 Se il percorso del modulo viene rimosso dalle informazioni del modulo, non usare questo flag.
MiniDumpWithProcessThreadData 0x00000100 Questo flag fornisce informazioni sui blocchi PEB (Process Environment Block) e TEB (Thread Environment Block).
MiniDumpWithPrivateReadWriteMemory 0x00000200 Analizzare lo spazio indirizzi virtuale per individuare altri tipi di memoria da includere.
MiniDumpWithoutOptionalData 0x00000400 Ridurre i dati di cui viene eseguito il dump eliminando le aree di memoria non necessarie. Eseguire questa operazione per soddisfare i criteri specificati per il file di dump. L'uso di questo flag può evitare di scaricare memoria che può contenere dati privati per l'utente. Tuttavia, questa non è una garanzia che non saranno presenti informazioni private. Non usare questo flag.
MiniDumpWithFullMemoryInfo 0x00000800 Includere informazioni descrittive sull'area di memoria enumerata.
MiniDumpWithThreadInfo 0x00001000 Includere le informazioni sullo stato del thread.
MiniDumpWithCodeSegs 0x00002000 Includere le sezioni relative al codice e al codice per tutti i moduli caricati.

Riferimenti

Come usare l'utilità Sqldumper.exe per generare un file di dump in SQL Server