Diferencias entre el Asistente para la optimización de motor de base de datos y el Asistente para optimización de índices

Además de administrar las nuevas características de base de datos de MicrosoftSQL Server, el Asistente para la optimización de motor de base de datos también se comporta de un modo distinto al Asistente para optimización de índices de MicrosoftSQL Server 2000. Aunque ambas herramientas ofrecen una interfaz gráfica de usuario (GUI) y una interfaz de símbolo del sistema, los usuarios familiarizados con el Asistente para optimización de índices deben tener en cuenta los siguientes cambios.

Para obtener una lista completa de las nuevas características del Asistente para la optimización de motor de base de datos, vea Características del Asistente para la optimización de motor de base de datos.

Permisos necesarios para optimizar bases de datos

En SQL Server 2000, sólo los miembros de la función fija del servidor sysadmin podían utilizar el Asistente para optimización de índices para optimizar bases de datos. En SQL Server, con el Asistente para la optimización de motor de base de datos, los miembros de la función sysadmin siguen pudiendo optimizar bases de datos. Pero ahora, además, los usuarios que son miembros de la función fija de base de datos db_owner también pueden optimizar las bases de datos que posean.

[!NOTA]

La primera vez que se utiliza, el Asistente para la optimización de motor de base de datos debe ser iniciado por un usuario con permisos de administrador del sistema para inicializar la aplicación. Tras la inicialización, tanto los miembros de la función fija del servidor sysadmin como los de la función fija de base de datos db_owner pueden utilizar el Asistente para la optimización de motor de base de datos para optimizar bases de datos. No obstante, tenga en cuenta que los miembros de la función db_owner sólo pueden optimizar aquellas bases de datos que poseen. Para obtener más información, vea Inicializar el Asistente para la optimización de motor de base de datos.

Contexto de la carga de trabajo

El Asistente para optimización de índices evaluaba cada instrucción de la carga de trabajo mediante la base de datos que se iba a optimizar, sin tener en cuenta si la instrucción había sido ejecutada originalmente en el contexto de esa base de datos. El Asistente para optimización de índices sólo podía optimizar una base de datos en cada sesión de optimización. El Asistente para la optimización de motor de base de datos puede optimizar varias bases de datos en cada sesión de optimización. El Asistente para la optimización de motor de base de datos utiliza la información de la script para determinar la base de datos en la que se ejecuta la instrucción y evalúa la instrucción para esa base de datos. Las bases de datos que se van a optimizar no afectan al modo en que se evalúan las instrucciones.

Por ejemplo:

  • La base de datos AdventureWorks tiene una tabla Person.Contact con las columnas FirstName y LastName.

  • La carga de trabajo TuneQuery.sql contiene la siguiente consulta:

    SELECT FirstName, LastName
    FROM Person.Contact
    WHERE LastName = 'Abercrombie';
    GO
    
  • User1 se conecta a la base de datos MyDB de forma predeterminada.

En SQL Server 2000, User1 emitía lo siguiente desde la línea de comandos o realizaba pasos similares mediante la GUI del Asistente para optimización de índices:

Itwiz -D AdventureWorks -I TuneQuery.sql –o rec.sql –U <username> –P <password>

Este método funcionaba, puesto que cada instrucción de TuneQuery.sql se analizaba según la base de datos AdventureWorks, ya que ésta se había especificado en la línea de comandos (-D AventureWorks). TuneQuery.sql era válida en la base de datos AdventureWorks y la optimización continuaba sin problemas.

Usando el Asistente para la optimización de motor de base de datos, la sintaxis de la línea de comandos es:

dta -s Session1 –D AdventureWorks –if TuneQuery.sql –of rec.sql –U username –P password

Puesto que User1 se conecta de forma predeterminada a la base de datos MyDB, el sistema establece el contexto de la base de datos en MyDB. A continuación, la instrucción Transact-SQL se analiza según la base de datos MyDB y no AdventureWorks. La instrucción no es válida en MyDB y, por lo tanto, se pasa por alto.

¿Por qué ocurre esto? Si User1 ejecuta TuneQuery.sql mediante sqlcmd o SQL Server Management Studio sin especificar una base de datos de destino, TuneQuery.sql se ejecutaría en MyDB y se produciría un error. El Asistente para la optimización de motor de base de datos imita este mismo comportamiento.

¿Qué se debe hacer? Agregue una instrucción USE <database> a la script TuneQuery.sql del modo siguiente:

