Ajuste y optimización del rendimiento (búsqueda de texto)

Actualizado: 14 de abril de 2006

El rendimiento de la indización y las búsquedas de texto se ve afectado por los recursos de hardware; por ejemplo, la memoria, la velocidad de disco y la velocidad de CPU.

Rendimiento de la indización de texto

La causa principal de un rendimiento pobre de la indización de texto son los límites de los recursos de hardware:

  • Si el servicio MSFTESQL y SQL Server hacen un uso de la CPU cercano al cien por cien, la CPU constituye un cuello de botella.
  • Si la longitud media de la cola de espera del disco es más del doble del número de cabezales de disco, el cuello de botella está en el disco. La solución principal consiste en crear catálogos de texto independientes de los archivos de base de datos y los registros de SQL Server. Coloque los registros, los archivos de base de datos y los catálogos de texto en discos independientes. También puede ayudar a mejorar el rendimiento de la indización la adquisición de discos más rápidos y el uso de RAID.
  • Si la memoria física es escasa (un límite de 3 GB) y el mensaje de pausa en el servicio se mostró en el registro de rastreo, la memoria constituye el cuello de botella. Para obtener información acerca de cómo solucionar este problema, vea El servicio Motor de texto completo de Microsoft para SQL Server (MSFTESQL) se detiene temporalmente. El servicio MSFTESQL no es compatible con AWE. La adición de más de 4 GB de memoria sólo ayuda en SQL Server.

Si no se observan cuellos de botella de hardware, se puede ajustar el sistema para maximizar la capacidad del hardware. Si no hay cuellos de botella de hardware, el rendimiento de la indización de texto en Microsoft SQL Server 2005 depende sobre todo de lo siguiente:

  • El tiempo que tarda SQL Server en crear lotes de texto.
  • La rapidez con la que el servicio MSFTESQL puede consumir dichos lotes.

La interacción entre SQL Server y el servicio MSFTESQL debe ajustarse para alcanzar un rendimiento óptimo. Si SQL Server produce más lotes de los que puede consumir el servicio MSFTESQL, el servicio se detiene temporalmente y genera un mensaje de registro de rastreo para indicar este estado de pausa. Para obtener información acerca de cómo solucionar este problema, vea El servicio Motor de texto completo de Microsoft para SQL Server (MSFTESQL) se detiene temporalmente.

Si, por otro lado, SQL Server no produce suficientes lotes de texto como para mantener ocupado el servicio MSFTESQL, el servicio estará inactivo. Este estado no es el óptimo. De hecho, es la causa más frecuente de la lentitud de ejecución de la indización. Para garantizar que el servicio MSFTESQL se mantenga ocupado de forma óptima, es necesario realizar un seguimiento y ajuste de los siguientes contadores:

  • Contador de lotes en curso: Demonio filtro de motor de texto completo de Microsoft (MSFTELFD)
    Este contador debería ser igual o el doble del número de CPU en el sistema. Los valores 0, 1 ó 2 con un uso reducido de CPU indican que el rendimiento de SQL Server no es el adecuado. Por ejemplo, si tiene un equipo de cuatro vías, este número debería estar entre cuatro y ocho.
  • Lotes listos en cola: servicio MSFTESQL

El valor debe ser de casi diez veces el recuento de intervalo de rastreo. Para determinar cuántos intervalos se usan para indizar la tabla, ejecute una consulta desde sys.dm_fts_population_ranges.

Si el recuento es bajo, puede mejorarlo de las maneras siguientes:

  • Asegúrese de que la tabla tiene un intervalo de varios rastreos. Para comprobarlo, realice una consulta en sys.dm_fts_population_ranges. Lo ideal sería que el recuento de intervalo de rastreo fuera el doble que el número de CPU. El intervalo de rastreo está limitado por el número de filas de la tabla, el número de CPU y la opción de configuración max full-text crawl range. Para que se aplique esta opción, debe reiniciar la operación de rastreo.

    [!NOTA] Sólo se aplica al rastreo completo.

  • Asegúrese de que la tabla base tiene un índice agrupado. Use el tipo de datos entero para la primera columna del índice agrupado. No use GUID en la primera columna del índice agrupado. Un rastreo de varios intervalos en un índice agrupado puede producir la velocidad de rastreo más rápida.

  • Actualice las estadísticas de la tabla base mediante la instrucción UPDATE STATISTICS. Es muy importante que actualice las estadísticas del índice agrupado o la clave de texto de un rastreo completo. Así se contribuye a que un rastreo de varios intervalos genere bien las particiones de la tabla.

  • Cree un índice secundario en una columna de marca de hora si desea mejorar el rendimiento del llenado incremental.

[!NOTA] A diferencia del rastreo completo, el llenado incremental, manual y de seguimiento automático de cambios no se han diseñado para maximizar los recursos de hardware y así aumentar la velocidad. Por ello, estas sugerencias para el ajuste podrían no mejorar el rendimiento de la indización de texto.

Recomendaciones para aumentar el rendimiento de las consultas de texto

A continuación se ofrece una lista de recomendaciones que permitirán aumentar el rendimiento de las consultas de texto:

  • Desfragmente el índice de la tabla base mediante ALTER INDEX REORGANIZE.
  • Reorganice el catálogo de texto mediante ALTER FULLTEXT CATALOG REORGANIZE. Asegúrese de hacerlo antes de realizar pruebas de rendimiento porque la ejecución de esta instrucción produce una mezcla maestra de los índices de texto del catálogo.
  • Limite la selección de columnas de clave de texto a una columna pequeña. Aunque se admiten las columnas de 900 bytes, no se recomienda crear un índice de texto con una columna de clave de ese tamaño.
  • Combine varios predicados CONTAINS en un predicado CONTAINS. En SQL Server puede especificar una lista de columnas en la consulta CONTAINS.
  • Si sólo necesita información de clave de texto o de rango, utilice CONTAINSTABLE o FREETEXTTABLE en lugar de CONTAINS o FREETEXT, respectivamente.
  • Para limitar los resultados y aumentar el rendimiento, utilice la opción TOP_N_BY_RANK de la sintaxis FREETEXTTABLE y CONTAINSTABLE. Utilice esta opción si no le interesa obtener todos los resultados posibles.
  • Compruebe el plan de consultas de texto para asegurarse de que se selecciona el plan de combinaciones adecuado. Use una sugerencia de combinación o una sugerencia de consulta si es necesario. Si se usa un parámetro en la consulta de texto, el valor de primera vez del parámetro determina el plan de consultas. Puede usar la sugerencia de consulta OPTIMIZE FOR para hacer que la consulta realice la compilación con el valor deseado. Así se contribuye a lograr un plan de consultas determinista y un mejor rendimiento.

Vea también

Conceptos

Administrar la búsqueda de texto

Ayuda e información

Obtener ayuda sobre SQL Server 2005

Historial de cambios

Versión Historial

14 de abril de 2006

Contenido modificado:
  • Se han revisado las sugerencias para el ajuste de rendimiento.