Resumen
La utilidad SQLDumper. exe se incluye con Microsoft SQL Server. En este artículo se describe cómo usar la utilidad SQLDumper. exe para generar un archivo de volcado para informes de errores de Watson o para tareas de depuración.
Notasademás de la utilidad SQLDumper. exe, también están disponibles los siguientes métodos:
-
Puede usar el DBCC STACKDUMP comando para generar un archivo de volcado en SQL Server. Para obtener más información, consulte Cómo usar DBCC STACKDUMPen la sección más información.
-
También puede usar un script de PowerShell para automatizar la línea de comandos de SQLDumper. Para obtener más información, consulte Cómo usar el script de PowerShell para generar un archivo de volcadoen la sección más información.
Advertencia La generación de archivos de volcado de proceso puede afectar a la disponibilidad del servicio (aquí SQL Server) y desencadenar la conmutación por error de los recursos en contextos siempre activados (es decir, el grupo de disponibilidad y la instancia de clúster de conmutación Las opciones que se usan para generar los archivos de volcado supondrán una gran diferencia. Asegúrese de leer la repercusión de las secciones generación de volcado y tipos de volcado .
Al capturar un archivo de volcado de proceso de SQL Server (especialmente un archivo de volcado filtrado o un archivo de volcado completo) en un SQL Server agrupado o en un SQL Server que aloje una instancia de un grupo de disponibilidad AlwaysOn (AG), el servidor SQL Server o AG agrupado puede conmutar por error a otro nodo si el archivo de volcado tarda demasiado en completarse. Para evitar la conmutación por error potencial, puede usar la configuración siguiente antes de capturar el archivo de volcado y puede recuperar el cambio después de que se haya realizado un volcado:
-
Para SQL Server agrupado (FCI), haga clic con el botón secundario en recursos de SQL Server en el administrador de clústeres y seleccione "si el recurso produce errores, no reiniciar" en la pestaña directivas .
-
Para AG, aplique todas las siguientes opciones de configuración:
-
Aumente el tiempo de espera de sesión (por ejemplo, 120 segundos para todas las réplicas). En SQL Server Management Studio, haga clic con el botón secundario en la réplica que desea configurar y, a continuación, haga clic en propiedades. Cambiar el campo de tiempo de espera de sesión (segundos) a 120 segundos. Para obtener más información, vea cambiar el período de tiempo de espera de sesión para una réplica de disponibilidad (SQL Server).
-
Cambie el "failover automático" de todas las réplicas a "conmutación por error manual". En SQL Server Management Studio, haga clic con el botón secundario en réplica, seleccione propiedadesy, a continuación, cambie la "conmutación por error automática" de todas las réplicas a "conmutación por error manual" en la pestaña propiedades . Para obtener más información, vea cambiar el modo de conmutación por error de una réplica de disponibilidad (SQL Server).
-
Aumente el "LeaseTimeout" a 60.000 MS (60 segundos) y cambie HealthCheckTimeout a 90.000 MS (90 segundos). En Administrador de clústeres, haga clic con el botón secundario en recursos de AG, seleccione propiedadesy, a continuación, cambie a la pestaña propiedades para modificar la configuración. Para obtener más información, vea configurar los valores de la propiedad HealthCheckTimeout.
-
Más información
Cómo ejecutar la utilidad SQLDumper. exe manualmente
Ejecute la utilidad SQLDumper. exe bajo el contexto de la carpeta en la que SQL Server instaló originalmente la utilidad. De forma predeterminada, la ruta de instalación de la utilidad SQLDumper. exe es la siguiente: SQLServerInstallDrive: \Archivos de Programa\microsoft SQL Server\90\Shared\SQLDumper.exeNota SQLServerInstallDrive es un marcador de posición para la unidad en la que instaló SQL Server 2005. Para generar un archivo de volcado con la utilidad SQLDumper. exe, siga estos pasos:
-
Abra la siguiente carpeta: SQLServerInstallDrive: \Archivos de programa\Microsoft SQL Server \Number\SharedNotaen esta ruta de acceso a la carpeta, número es un marcador de posición para una de las siguientes opciones:
-
140 para SQL Server 2017
-
130 para SQL Server 2016
-
120 para SQL Server 2014
-
110 para SQL Server 2012
-
100 para SQL Server 2008
-
90 para SQL Server 2005
-
-
Asegúrese de que el archivo DbgHelp. dll está en esta carpeta.
-
Haga clic en Inicio y en Ejecutar, escriba cmd y, por último, haga clic en Aceptar.
-
En el símbolo del sistema, escriba el comando siguiente y presione ENTRAR: cd SQLServerInstallDrive:\Program Files\Microsoft SQL Server\number\SharedNota:En esta ruta de la carpeta, número es el mismo marcador de posición que cambia con la versión de SQL Server como se ha descrito anteriormente.
-
Para generar un tipo específico de archivo de volcado, escriba el comando correspondiente en el símbolo del sistema y, a continuación, presione ENTRAR:
-
Archivo de volcado completo
SQLDumper. exe ProcessId 0 0x01100
-
Archivo de volcado de minivolcado
SQLDumper. exe ProcessId 0 0x0120
-
Archivo de volcado de minivolcado que incluye memoria a la que se hace referencia indirectamente. Esta es la opción recomendada y SQL Server también la usa de forma predeterminada al generar automáticamente volcados de memoria.
SQLDumper. exe ProcessId 0 0x0128
-
Archivo de volcado filtrado
SQLDumper. exe ProcessId 0 0x8100
Nota ProcessId es un marcador de posición para el identificador de proceso de la aplicación de Windows para la que desea generar un archivo de volcado.
-
Si la utilidad SQLDumper. exe se ejecuta correctamente, la utilidad genera un archivo de volcado en la carpeta en la que está instalada la utilidad. El archivo de volcado que genera la utilidad SQLDumper. exe tiene un patrón de nombre de archivo que es similar a lo siguiente:
SQLDmprxxxx.mdmp En este patrón, xxxx es un número creciente que se determina en función de otros archivos que tienen un nombre de archivo similar en la misma carpeta. Si ya tiene archivos en la carpeta que tienen nombres de archivo en el patrón especificado, es posible que tenga que comparar la fecha y la hora en la que se creó el archivo para identificar el archivo que desea.
Información adicional y consideraciones
SQLDumper. exe existe principalmente para generar volcados de memoria para el proceso de SQL Server en escenarios en los que es necesario un volcado de memoria para resolver problemas específicos (excepciones, aserciones, programadores que no son de rendimiento, etc.). En tales casos, SQL Server llama a SQLDumper. exe para generar un volcado de memoria de su proceso. El volcado de memoria se almacena en una ruta configurada en el Administrador de configuración de SQL Server con un directorio de ubicación predeterminado MSSQL\LOG\. Si, en algunos casos, el tamaño del volcado es demasiado grande, por ejemplo, puede modificar la ruta de acceso de la siguiente manera:
-
Abrir el Administrador de configuración de SQL Server
-
En servicios de SQL Server , busque SQL Server en investigación
-
Haga clic con el botón derecho en él, seleccione propiedades y vaya a la pestaña avanzadas .
-
Modifique el directorio de volcado a la ruta deseada y haga clic en Aceptar.
-
Reinicie SQL Server (cuando sea posible) para que la nueva configuración surta efecto.
Cuando la utilidad SQLDumper. exe se usa manualmente para generar un archivo de volcado para cualquier aplicación de Windows, el archivo de volcado puede ser tan grande como la memoria que usa actualmente la aplicación Windows. Asegúrese de que hay suficiente espacio en disco disponible en la unidad en la que la utilidad SQLDumper. exe está escribiendo el archivo de volcado. Puede especificar el directorio en el que desea que la utilidad SQLDumper. exe escriba el archivo de volcado. El directorio debe existir antes de ejecutar la utilidad SQLDumper. exe. De lo contrario, se producirá un error en la utilidad SQLDumper. exe. No use una ruta de acceso UNC como ubicación para el archivo de volcado. A continuación se muestra un ejemplo de cómo especificar la ubicación del archivo de volcado del archivo de volcado de minivolcado:
-
Haga clic en Inicio y en Ejecutar, escriba cmd y, por último, haga clic en Aceptar.
-
En el símbolo del sistema, escriba el comando siguiente y presione ENTRAR:
cd SQLServerInstallDrive:\Program Files\Microsoft SQL Server\number\SharedNota En esta ruta de carpeta, número es un marcador de posición para una de las siguientes opciones:
-
140 para SQL Server 2017
-
130 para SQL Server 2016
-
120 para SQL Server 2014
-
110 para SQL Server 2012
-
100 para SQL Server 2008
-
90 para SQL Server 2005
-
-
Escriba el comando siguiente en el símbolo del sistema y presione ENTRAR: Sqldumper.exe ProcessID 0 0x0128 0 MdumpPathNota MdumpPath es un marcador de posición para el directorio en el que desea que la utilidad SQLDumper. exe escriba el archivo de volcado. De forma predeterminada, el archivo se escribe en la carpeta actual.
Si especifica un archivo de volcado completo o un archivo de volcado filtrado para que se genere, la utilidad SQLDumper. exe puede demorar varios minutos en generar el archivo de volcado. El tiempo depende de las siguientes variables:
-
La cantidad de memoria que usa la utilidad SQLDumper. exe actualmente
-
La velocidad de la unidad en la que la utilidad está escribiendo el archivo de volcado
Durante este tiempo, la utilidad SQLDumper. exe no procesa los comandos. Verá que el servidor ha dejado de responder. Además, puede producirse una conmutación por error de clúster. Para ejecutar la utilidad SQLDumper. exe, debe iniciar sesión en Windows con uno de los métodos siguientes:
-
Use una cuenta que sea miembro del grupo administradores en el equipo.
-
Use la misma cuenta de usuario con la que se ejecuta el servicio de SQL Server.
Para que la utilidad SQLDumper. exe funcione correctamente a través del escritorio remoto o a través de los servicios de Terminal Server, debe iniciar escritorio remoto o servicios de Terminal Server en el modo de consola. Por ejemplo, para iniciar escritorio remoto en el modo de consola, haga clic en Inicio, haga clic en Ejecutar, escriba mstsc/consoley, a continuación, haga clic en Aceptar. Tenga en cuenta que si el servidor de destino ejecuta Windows 2000, la opción /Console se omite silenciosamente. Puede conectarse al servidor a través del escritorio remoto. Pero no utilizará la sesión de consola.
Si observa que no se ha generado ningún archivo de volcado en la carpeta actual después de ejecutar la utilidad SQLDumper. exe, revise la información que la utilidad ha generado en la línea de comandos para intentar determinar la causa posible del error. Esta información también se registra en el archivo Sqldumper_errorlog. log en el directorio actual. A continuación se muestran dos posibles mensajes de error y sus causas:
Mensaje 1
Error de OpenProcess 0x57: el parámetro es incorrecto
Se pasó un identificador de proceso no válido a la utilidad SQLDumper. exe.
Mensaje 2
Valor no válido para el identificador del subproceso: <parámetro no válido> error de parámetro
Se ha pasado un parámetro no válido a la utilidad SQLDumper. exe. Si se genera un mensaje de error similar a uno de los siguientes, puede omitir este mensaje sin ningún riesgo:
Tipo de devolución de llamada desconocido durante el minivolcado 6 Tipo de devolución de llamada desconocido durante el minivolcado 7
Impacto de la generación del volcado
Cuando se solicita un volcado de un proceso en modo de usuario (como se describe en este artículo, para estar contrastado con las Volcaciones del núcleo del sistema operativo que están fuera de nuestro ámbito), el proceso de destino (aquí SQLServer. exe) se inmoviliza por completo durante el tiempo que se tarda en serializar el contenido del volcado en el destino del archivo.
Inmovilizado significa que no podrá procesar ninguna solicitud de usuario ni pasar ninguna operación interna, incluido cualquier mecanismo de sondeo de recursos, como la implementación de IsAlive and LooksAlive de Windows Clustering (consulte la sección "cluster failovers and SQLDumper. exe Utility" para obtener detalles sobre cómo controlar esa situación). También se puede infringir el tiempo de espera en el reloj de la pared como consecuencia de la inmovilización.
Como se puede derivar de la instrucción anterior, la duración de la inmovilización es por lo tanto el factor crítico aquí, y se basa principalmente en lo siguiente:
-
El tipo de volcado seleccionado
-
El tamaño del proceso de SQL Server en la memoria, que en el caso de una única instancia activa que ejecuta parámetros predeterminados suele estar cerca de la RAM física total del servidor.
-
El rendimiento del disco utilizado como destino de la descarga.
Además, se debe planear el tamañodel archivo de volcado en disco, especialmente si varios volcados son una posibilidad y si se seleccionan tipos de volcado grandes, no predeterminados. Asegúrese de revisar la sección ' tipos de volcado ' para saber qué puede esperar. De forma predeterminada, algunos métodos de volcado crearán el volcado en la carpeta \Log de la instancia de SQL Server, que, en la configuración simple predeterminada, también sería el disco de sistema y el disco de registro de datos para SQL Server. La incorporación de ese disco a la saturación tendrá un impacto grave en SQL Server y/o en la disponibilidad del sistema.
Se han agregado tres mejoras importantes a las versiones más recientes de SQL Server para reducir el tamaño del archivo de volcado o el tiempo para generar el volcado de memoria:
-
Mecanismo de filtrado de mapa de bits
-
Eliminación de volcados repetidos en el mismo problema
-
Resultado abreviado en el ErrorLog
Filtrado de mapas de bits: se ha logrado una velocidad de volcado mejorada y un tamaño reducido debido a un nuevo mecanismo de filtrado de mapa de bits que se ha agregado a sql server 2019 y a sql server 2017. SQL Server asigna un mapa de bits que realiza un seguimiento de las páginas de memoria para ser excluido de un volcado filtrado. SQLDumper. exe lee el mapa de bits y filtra las páginas sin necesidad de leer ningún otro metadatos del administrador de memoria. Verá los siguientes mensajes en el mensaje de errores de SQL Server cuando el mapa de bits está habilitado o deshabilitado, respectivamente: "el mapa de bits de exclusión de páginas está habilitado" y "el mapa de bits de exclusión de páginas está deshabilitado".
SQL Server 2016
-
A partir de SQL Server 2016 SP2 CU13, el filtrado de mapa de bits está habilitado de forma predeterminada.
SQL Server 2017
-
Esto no está disponible en RTM a través de CU15
-
En SQL Server 2017 CU16 puede habilitar el filtrado de mapa de bits a través de T8089 y deshabilitarlo desactivando T8089
-
Iniciar con SQL Server 2017 CU20 el filtrado de mapa de bits está habilitado de forma predeterminada. La marca de seguimiento T8089 ya no se aplicará y se omitirá si está activada. El filtrado de mapa de bits puede deshabilitarse a través de T8095.
2019 de SQL Server
Esta opción está habilitada de forma predeterminada en SQL Server 2019 RTM. Puede deshabilitarse a través de T8095.
Eliminación de volcados repetidos en el mismo problema:ahora se han eliminado las descargas de memoria de epeated. Con una firma de pila, el motor SQL realiza un seguimiento si ya se ha producido una excepción y no generará un nuevo volcado de memoria si ya hay una. Esto se aplica a infracciones de acceso, desbordamiento de pila, aserciones y excepciones de daños de índice. Esto reduce significativamente la cantidad de espacio en disco que usan los volcados de memoria y no inmoviliza temporalmente el proceso para generar un volcado. Esto se agregó en SQL Server 2019.
Se ha abreviado el resultado en el ErrorLog:El contenido generado en el volcado de errores de SQL Server a partir de un único volcado de memoria no puede ser abrumador, sino también ralentizar el proceso de generación de un volcado de memoria debido al tiempo que se ha tenido que serializar toda esta información en un formato de texto en el ErrorLog. En SQL Server 2019, el contenido almacenado en el ErrorLog en la generación de volcado se ha reducido enormemente y puede tener el siguiente aspecto:
DateTime SPIDSPID * * dump Thread-SPID = 0, EC = 0x0000015C7169BF40
PID de DateTime SPID S *
DateTime SPIDSPID * pila de descarga iniciada por el usuario. Este no es un volcado de excepción del servidor.
PID de DateTime SPID S *
La firmaPID de DateTime SPID S de la pila de descarga es de 0x00000000788399E5
PID de DateTime SPID S proceso de volcado externo de devoluciones de código 0x20000001.
El proceso de volcado externo no ha devuelto errores.
Anteriormente, SQL Server imprimiría información de cada sesión o subproceso cuando el usuario desencadenara un volcado manual, por ejemplo.
Tipos de volcado
Los métodos descritos pueden generar tres tipos diferentes de volcados: minivolcados, volcados completos y volcados filtrados.
Los minivolcados con memoria de referencia son una instantánea de todos los subprocesos activos del proceso ("pilas de subprocesos"), junto con un extracto limitado de la memoria a la que hacen referencia las pilas de subprocesos y otros datos de procesos o subprocesos clave. Suelen tener un tamaño de unos megabytes y son muy rápidos de generar (desde menos de un segundo hasta un par de segundos). Incluso los sistemas de servidor más grandes (con cientos de CPU que conducen indirectamente de un número masivo de subprocesos en el proceso de SQL Server) raramente superan 20-30 MB: el tamaño de un minivolcado no se incrementa con el tamaño del proceso de SQL Server. Este tipo de volcado es el tipo predeterminado utilizado por SQL Server al generar automáticamente volcados de memoria en excepciones, problemas del programador, problemas de pestillos, etc.
Tenga en cuenta que, como parte de su instrumentación integrada, SQL Server generará "volcados de diagnóstico" automatizados en algunas situaciones específicas. Por lo tanto, esta operación se considera suficientemente segura para que SQL Server pueda activarla automáticamente cuando sea necesario.
Los volcados completos son una copia completa del espacio del proceso de destino activo. Esto podría incluir todo el estado de los subprocesos, toda la memoria asignada a procesos y todos los módulos cargados. Por lo tanto, los volcados completos tienen un tamaño que es aproximadamente el mismo proceso de SQL Server, que a su vez puede ser casilo más grande que la RAM total del sistema. En servidores grandes dedicados a una única instancia de SQL Server, eso puede significar un archivo que tenga varios cientos de gigabytes o más. De manera inesperada, tal archivo tardará mucho tiempo en generarse y, por consiguiente, provocará un bloqueo de prolongated. El rendimiento del disco para el destino del volcado será un impulsor importante para congelar el tiempo. Tenga en cuenta que este tipo de volcado casi rara vez se usa para SQL Server hoy, como se explica en la siguiente descripción.
Volcados filtrados: como el tamaño de RAM de los servidores típicos que ejecutan SQL Server se ha incrementado, los volcados completos se hicieron cada vez más y difíciles de manejar. Los volcados filtrados se han implementado de esta manera: son un subconjunto de volcados completos, en los que las grandes áreas de estructuras de memoria relacionadas con SQL Server se omiten a propósito y no se serializan en el disco porque no producen valor agregado para la solución de problemas (normalmente, páginas de datos o de índices, algunas cachés internas como las páginas de datos y la memoria del grupo de registros). Esto da como resultado un archivo más pequeño que un volcado completo y conserva casi toda su utilidad, y esto ha reemplazado los volcados completos como opción preferida en una gran mayoría de situaciones en las que los pequeños volcados no eran suficientes. La disminución de tamaño en comparación con el volcado total puede variar mucho, pero sigue siendo un archivo bastante grande, que suele ser el 30-60% del tamaño de proceso de SQL Server, por lo que es mejor planear un posible tamaño como un volcado completo como una opción peor, que debería dejar un buen margen de seguridad. Tenga en cuenta que un volcado filtrada puede no ser necesariamente más rápido de generar que un volcado completo en todos los casos: es cuestión de si los beneficios relacionados con el número de e/s se han evitado y superan el tiempo necesario para implementar la lógica de filtro (de modo que la velocidad del disco y la velocidad de CPU o RAM influirán).
Puede usar la utilidad SQLDumper. exe para generar un archivo de volcado a petición para cualquier aplicación de Microsoft Windows. Por ejemplo, puede generar un archivo de volcado para la depuración de un problema de aplicación cuando un equipo que ejecuta Microsoft SQL Server no responde a las solicitudes de usuario. Un archivo de volcado puede ser un archivo de volcado parcial o un archivo de volcado completo. Un archivo de volcado filtrado solo es aplicable y tiene sentido en el contexto de SQL Server.. Sin embargo, no puede usar la utilidad SQLDumper. exe para la depuración de propósito general. Para obtener más información sobre la depuración de propósito general, visite el siguiente sitio web de Microsoft:
http://www.microsoft.com/whdc/devtools/debugging/default.mspx
El proceso de SQL Server llama a la utilidad SQLDumper. exe de forma interna para generar un archivo de volcado cuando el proceso experimenta alguna excepción. SQL Server pasa las marcas a la utilidad SQLDumper. exe. Puede usar marcas de seguimiento para cambiar las marcas que SQL Server pasa a la utilidad en el contexto de una excepción o en el contexto de una aserción. Estos indicadores de seguimiento están comprendidos entre 2540 y 2559. Puede usar estos indicadores de traza para generar determinados tipos de archivos de volcado. Por ejemplo:
-
La marca de seguimiento 2551: genera un volcado de memoria filtrada
-
La marca de seguimiento 2544: genera un volcado de memoria completa
-
Indicador de seguimiento 8026: SQL Server borrará un desencadenador de volcado después de generar el volcado una vez
Si hay dos o más indicadores de traza activos, se atenderá la opción que indica el volcado de memoria más grande. Por ejemplo, si se usan los indicadores de seguimiento 2551 y 2544, SQL Server creará un volcado de memoria completa.
Cómo obtener un identificador de proceso de la aplicación de Microsoft Windows
Para generar un archivo de volcado con la utilidad SQLDumper. exe, debe tener el identificador de proceso de la aplicación de Windows para la que desea generar un archivo de volcado. Para obtener el identificador de proceso, siga estos pasos:
-
Presione CTRL + ALT + Supr y, a continuación, haga clic en Administrador de tareas.
-
En el cuadro de diálogo Administrador de tareas de Windows , haga clic en la pestaña procesos .
-
En el menú vista , haga clic en seleccionar columnas.
-
En el cuadro de diálogo seleccionar columnas , active la casilla PID (identificador de proceso) y, a continuación, haga clic en Aceptar.
-
Observe el identificador de proceso de la aplicación de Windows para la que desea generar un archivo de volcado. Para la aplicación SQL Server, observe el identificador de proceso del proceso Sqlservr. exe.
-
Cierre el Administrador de tareas.
También puede obtener el identificador de proceso de la aplicación SQL Server que se está ejecutando en el equipo mediante el archivo de registro de errores de SQL Server. Por ejemplo, una parte del archivo de registro de errores de SQL Server es similar a la siguiente:
Date/Time Servidor Microsoft SQL Server 2005-9.00.1399.06 (Intel x86) Fecha y hora Copyright (c) 1988-2005 Microsoft Corporation Enterprise Edition en Windows NT 5,2 (compilación 3790: Service Pack 1) Fecha y hora Server (c) 2005 Microsoft Corporation. Date/Time Servidor todos los derechos reservados. Date/Time El identificador de proceso de servidor servidor es 3716.
El número que aparece después del identificador de proceso del servidor es el identificador del proceso Sqlservr. exe.
Conmutación por error de clúster y la utilidad SQLDumper. exe
En escenarios de conmutación por error de clúster, la DLL de recursos de SQL Server puede obtener un archivo de volcado antes de que se produzca la conmutación por error. Cuando la DLL de recursos de SQL Server determina que se ha producido un error en un recurso de SQL Server, la DLL de recursos de SQL Server usa la utilidad SQLDumper. exe para obtener un archivo de volcado del proceso de SQL Server. Para asegurarse de que la utilidad SQLDumper. exe genera correctamente el archivo de volcado, debe establecer las tres propiedades siguientes como requisitos previos:
-
SqlDumperDumpTimeOut Un tiempo de espera especificado por el usuario. La biblioteca DLL de recursos espera a que se complete el archivo de volcado antes de que el archivo DLL de recursos detenga el servicio de SQL Server.
-
SqlDumperDumpPath La ubicación donde la utilidad SQLDumper. exe genera el archivo de volcado.
-
SqlDumperDumpFlags Indicadores que usa la utilidad SQLDumper. exe.
Si alguna de las propiedades no está establecida, la utilidad SQLDumper. exe no puede generar el archivo de volcado. Se registrará un mensaje de advertencia tanto en el registro de eventos como en el registro de clúster siempre que el recurso se conecte.
Para SQL Server 2012 y versiones posteriores
Puede usar el comando ALTER SERVER CONFIGURATION (T-SQL) para modificar estas propiedades. Por ejemplo:
ALTER SERVER CONFIGURATION Set FAILOVER CLUSTER PROPERTY SqlDumperDumpTimeOut = 0; ALTER SERVER CONFIGURATION Set FAILOVER CLUSTER PROPERTY SqlDumperDumpPath = ' C:\temp\ '; ALTER SERVER CONFIGURATION Set FAILOVER CLUSTER PROPERTY SqlDumperDumpFlags = 296; |
También puede usar scripts de PowerShell. Por ejemplo, para una instancia con nombre SQL2017A:
Get-ClusterResource-name "SQL Server (SQL2017AG)" | Set-ClusterParameter-name "SqlDumperDumpPath"-Value "C:\temp" Get-ClusterResource-name "SQL Server (SQL2017AG)" | Set-ClusterParameter-name "SqlDumperDumpFlags": valor 296 Get-ClusterResource-name "SQL Server (SQL2017AG)" | Set-ClusterParameter-name "SqlDumperDumpTimeOut": valor 0 |
Para validar que se ha aplicado la configuración, puede ejecutar este comando de PowerShell:
Get-ClusterResource-name "SQL Server (SQL2017AG)" | Get-ClusterParameter
Para SQL Server 2008/2008 R2 o Windows 2012 y versiones anteriores
Para configurar las propiedades de la utilidad SQLDumper. exe para la conmutación por error de clúster, siga estos pasos:
-
Haga clic en Inicio y en Ejecutar, escriba cmd y, por último, haga clic en Aceptar.
-
Para cada propiedad, escriba el comando correspondiente en el símbolo del sistema y, a continuación, presione ENTRAR:
-
La propiedad SqlDumperDumpFlags Para establecer la propiedad SqlDumperDumpFlags para un tipo específico de archivo de volcado, escriba el comando correspondiente en el símbolo del sistema y, a continuación, presione ENTRAR:
-
Archivo de volcado completo de todos los subprocesos
-
Instancia predeterminada
recurso de clúster "SQL Server"/priv SqlDumperDumpFlags = 0x01100
-
Instancia con nombre
recurso de clúster "SQL Server (INSTANCE1)"/priv SqlDumperDumpFlags = 0x01100
-
-
Archivo de volcado de todos los subprocesos
-
Instancia predeterminada
recurso de clúster "SQL Server"/priv SqlDumperDumpFlags = 0x0120
-
Instancia con nombre
recurso de clúster "SQL Server (INSTANCE1)"/priv SqlDumperDumpFlags = 0x0120
-
-
Archivo de volcado de todos los subprocesos filtrados
-
Instancia predeterminada
recurso de clúster "SQL Server"/priv SqlDumperDumpFlags = 0x8100
-
Instancia con nombre
recurso de clúster "SQL Server (INSTANCE1)"/priv SqlDumperDumpFlags = 0x8100
-
-
-
La propiedad SqlDumperDumpPath recurso de clúster "SQL Server"/priv SqlDumperDumpPath = directoryPathNote directoryPath es un marcador de posición para el directorio en el que se generará el archivo de volcado y debe especificarse entre comillas ("").
-
La propiedad SqlDumperDumpTimeOut recurso de clúster "SQL Server"/priv SqlDumperDumpTimeOut = timeoutNotatimeout es un marcador de posición para el tiempo de espera en milisegundos (MS). El tiempo que la utilidad tarda en generar un archivo de volcado de un proceso de SQL Server depende de la configuración del equipo. En el caso de un equipo con mucha memoria, el tiempo puede ser importante. Para obtener una estimación del tiempo que tarda el proceso, use la utilidad SQLDumper. exe para generar manualmente un archivo de volcado. Los valores válidos para la propiedad SqlDumperDumpTimeOut son de 10.000 MS a MAXDWORD. MAXDWORD representa el valor más alto del intervalo del tipo de datos DWORD (4294967295).
-
Para comprobar que la configuración se ha habilitado, puede ejecutar el siguiente comando: cluster resource "SQL Server" /priv " Para quitar las propiedades de la utilidad SQLDumper. exe para la conmutación por error de clúster, siga estos pasos:
-
Haga clic en Inicio y en Ejecutar, escriba cmd y, por último, haga clic en Aceptar.
-
Para una propiedad específica, escriba el comando correspondiente en el símbolo del sistema y, a continuación, presione ENTRAR:
-
La propiedad SqlDumperDumpFlags
-
Instancia predeterminada recurso de clúster "SQL Server"/priv: SqlDumperDumpFlags/UseDefault
-
Instancia con nombre recurso de clúster "SQL Server (INSTANCE1)"/priv: SqlDumperDumpFlags/UseDefault
-
-
La propiedad SqlDumperDumpPath
-
Instancia predeterminada recurso de clúster "SQL Server"/priv: SqlDumperDumpPath/UseDefault
-
Instancia con nombre recurso de clúster "SQL Server (INSTANCE1)"/priv: SqlDumperDumpPath/UseDefault
-
-
La propiedad SqlDumperDumpTimeOut
-
Instancia predeterminada recurso de clúster "SQL Server"/priv: SqlDumperDumpTimeOut/UseDefault
-
Instancia con nombre recurso de clúster "SQL Server (INSTANCE1)"/priv: SqlDumperDumpTimeOut/UseDefault
-
-
Cómo usar DBCC STACKDUMP
Los DBCC STACKDUMP comando puede ayudarle a crear un volcado de memoria en el directorio de registro de la instalación de la instancia de SQL Server. El comando creará de forma predeterminada un minivolcado con todos los subprocesos con un tamaño limitado y es adecuado para reflejar el estado del proceso de SQL Server. Simplemente ejecute el siguiente comando en un cliente de SQL Server:
DBCC STACKDUMP
Para habilitar este método para crear un volcado filtrado, active los indicadores de seguimiento 2551 con el siguiente comando:
dbcc traceon(2551, -1)
go
dbcc stackdump
Para crear un volcado completo, use la marca de seguimiento 2544.
Nota después de obtener el archivo de volcado, debe deshabilitar la marca de seguimiento con el siguiente comando para evitar que actualice sin darse cuenta todos los minivolcados de autodiagnóstico de SQL Server a volcados más grandes:
DBCC TRACEOFF (TraceNumber, -1);
GO
Donde tracenumber es la marca de seguimiento que ha habilitado anteriormente, como 2551 o 2544.
Si no está seguro de qué marca de seguimiento permanece activa, puede ejecutar:
DBCC TRACESTATUS(-1)
Un conjunto de resultados vacío indica que no hay traceflag activo. Por el contrario, si 2551 todavía está activo, vería:
Sesión global de estado de TraceFlag
--------- ------ ------ -------
2551 1 1 0
Nota: El TraceFlags habilitado por DBCC TRACEon se restablece (se quita) después de que se reinicie el servicio.
Cómo usar un script de PowerShell para generar un archivo de volcado con SQLDumper. exe
-
Guarde el código siguiente como un archivo PS1, por ejemplo, SQLDumpHelper. PS1:
-
Ejecútelo desde el símbolo del sistemacomo administrador con el siguiente comando: Powershell.exe -File SQLDumpHelper.ps1
-
O ejecútelo desde la consola de Windows PowerShell y ejecútelocomo administrador con el siguiente comando: .\SQLDumpHelper.ps1
Nota Si nunca ha ejecutado scripts de PowerShell en su sistema, es posible que reciba el siguiente mensaje de error:
Archivo... SQLDumpHelper. PS1 no se puede cargar porque la ejecución de scripts está deshabilitada en este sistema.
Debe habilitar la posibilidad de ejecutarlas siguiendo estos pasos:
-
Inicie la consola de Windows PowerShell con la opción "ejecutar como administrador". Solo los miembros del grupo administradores del equipo pueden cambiar la Directiva de ejecución.
-
Habilite la ejecución de scripts sin firmar con el siguiente comando: Set-ExecutionPolicy RemoteSigned
Nota Esto le permitirá ejecutar scripts sin firmar que cree en el equipo local y las secuencias de comandos firmadas desde Internet.
$isInt = $false $isIntValDcnt = $false $isIntValDelay = $false $SqlPidInt = 0 $NumFoler = "" $OneThruFour = "" $SqlDumpTypeSelection = "" $SSASDumpTypeSelection = "" $SSISDumpTypeSelection = "" $SQLNumfolder = 0 $SQLDumperDir = "" $OutputFolder = "" $DumpType = "0x0120" $ValidPid $SharedFolderFound = $false $YesNo = "" $ProductNumber = "" $ProductStr = ""
Host de escritura "" Write-host "' * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Host de escritura "este script le ayuda a generar uno o varios volcados de memoria de SQL Server" "Write-host" le presenta opciones sobre: ' -proceso de SQL Server de destino (si hay más de uno) -tipo de volcado de memoria -recuento y intervalo de tiempo (si hay varios volcados de memoria) Puede interrumpir este script con CTRL + C Write-host "* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
#check para derechos de administrador #debugging herramientas como SQLDumper. exe requieren privilegios de administrador para generar un volcado de memoria
Si (-not ([Security. principal. WindowsPrincipal] [Security. principal. WindowsIdentity]:: GetCurrent ()). IsInRole ([Security. principal. WindowsBuiltInRole]:: administrador)) { Aviso de escritura se necesitan derechos de administrador para generar un volcado de memoria. ' ¿quieres volver a ejecutar este script como administrador! " #break }
#what producto le gustaría generar un volcado de memoria while (($ProductNumber-ne "1") y ($ProductNumber-ne "2")-and ($ProductNumber-ne "3") and ($ProductNumber-ne "4")-and ($ProductNumber-ne "5")) { Write-host "¿en qué producto deseas generar un volcado de memoria?", amarillo ForegroundColor Servidor SQL Server "1" de escritura Host de escritura "2) SSAS (Analysis Services)" Write-host "3) SSIS (servicios de integración)" Write-host "4) SSRS (Reporting Services)" Agente SQL Server de host de escritura "5)" Host de escritura "" $ProductNumber = Read-host "Enter 1-5>"
Si (($ProductNumber-ne "1") y ($ProductNumber-ne "2")-and ($ProductNumber-ne "3") and ($ProductNumber-ne "4")-and ($ProductNumber-ne "5")) { Host de escritura "" Escriba un número válido de la lista que figura más arriba. Host de escritura "" Inicio-suspensión-milisegundos 300 } }
Si ($ProductNumber-EQ "1") { $SqlTaskList = TaskList/SVC/FI "ImageName EQ sqlservr *"/FO CSV | ConvertFrom-CSV $ProductStr = "SQL Server" } elseif ($ProductNumber-EQ "2") { $SqlTaskList = TaskList/SVC/FI "ImageName EQ msmdsrv *"/FO CSV | ConvertFrom-CSV $ProductStr = "SSAS (Analysis Services)" } elseif ($ProductNumber-EQ "3") { $SqlTaskList = TaskList/SVC/FI "ImageName EQ msdtssrvr *"/FO CSV | ConvertFrom-CSV $ProductStr = "SSIS (servicios de integración)" } elseif ($ProductNumber-EQ "4") { $SqlTaskList = TaskList/SVC/FI "ImageName EQ reportingservicesservice *"/FO CSV | ConvertFrom-CSV $ProductStr = "SSRS (Reporting Services)" } elseif ($ProductNumber-EQ "5") { $SqlTaskList = TaskList/SVC/FI "ImageName EQ sqlagent *"/FO CSV | ConvertFrom-CSV $ProductStr = "Agente SQL Server" }
Si ($SqlTaskList. Count-EQ 0) { Write-host "hay curerntly no hay instancias en ejecución de $ProductStr. Saliendo... "-ForegroundColor Green Inter }
#if varias instancias de SQL Server, consiga que el usuario escriba PID para SQL Server deseado Si ($SqlTaskList. Count-gt 1) { "Write-host" se encontró más de una instancia de $ProductStr.
$SqlTaskList | Select-Object PID, "nombre de imagen", servicios | Fuera del host
#check entrada y asegúrese de que es un entero válido while (($isInt-EQ $false)-o ($ValidPid-EQ $false)) { "Escriba el PID para el servicio SQL deseado de la lista"-ForegroundColor Yellow $SqlPidStr = ">" de lectura-host Inicie $SqlPidInt = [Convert]:: ToInt32 ($SqlPidStr) $isInt = $true }
catch [FormatException] { "El valor introducido para el PID", $SqlPidStr, "" no es un entero " } #validate este PID está en la lista detectada para ($i = 0; $i-lt $SqlTaskList. Count; $i + +) { if ($SqlPidInt-EQ [int] $SqlTaskList. PID [$i]) { $ValidPid = $true Inter } más { $ValidPid = $false } } }
Host de escritura "con PID = $SqlPidInt para generar un volcado de memoria de $ProductStr"-ForegroundColor Green Host de escritura "" } else #if solo un SQL Server/SSAS en el cuadro, vaya aquí { $SqlTaskList | Select-Object PID, "nombre de imagen", servicios | Fuera del host $SqlPidInt = [Convert]:: ToInt32 ($SqlTaskList. PID) El host de escritura "con PID =", $SqlPidInt, "para generar un volcado de memoria de $ProductStr"-ForegroundColor Green Host de escritura "" }
tipo de #dump
Si ($ProductNumber-EQ "1") #SQL volcado de memoria del servidor { #ask qué tipo de volcado de memoria de SQL Server while (($SqlDumpTypeSelection-ne "1") y ($SqlDumpTypeSelection-ne "2") and ($SqlDumpTypeSelection-ne "3") and ($SqlDumpTypeSelection-ne "4")) { Escriba "¿Qué tipo de volcado de memoria desea generar?"-ForegroundColor Yellow Minivolcado "1" de host de escritura " Minivolcado de escritura de host "2" con memoria de referencia "-NoNewLine; "Write-host" (recomendado) " Volcado filtrado de escritura "3"-NoNewline; "Write-host" (no recomendado) "-ForegroundColor rojo Volcado completo del host de escritura "4"-NoNewline; Host de escritura "(no usar en sistemas de producción)" -Rojo ForegroundColor Host de escritura "" $SqlDumpTypeSelection = Read-host "Enter 1-4>"
Si (($SqlDumpTypeSelection-ne "1") and ($SqlDumpTypeSelection-ne "2") and ($SqlDumpTypeSelection-ne "3") and ($SqlDumpTypeSelection-ne "4")) { Host de escritura "" Escriba "ingrese un tipo válido de volcado de memoria". Host de escritura "" Inicio-suspensión-milisegundos 300 } }
Host de escritura ""
cambiar ($SqlDumpTypeSelection) { "1" {$DumpType = "0x0120"; Break} "2" {$DumpType = "0x0128"; Break} "3" {$DumpType = "0x8100"; Break} "4" {$DumpType = "0x01100"; Break} valor predeterminado {"0x0120"; Break}
}
} elseif ($ProductNumber-EQ "2") #SSAS dump {
#ask qué tipo de volcado de memoria de SSAS while (($SSASDumpTypeSelection-ne "1") y ($SSASDumpTypeSelection-ne "2")) { Escriba "¿Qué tipo de volcado de memoria desea generar?"-ForegroundColor Yellow Minivolcado "1" de host de escritura " Volcado completo del host de escritura "2"-NoNewline; Host de escritura "(no usar en sistemas de producción)" -Rojo ForegroundColor Host de escritura "" $SSASDumpTypeSelection = Read-host "Enter 1-2>"
Si (($SSASDumpTypeSelection-ne "1") y ($SSASDumpTypeSelection-ne "2")) { Host de escritura "" Escriba "ingrese un tipo válido de volcado de memoria". Host de escritura "" Inicio-suspensión-milisegundos 300 } }
Host de escritura ""
cambiar ($SSASDumpTypeSelection) { "1" {$DumpType = "0X0"; Break} "2" {$DumpType = "0x34"; Break} valor predeterminado {"0x0120"; Break}
} }
elseif ($ProductNumber-EQ "3"-o $ProductNumber-EQ "4"-o $ProductNumber-EQ "5") #SSIS volcado de/SSRS/SQL Agent {
#ask qué tipo de volcado de memoria de SSIS while (($SSISDumpTypeSelection-ne "1") y ($SSISDumpTypeSelection-ne "2")) { Escriba "¿Qué tipo de volcado de memoria desea generar?"-ForegroundColor Yellow Minivolcado "1" de host de escritura " Volcado completo del host de escritura "2" Host de escritura "" $SSISDumpTypeSelection = Read-host "Enter 1-2>"
Si (($SSISDumpTypeSelection-ne "1") y ($SSISDumpTypeSelection-ne "2")) { Host de escritura "" Escriba "ingrese un tipo válido de volcado de memoria". Host de escritura "" Inicio-suspensión-milisegundos 300 } }
Host de escritura ""
cambiar ($SSISDumpTypeSelection) { "1" {$DumpType = "0X0"; Break} "2" {$DumpType = "0x34"; Break} valor predeterminado {"0x0120"; Break}
} }
# SQLDumper. exe PID 0 0x0128 0 c:\temp #output carpeta while ($OutputFolder-EQ "" o! ( Ruta de acceso de prueba: ruta $OutputFolder)) { Host de escritura "" ¿Dónde se encuentra el host de escritura ", ¿dónde se almacenó el volcado de memoria (carpeta de salida)?"-ForegroundColor Yellow $OutputFolder = Read-host "Escriba una carpeta de salida sin comillas (por ejemplo, C:\MyTempFolder o C:\Mis carpeta)" Si ($OutputFolder-EQ "" o! ( Ruta de acceso de prueba: ruta $OutputFolder)) { El host de escritura "" "$OutputFolder" "no es una carpeta válida. Escribe una ubicación de carpeta válida "-ForegroundColor Yellow } }
#find la versión más alta de SQLDumper. exe en el equipo $NumFolder = dir "C:\Archivos de Programa\microsoft SQL server\1 *" | Select-Object @ {name = "DirNameInt"; Expression = {[int] ($ _. Nombre)}}, nombre, modo | Modo de objeto Where: coincidencia de "da *" | DirNameInt de objeto de ordenación: descendente
para ($j = 0;($j-lt $NumFolder. Count); $j + +) { $SQLNumfolder = $NumFolder. DirNameInt [$j] #start con el valor más alto de los nombres de carpeta ordenados-última versión de dump $SQLDumperDir = "C:\Archivos de Programa\microsoft SQL Server \" + $SQLNumfolder. ToString () + "\Shared\" $TestPathDumperDir = $SQLDumperDir + "SQLDumper. exe" $TestPathResult = Test-path-path $SQLDumperDir Si ($TestPathResult-EQ $true) { Inter } }
#build el comando SQLDumper. exe; por ejemplo, SQLDumper. exe 1096 0 0x0128 0 c:\temp\)
$cmd = "$ ([CHAR] 34)" + $SQLDumperDir + "SQLDumper. exe $ ([CHAR] 34)" $arglist = $SqlPidInt. ToString () + "0" + $DumpType + "$0 ([CHAR] 34)" + $OutputFolder + "$ ([CHAR] 34)" Comando "write-host" para la generación de volcado: ", $cmd, $arglist-ForegroundColor Green
#do-es una sección de volcados múltiples Host de escritura "" Host de escritura "esta utilidad puede generar varios volcados de memoria en un intervalo determinado" ¿Deseas recopilar los volcados de memoria de escritura? "-ForegroundColor Yellow
entrada de #validate Y/N while (($YesNo-ne "y") and ($YesNo-ne "n")) { $YesNo = Read-host "escriba Y o N>"
Si (($YesNo-EQ "y")-or ($YesNo-EQ "n")) { Inter } más { Escritura de host "no válida" Y "o" N " } }
#get información sobre cuántos volcados y en qué intervalo Si ($YesNo-EQ "y") { while (($isIntValDcnt-EQ $false)) { Host de escritura "¿cuántos volcados deseas generar para este SQL Server?"-ForegroundColor Yellow $DumpCountStr = ">" de lectura-host Inicie $DumpCountInt = [Convert]:: ToInt32 ($DumpCountStr) $isIntValDcnt = $true }
catch [FormatException] { "El valor introducido para el recuento de volcados", $DumpCountStr, "" no es un entero " } }
while (($isIntValDelay-EQ $false)) { ¿Con qué frecuencia (en segundos) deseas generar los volcados de memoria? "-ForegroundColor Yellow $DelayIntervalStr = ">" de lectura-host Inicie $DelayIntervalInt = [Convert]:: ToInt32 ($DelayIntervalStr) $isIntValDelay = $true }
catch [FormatException] { "Write-host" el valor introducido para la frecuencia (en segundos) ' ", $DelayIntervalStr," ' no es un entero " } }
El host de escritura "generando volcados de memoria $DumpCountInt en un intervalo de $DelayIntervalStr segundos", ForegroundColor verde
#loop para generar varios volcados $cntr = 0 while ($true) { Start-Process-Rutadeaccesodearchivo $cmd-wait-Verb runas-ArgumentList $arglist $cntr + +
El host de escritura "ha generado (s) volcado de memoria $cntr."-verde ForegroundColor
Si ($cntr-GE $DumpCountInt) { Inter } Inicio-suspensión-S $DelayIntervalInt }
#print qué archivos existen en la carpeta de salida Host de escritura "" El host de escritura "aquí están todos los volcados de memoria en la carpeta de salida ' $OutputFolder '"-verde ForegroundColor $MemoryDumps = $OutputFolder + "\SQLDmpr *" Get-ChildItem-path $MemoryDumps
Host de escritura "" Proceso completo de host de escritura }
más #produce solo un volcado { Start-Process-Rutadeaccesodearchivo $cmd-wait-Verb runas-ArgumentList $arglist
#print qué archivos existen en la carpeta de salida Host de escritura "" El host de escritura "aquí están todos los volcados de memoria en la carpeta de salida ' $OutputFolder '"-verde ForegroundColor $MemoryDumps = $OutputFolder + "\SQLDmpr *" Get-ChildItem-path $MemoryDumps
Host de escritura "" Proceso completo de host de escritura }
Host de escritura "para los errores y el estado de finalización, revise SQLDUMPER_ERRORLOG. log creado por SQLDumper. exe en la carpeta de salida ' $OutputFolder '. ' O si SQLDumper. exe no pudo encontrar la carpeta desde la que está ejecutando esta secuencia de comandos