USE AdventureWorks;
GO
SELECT FirstName, LastName
FROM Person.Contact
WHERE LastName = 'Abercrombie';
GO

El Asistente para la optimización de motor de base de datos ve en primer lugar la instrucción USE AdventureWorks y utiliza esa información para establecer que la base de datos actual sea AdventureWorks. A continuación, cuando ve la instrucción SELECT FirstName, LastName FROM Person.Contact WHERE LastName = 'Abercrombie', analiza la instrucción en AdventureWorks, ya que el contexto de la base de datos actual es AdventureWorks. Esto permite que el Asistente para la optimización de motor de base de datos optimice correctamente la base de datos. Tenga en cuenta que si ejecuta la script anterior mediante sqlcmd o SQL Server Management Studio, la instrucción se ejecuta en AdventureWorks, puesto que la primera instrucción USE <database> cambia el contexto de la base de datos de MyDB a AdventureWorks.

Las instrucciones USE <database> se pueden utilizar para especificar la base de datos en la que se desea ejecutar la instrucción. En general, si cada instrucción utiliza nombres de tabla completos, esto no es necesario.

Puesto que el Asistente para la optimización de motor de base de datos intenta buscar la base de datos respectiva en la que se ejecuta cada instrucción (para imitar al entorno de ejecución), la siguiente información es vital para entender cómo trabaja este asistente con los diferentes tipos de entradas.

Archivo SQL o carga de trabajo insertada

Como ya se ha mencionado en la sección anterior, el Asistente para la optimización de motor de base de datos utiliza instrucciones USE <database> que preceden a una consulta Transact-SQL para identificar la base de datos en la que se debe ejecutar la consulta. El Asistente para la optimización de motor de base de datos mira la entrada desde la primera instrucción del archivo de script Transact-SQL. Comienza con la suposición de que la base de datos actual es la predeterminada. La presencia de instrucciones USE <database> cambia el contexto de la base de datos actual en la que se analizan las instrucciones.

Archivos de seguimiento y tablas de traza

Al ejecutar el archivo de traza, el Asistente para la optimización de motor de base de datos imita la reproducción del SQL Server Profiler. Utiliza la siguiente información de los archivos de seguimiento en el orden enumerado:

  • Si el archivo de traza tiene eventos con la columna DatabaseName llena, el Asistente para la optimización de motor de base de datos la utiliza para buscar la base de datos en la que se ha ejecutado el evento.

  • Si el archivo de traza tiene la columna DatabaseID llena, el Asistente para la optimización de motor de base de datos la utiliza para buscar la base de datos en la que se ha ejecutado el evento. Este asistente consulta el catálogo del sistema con el fin de buscar el nombre de la base de datos correspondiente a DatabaseID.

[!NOTA]

Si se ha separado, adjuntado, quitado o creado una base de datos tras la recopilación de una traza, las asignaciones de DatabaseID y DatabaseName quizás no sigan siendo iguales que cuando se creó el archivo de traza. El Asistente para la optimización de motor de base de datos no puede determinar esta información. Si ocurriera esto, debe quitar toda la columna DatabaseID de la traza para evitar que el Asistente para la optimización de motor de base de datos optimice una base de datos incorrecta.

  • Si ni DatabaseName ni DatabaseID aparecen como columnas en la traza, el Asistente para la optimización de motor de base de datos decide qué base de datos se va a utilizar para cada instrucción, al igual que hace con las scripts Transact-SQL de cada columna SPID del archivo de traza. Si la columna SPID no aparece, la determinación se toma del mismo modo que para los archivos de script Transact-SQL.

El Asistente para la optimización de motor de base de datos también utiliza la información de inicio de sesión (como en la reproducción del SQL Server Profiler) durante el análisis de cada instrucción. Las bases de datos predeterminadas del servidor pueden cambiar según los valores de la columna LoginName que aparecen en el archivo de traza.

[!NOTA]

Si un inicio de sesión presente en la traza ya no aparece en el sistema, el Asistente para la optimización de motor de base de datos lo pasa por alto y utiliza de forma predeterminada el que está realizando en ese momento el proceso de optimización. Si esto ocurre, se registra un mensaje en el registro de optimización del Asistente para la optimización de motor de base de datos.

Límites del tiempo de optimización

El Asistente para la optimización de motor de base de datos permite especificar un tiempo de optimización o establecer un tiempo ilimitado. Esta característica no estaba disponible en el Asistente para optimización de índices. Para obtener más información, vea Limitar la duración y los eventos de optimización.