Share via


Por qué no se optimizan los eventos

En este tema se muestran los motivos más frecuentes por los que los eventos no se optimizan y cómo el Asistente para la optimización de motor de base de datos elige la base de datos correcta en la que se ejecutarán los eventos de optimización.

Motivos comunes por los que no se optimizan los eventos

Suponiendo que la base de datos en la que se ejecutó originalmente el evento se ha identificado de forma correcta (consulte la siguiente sección), los eventos no se optimizan si:

  • Hacen referencia a tablas que no se han seleccionado para la optimización.

  • Hacen referencia a tablas muy pequeñas de menos de 10 páginas.

[!NOTA]

Para determinar el número de páginas de una tabla para MicrosoftSQL Server 2000, utilice la columna dpages de la tabla del sistema sysindexes. Para determinar el número de páginas de una tabla para MicrosoftSQL Server 2005 y versiones posteriores, use la columna used_page_count de la vista de catálogo sys.dm_db_partition_stats.

  • El Asistente para la optimización de motor de base de datos no tiene suficiente tiempo para optimizar la consulta en el tiempo especificado por el usuario.

  • Hacen referencia a tablas que casi han alcanzado el número máximo de índices y se ha seleccionado la opción para mantener los índices existentes. En este caso, no es posible agregar más índices a esas tablas.

  • Muchas instrucciones de lenguaje de manipulación de datos (DML) (INSERT, UPDATE y DELETE) se ejecutan en la tabla subyacente para el evento. Agregar más índices o vistas indizadas puede degradar el rendimiento de las tablas subyacentes.

  • Se han especificado las siguientes opciones de optimización:

    • El número máximo de columnas es limitado.

    • El espacio en disco especificado para el almacenamiento es demasiado pequeño, o si hay muchos índices y vistas indizadas existentes en la base de datos y se ha especificado un espacio en disco inadecuado para la optimización.

      [!NOTA]

      Puede especificar un límite de espacio en disco para las recomendaciones de optimización mediante el cuadro de diálogo Opciones avanzadas de optimización en la interfaz gráfica de usuario (GUI) del Asistente para la optimización de motor de base de datos o especificando un valor para el argumento -B cuando use la utilidad dta de la línea de comandos.

Cómo determina el Asistente para la optimización de motor de base de datos la base de datos correcta para optimizar eventos

Dependiendo del tipo de archivo de carga de trabajo de optimización que utilice y las opciones que especifique al optimizar las cargas de trabajo, el Asistente para la optimización de motor de base de datos elige la base de datos correcta en la que ejecutará los eventos de optimización, de la siguiente manera:

En archivos de carga de trabajo de optimización de scripts SQL (.sql)

  • Si especifica un nombre de base de datos con alguno de los siguientes elementos:

    • Un argumento -d para la utilidad dta de la línea de comandos

    • Un elemento DatabaseToConnect en el archivo de entrada XML

    Estas opciones establecen la base de datos predeterminada a la que el Asistente para la optimización de motor de base de datos se conecta primero cuando comienza una sesión de optimización. Después de la conexión inicial a la base de datos, el Asistente para la optimización de motor de base de datos utiliza cada instrucción USE database_name en el script para cambiar el contexto de la base de datos para las instrucciones posteriores.

  • Si no especifica explícitamente la conexión inicial de la base de datos para una sesión de optimización, el Asistente para la optimización de motor de base de datos utiliza la base de datos predeterminada definida para el inicio de sesión que especifique en el servidor cuando se produzca la optimización. Después de la conexión inicial de la base de datos, el Asistente para la optimización de motor de base de datos cambia el contexto de la base de datos para las instrucciones posteriores de la misma manera que lo hace cuando especifica explícitamente la conexión inicial. El Asistente para la optimización de motor de base de datos utiliza las instrucciones USE database_name para determinar el contexto de la base de datos.

En archivos de carga de trabajo de optimización de traza (.trc)

Cuando utiliza archivos de traza, el Asistente para la optimización de motor de base de datos elige la base de datos en la que ejecuta los eventos para cada Id. de proceso de servidor (SPID) que se ha especificado en la traza. Si no se especifica ningún SPID en la traza, el Asistente para la optimización de motor de base de datos presupone que se utilizará el mismo SPID para todos los eventos en esa traza. El Asistente para la optimización de motor de base de datos elige la base de datos para cada SPID de la siguiente forma:

  1. DatabaseName se encuentra en la traza.

    Si el campo DatabaseName está presente en el archivo de traza, el Asistente para la optimización de motor de base de datos utiliza el campo para determinar la base de datos en la que analizará el evento. El resto de información se omite. Si el campo DatabaseName no está presente, el Asistente para la optimización de motor de base de datos va al paso 2.

  2. DatabaseID se encuentra en la traza, pero DatabaseName no está presente.

Si el campo DatabaseID está presente en el archivo de traza, el Asistente para la optimización de motor de base de datos utiliza el campo para determinar la base de datos en la que analizará el evento. El campo DatabaseID se asigna al nombre de la base de datos. Sin embargo, el Asistente para la optimización de motor de base de datos no valida si los campos DatabaseID han cambiado desde que se recopiló la traza. Si no está seguro de que la asignación DatabaseID a DatabaseName esté actualizada, quite el campo DatabaseID del archivo de carga de trabajo de la traza. El resto de información se omite. Si los campos DatabaseName y DatabaseID no están presentes, el Asistente para la optimización de motor de base de datos va al paso 3.

  1. Ni DatabaseName ni DatabaseIDestá presente en la traza.

    Si tanto el campo DatabaseName como el campo DatabaseID no están presentes en la traza, el Asistente para la optimización de motor de base de datos determina la base de datos en la que se ejecuta el evento de la misma manera que lo hace para los archivos de carga de trabajo de optimización de scripts SQL. Este proceso se describe en la sección anterior, En archivos de carga de trabajo de optimización de scripts SQL (.sql).