sql >> Base de Datos >  >> RDS >> Sqlserver

El parámetro no funciona tan bien como codificar el valor

EDITAR RESUMEN Por una solicitud de Damien_The_Unbeliever

El objetivo es obtener la mejor o la mayor cantidad de información sobre el valor de la variable en SQL ANTES de que se cree el plan, generalmente el rastreo de parámetros hace esto. Puede haber una razón por la que el rastreo de parámetros se 'desactivó' en este caso. Sin ver una mejor representación del código real, no podemos realmente decir cuál es la solución o por qué existe el problema. Pruebe lo siguiente para obligar a las áreas afectadas a generar planes utilizando valores reales.

*VERSIÓN LARGA CON MÁS DETALLES*

¿Es este su proceso almacenado real? ¿Tiene valores predeterminados para sus parámetros? Si es así, ¿Que son?

La detección de parámetros puede ayudar, pero debe tener valores de parámetros típicos para crear bien el plan y, si no, no ayudará realmente o creará un mal plan basado en el valor de parámetro no típico. Entonces, si una variable tiene un valor predeterminado de nulo o un valor que no es un valor típico la primera vez que se ejecuta y se compila el plan, se crea un mal plan.

Si alguien más escribió este sproc, es posible que haya 'deshabilitado' intencionalmente el rastreo de parámetros con las variables locales por una razón. Las reglas de negocio pueden requerir estas estructuras variables.

El objetivo es obtener la mejor o la mayor cantidad de información sobre el valor de la variable en SQL ANTES de que se cree el plan y, en general, la detección de parámetros hace esto. Pero hay cosas que pueden hacer que afecte negativamente el rendimiento, y esa puede ser la razón por la que está 'deshabilitado'. Todavía parece que el plan se está creando con valores atípicos para los parámetros o todavía no hay suficiente información, usando o no el rastreo de parámetros.

Intente llamar a la consulta dentro del sproc con Use sp_executesql para ejecutar las consultas afectadas, obligándolo a generar un plan para esa área con las variables reales, y vea si es mejor. Esta puede ser su solución si tiene que tener este tipo de valor de parámetro irregular:cree procesos almacenados que ejecuten las partes afectadas y llámelos más tarde desde el procedimiento almacenado, después de que la variable haya recibido un valor típico.

Sin ver una mejor representación del código real, es difícil ver cuál es el problema. Esperemos que esta información ayude -