Pregunta

Tengo una producción de "Microsoft SQL Server 2012 (SP1) - 11.0.3128.0 (X64)" que está mostrando extraño búfer de página y la esperanza de vida (PLE) los síntomas.

Estoy corriendo esta cada minuto en mi servidor (para el seguimiento de este tema):

SELECT @ple = CAST([cntr_value] AS VARCHAR(20))
FROM sys.dm_os_performance_counters
WHERE [object_name] LIKE '%Manager%'
AND [counter_name] = 'Page life expectancy'

SELECT @usedBufferPages = CAST(COUNT(*) /128 AS VARCHAR(20)) 
FROM sys.dm_os_buffer_descriptors

DECLARE @StartDate VARCHAR(8) = Convert(VARCHAR(8), GETDATE(), 14)
RAISERROR ('%s. PLE at %s and Used Buffers at %s at %s ', 0, 
            1,@runCountString ,@ple, @usedBufferPages, @StartDate) WITH NOWAIT  

Este es un ejemplo de la salida:

16. PLE at 858 and Used Buffers at 7290 at 09:51:42 
17. PLE at 918 and Used Buffers at 7342 at 09:52:42 
18. PLE at 978 and Used Buffers at 7408 at 09:53:43 
19. PLE at 1039 and Used Buffers at 7547 at 09:54:43 
20. PLE at 1100 and Used Buffers at 7697 at 09:55:44 
21. PLE at 1160 and Used Buffers at 7901 at 09:56:45 
22. PLE at 1221 and Used Buffers at 7961 at 09:57:46 
23. PLE at 1282 and Used Buffers at 8012 at 09:58:46 
24. PLE at 11 and Used Buffers at 313 at 09:59:46 
25. PLE at 31 and Used Buffers at 966 at 10:00:46 
26. PLE at 90 and Used Buffers at 1580 at 10:01:47 
27. PLE at 151 and Used Buffers at 3072 at 10:02:47 
28. PLE at 211 and Used Buffers at 3152 at 10:03:47 
29. PLE at 271 and Used Buffers at 3729 at 10:04:47  

En el punto #24 SQL Server informes de los PLE va de 1,282 a 11.SQL Server también informa de que los búferes de ir de 8,012 a 313.

Primero me miró de mala ejecución de consultas, y me encontré con un fijo de unos pocos (no tuvo ningún efecto sobre el problema).Pero, yo soy de no encontrar ningún problema consultas que se correlacionan con la de veces que he PLE/Búfer de problemas.También, si fue una mala ejecución de la consulta, entonces yo creo que los Búferes sería completo, de que la consulta de datos no vacío/falta/produjo un error.

El próximo pensé que la Máquina Virtual se ha de conseguir su memoria restringida cuando esto sucedió.Pero le he pedido a mi Sistema de Admin y me asegura que la memoria no es dinámica o comparte de ninguna manera.(¿Qué es asignado, se pone, todo el tiempo.) También, puedo ejecutar esta secuencia de comandos cada 10 minutos y cuando el PLE informes de menos de 50:

  SELECT * FROM sys.dm_os_sys_memory

Y se informa de los mismos o valores similares cuando el PLE/Buffers son altos y cuando están bajas.La integridad, aquí es un ejemplo de los valores antes y después de la #24:

total_physical_memory_kb    available_physical_memory_kb    total_page_file_kb  available_page_file_kb  system_cache_kb kernel_paged_pool_kb    kernel_nonpaged_pool_kb   system_high_memory_signal_state   system_low_memory_signal_state   system_memory_state_desc
20970996                    4758672                         24378868            7929404                 4844160         686076                  182752                    1                                 0                                Available physical memory is high
20970996                    4743468                         24378868            7892632                 4845000         686580                  182688                    1                                 0                                Available physical memory is high

