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 SQL 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 Microsoft SQL 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, solo los miembros del rol fijo de 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 del rol sysadmin siguen pudiendo optimizar bases de datos, pero ahora, además, los usuarios que son miembros del rol fijo 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 del rol fijo del servidor sysadmin como los del rol fijo 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 del rol db_owner solamente 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 solamente 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 del 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 AdventureWorks2008R2 tiene una tabla Person.Person con columnas FirstName y LastName.

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

    SELECT FirstName, LastName
    FROM Person.Person
    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 AdventureWorks2008R2 -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 AdventureWorks2008R2 ya que ésta se había especificado en la línea de comandos (-D AventureWorks2008R2). TuneQuery.sql era válida en la base de datos AdventureWorks2008R2 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 AdventureWorks2008R2 –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 AdventureWorks2008R2. 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> al script TuneQuery.sql del modo siguiente:

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

El Asistente para la optimización de motor de base de datos ve en primer lugar la instrucción USE AdventureWorks2008R2 y utiliza esa información para establecer que la base de datos actual sea AdventureWorks2008R2. A continuación, cuando ve la instrucción SELECT FirstName, LastName FROM Person.Person WHERE LastName = 'Abercrombie', analiza la instrucción en AdventureWorks2008R2, ya que el contexto de la base de datos actual es AdventureWorks2008R2. 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 el script anterior mediante sqlcmd o SQL Server Management Studio, la instrucción se ejecuta en AdventureWorks2008R2, puesto que la primera instrucción USE <database> cambia el contexto de la base de datos de MyDB a AdventureWorks2008R2.

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 los 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.