He estado investigando consultas de ejecución lenta en nuestra base de datos y he llegado a la conclusión de que este es un problema clásico de clave ascendente. A medida que se insertan nuevas filas casi constantemente, y una parte determinada de SQL para extraer los datos más recientes de la base de datos se ejecuta cada 30 minutos, la primera opción de actualizar las estadísticas cada 30 minutos parecía que podría ser un desperdicio de recursos.
Entonces, busqué en Trace Flag 2389, que en principio debería ayudar, sin embargo, eso requiere que la columna Líder se marque como Ascendente, y cuando utilicé Trace Flag 2388 para verificar las estadísticas del índice (PK), veo que la columna principal es en realidad calificado como estacionario, como lo es para varios de los índices PK en otras tablas actualizadas al mismo tiempo.
No parece haber mucha orientación sobre lo que resulta en una marca de Stationary, sin embargo, encontré KB2952101 que dice que si menos del 90% de los insertos eran mayores que el valor máximo anterior, se clasificaría como Stationary. Todas nuestras inserciones son presentaciones nuevas, y la columna inicial es una columna de IDENTIDAD bigint, por lo que el 100% de las inserciones deben ser mayores que el valor máximo anterior.
Entonces, mi pregunta es ¿por qué la columna se marcaría como Estacionaria, cuando obviamente es Ascendente?
Un intento anterior de resolver este problema para algunos SQL que se ejecutan diariamente (que funcionó realmente bien) dio como resultado que se configurara un trabajo para actualizar las estadísticas de esta tabla todas las noches. La actualización no realiza un ESCANEO COMPLETO, entonces, ¿podría ser que el escaneo muestreado falte algunas veces en las nuevas filas, por lo que no siempre se muestra como ascendente?
La única otra cosa que puedo pensar que podría afectar esto es que tenemos un trabajo de archivo que se ejecuta detrás de escena eliminando filas durante una cierta edad. ¿Podría esto tener un efecto en la marca?
El servidor es SQL Server 2012 SP1.
Actualización : otro día, otra actualización de estadísticas: la misma marca estacionaria. Ha habido 28049 nuevas inserciones desde la actualización de estadísticas anterior. Cada fila tiene una marca de tiempo de cuando se insertó, por lo que si selecciono max (id) de la tabla donde la marca de tiempo <'20161102' obtengo 23313455 Del mismo modo, si hago eso para cuando las estadísticas se actualizaron hoy, obtengo 23341504.
La diferencia entre estos radica en las nuevas inserciones 28049, por lo que, como puede ver, a todas las nuevas inserciones se les dieron nuevas claves ascendentes (como se esperaba), lo que sugiere que la columna principal debe marcarse como ascendente en lugar de estacionaria.
Durante el mismo período, nuestro trabajo de archivo eliminó 213,629 filas (estamos borrando lentamente los datos antiguos). ¿Hay alguna posibilidad de que un número reducido de filas pueda contribuir a la marca estacionaria? He probado esto antes y no parecía que hubiera ninguna diferencia.
Actualización 2 : ¡Otro día, otra actualización de estadísticas, y la columna ahora está marcada como Ascendente! De acuerdo con la teoría sobre las eliminaciones que afectan esto, verifiqué el porcentaje de actualizaciones que se insertan en comparación con las eliminaciones, y ayer el 13% fueron inserciones, mientras que las inserciones de los dos días anteriores representaron aproximadamente el 12%. No creo que eso nos dé nada concluyente.
Curiosamente, una tabla relacionada que obtiene un promedio de 4 filas insertadas para cada fila insertada en esta tabla principal, y tiene sus estadísticas actualizadas al mismo tiempo, ¿tiene su columna PK IDENTIDAD como estacionaria?
Actualización 3 : durante el fin de semana tenemos más inserciones. Esta mañana, la columna principal vuelve a Estacionaria. En la última actualización de estadísticas, tuvimos 46840 inserciones y solo 34776 eliminaciones.
De nuevo, curiosamente, la tabla relacionada que mencioné anteriormente ahora tiene su columna principal marcada como Ascendente. ¿No hay documentación que pueda explicar esto?
Actualización 4 : ha pasado una semana más o menos, el trabajo de archivado ha borrado el trabajo atrasado, por lo que estamos eliminando constantemente alrededor de dos tercios del número de filas que se insertan. Las estadísticas muestran resultados mixtos en las tablas relacionadas, una muestra estacionaria y dos ascendentes, a pesar de que todas se actualizan proporcionalmente de manera similar.