He comprobado que el Sistema de Salud de la Sesión y no muestra nada relacionado.(Todo lo que tiene son la suplantación de falures, y sus tiempos no se correlacionan con los tiempos de la PLE/Buffers mostrar problemas.

He seguido con qué frecuencia ocurre esto, no puedo ver a un patrón o conectarlo a trabajos o actividades programadas.

Aquí es un gráfico que muestra los PLE y los Búferes de más de 21 horas:

PLE and Buffers Over 21 Hours

Así que estoy confundido.Creo que el meollo de la cuestión es los búferes no la PLE.(Creo que el PLE es la obtención de un reporte falso de baja debido a que todos los buffers son de alguna manera se ha ido.)

Pero no puedo pensar en alguna manera de que esto podría suceder.O qué hacer a continuación.

Me encantaría asesoramiento sobre otras cosas para revisar o sugerencias de lo que este asunto podría ser.

Actualizaciones a partir de las preguntas en los comentarios:

Así, la cantidad de memoria que es el servidor dado? La máquina virtual tiene 20 GB de memoria.
¿Qué es la memoria máxima del servidor?

name                    value   value_in_use  description
max server memory (MB)  13000   13000         Maximum size of server memory (MB)
min server memory (MB)  0       16            Minimum size of server memory (MB)

NOTA:He hecho un poco de lectura sobre esto justo ahora, y parece que estos ajustes están mal para mi servidor.

¿Qué tan grande es la base de datos? Hay dos bases de datos de transacciones que se ejecutan en este servidor (estoy en el proceso de obtención de los servidores para aislarlos.) Sus tamaños son 383 GB y 378 GB.

¿Qué otras aplicaciones y servicios que se ejecutan en el servidor? Este servidor contiene los datos de mi aplicación.No hay otras cosas que le llegan.(Tengo una replica Operativa de Almacén de Datos para los informes y tal.

¿Qué es la tecnología de máquina virtual VM Ware.
Es esta máquina virtual que se ejecuta en un host que sólo los hosts de Vm con similar asignación de recursos? Tenemos muchos VMs en nuestra empresa.Todos de tamaño variable.Este es uno de los más grandes, aunque.

Usted puede confirmar lo que su Sistema de Administración es decirle a usted acerca de la asignación de memoria sin tener que creer en él? No puedo.No tengo acceso a esas herramientas.

(En mi experiencia, los Administradores de sistemas que va a decir un montón de cosas para pasar la pelota de la culpa y la aplicación ni a nadie, si eso significa que no tienes que hacer nada). Estoy totalmente de entender ese sentimiento.

Que el patrón que ciertamente parece grave la presión de la memoria Estoy de acuerdo.Tenía la esperanza de encontrar algo para demostrar que SQL es la sensación de presión en la memoria.Por lo que puede enviar de nuevo a los Administradores de sistemas para más investigación.

El Tiempo De Espera De Las Estadísticas

WaitType               Wait_S      Resource_S  Signal_S  WaitCount  Percentage   AvgWait_S  AvgRes_S  AvgSig_S 
---------------------- ----------- ----------- --------- ---------- ------------ ---------- --------- ---------
PAGEIOLATCH_SH         16250.10    16219.14    30.96     2171649    29.59        0.0075     0.0075    0.0000   
CXPACKET               14214.03    13238.56    975.47    1187935    25.88        0.0120     0.0111    0.0008   
PAGEIOLATCH_EX         6814.59     6806.21     8.38      638725     12.41        0.0107     0.0107    0.0000   
WRITELOG               5157.42     4873.44     283.98    3588476    9.39         0.0014     0.0014    0.0001   
BACKUPIO               2569.51     2538.12     31.39     1704119    4.68         0.0015     0.0015    0.0000   
LCK_M_IX               2477.15     2477.10     0.05      113        4.51         21.9217    21.9213   0.0004   
ASYNC_IO_COMPLETION    2079.99     2079.66     0.33      836        3.79         2.4880     2.4876    0.0004   
BACKUPBUFFER           1807.75     1759.11     48.64     380189     3.29         0.0048     0.0046    0.0001   
IO_COMPLETION          986.23      985.84      0.39      116112     1.80         0.0085     0.0085    0.0000   
¿Fue útil?

Solución

Como se discutió en Este hilo SE y confirmado por el OP.

El problema es debido a un error en SQl Server 2012.Este error fue corregido en SQL Server 2012 SP1 CU4.O para ser más seguras dijo que yo recomendaría aplicar SQL Server 2012 SP2 en lugar de ir para CU4.

Según Microsoft corrección de errores de detalle

Puede experimentar rendimiento lento en SQL Server 2012.Cuando usted comprobación El Rendimiento de SQL Server herramientas de Monitor, consulte la siguiente:

•Un rápido descenso en el SQLServer:Administrador de Búfer\esperanza de vida de Página valores de contador de rendimiento.Cuando se produce este problema, el contador se cerca de 0.

Otros consejos

Su grupo de búferes sólo 13GB y sus bases de datos son 383 GB y 378 GB que se han clasificado como OLTP pequeñas de las transacciones que se ejecutan con demasiada frecuencia.

La situación anterior, si tengo que imaginar es como a continuación :

enter image description here (fuente :Google Fotos)

Usted tiene que entender cómo SQL Server almacena información :

SQL Server almacena la información en la memoria en una estructura llamada memoria caché. La información en la memoria caché puede ser de datos, las entradas de índice, compilado planes de procedimiento, y una variedad de otros tipos de información de SQL Server. Para evitar la re-creación de la información, se conserva la memoria caché de tanto tiempo como sea posible y se normalmente eliminado de la caché cuando se es demasiado viejo para ser útil, o cuando el espacio de memoria que se necesita para la nueva información.El proceso que elimina la información antigua que se llama una memoria de barrido. La memoria de barrido es una frecuente actividad, pero no es continua.

Usted está seguro experienceing la falta de memoria debido a la enorme cantidad de tamaño de base de datos y su inadecuada de grupo de búfer.Consulte - Cómo determinar ideal de memoria, por ejemplo?

Recoger esperar estadísticas y comprobar el rendimiento de los problemas que surge a partir de desperdicio de memoria de grupo de búfer

Recomendación:

Agregar más memoria a instancia de servidor y separar las dos bases de datos en diferentes máquinas virtuales con la memoria adecuada.

Hay muy poco para depurar aquí - usted necesita para añadir memoria, lógicamente dividir su base de datos a través de múltiples máquinas virtuales, o entender que el ruido tiene que ver con la limitada memoria de conducir a problemas de rendimiento y volatilidad de los PLE.Tratando de adaptarse a 800 GB de datos en 13 GB de memoria es como intentar guardar en una mochila.

Mira más cerca de las consultas que se ejecutan.El uso de la memoria solo en las bases de datos es normalmente demasiado gruesa una métrica para mejorar las cosas.Suponiendo que no puede afectar las consultas (aplicación de la caja negra), todavía vale la pena entender lo que está afectando el uso de la memoria.Por ejemplo, un proceso por lotes podría ir y usar todo el espacio de búfer en un solo golpe al consultar todos los datos en una tabla masiva.

En particular, busque cualquier índice faltante que cause escaneos de la tabla completa, ya que pueden eliminar efectivamente el caché en el servidor.

SQL Server tiene un excelente conjunto de herramientas de analizador que puede monitorearlo en tiempo real, y sospecho que verá que algo sobresale como un pulgar adolorido una vez que lo engañe.

No es que esté sugiriendo cambiar el esquema de la base de datos, pero una cosa que debe buscar es demasiado grandes campos VarChar, que realmente pueden aspirar espacio en caché en una base de datos grande.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a dba.stackexchange
scroll top