Paramétrage et optimisation des performances (recherche de texte intégral)

Mis à jour : 14 avril 2006

Les performances de l'indexation de texte intégral et les requêtes de texte intégral sont influencées par les ressources matérielles telles que la mémoire, la vitesse du disque et de l'UC.

Performances de l'indexation de texte intégral

La cause principale d'une baisse des performances de l'indexation de texte intégral est les limites liées aux ressources matérielles :

  • Si l'utilisation de l'UC par le service MSFTESQL et SQL Server approche des 100 pour cent, le processeur est le goulet d'étranglement.
  • Si la longueur moyenne de la file d'attente du disque est plus de deux fois supérieure au nombre de têtes de disque, le disque est engorgé. La première solution consiste à créer des catalogues de texte intégral distincts des fichiers et des journaux de la base de données SQL Server. Placez les journaux, les fichiers de base de données et les catalogues de texte intégral sur des disques distincts. L'achat de disques plus rapides et l'utilisation de RAID peuvent également contribuer à l'amélioration des performances d'indexation.
  • En cas de manque de mémoire physique (limite de 3 Go) et si le message de pause du service est consigné dans le fichier journal de l'analyse, la mémoire est engorgée. Pour plus d'informations sur la résolution de ce problème, consultez Exécution suspendue du service du moteur de texte intégral Microsoft pour SQL Server (MSFTESQL). Le service MSFTESQL ne prend pas en charge AWE. L'ajout de plus de 4 Go de mémoire n'aide que SQL Server.

En l'absence de goulet d'étranglement matériel sur le système, vous pouvez optimiser le système pour maximiser la capacité matérielle. S'il n'y a aucun goulet d'étranglement matériel, les performances d'indexation de la recherche de texte intégral dans Microsoft SQL Server 2005 dépendent essentiellement des éléments suivants :

  • Durée de création des lots de texte intégral par SQL Server.
  • Rapidité d'utilisation de ces lots par le service MSFTESQL.

L'interaction entre SQL Server et le service MSFTESQL doit être paramétrée pour obtenir des performances optimales. Si SQL Server produit davantage de lots que le service MSFTESQL ne peut en utiliser, le service suspend son exécution et génère un message du journal d'analyse pour indiquer qu'il est en état de pause. Pour plus d'informations sur la résolution de ce problème, consultez Exécution suspendue du service du moteur de texte intégral Microsoft pour SQL Server (MSFTESQL).

D'un autre côté, si SQL Server ne produit pas assez de lots de texte intégral pour maintenir le service MSFTESQL occupé, le service est inactif. Cet état n'est pas optimal. Il s'agit en fait de la raison la plus courante d'une exécution lente de l'indexation. Pour garantir une occupation optimale du service MSFTESQL, vous devez suivre et paramétrer les compteurs suivants :

  • Compteur des lots en cours : Microsoft Démon du filtre du moteur de texte intégral (MSFTELFD)
    Ce compteur doit être l'équivalent ou le double du nombre d'UC du système. Les valeurs 0, 1 ou 2 avec une faible utilisation d'UC indiquent que SQL Server ne fonctionne pas correctement. Par exemple, si vous avez un ordinateur quadriprocesseur, ce nombre doit être compris entre 4 et 8.
  • Compteur des lots prêts en file d'attente : MSFTESQL (service)

La valeur doit être proche de 10 fois le nombre de la plage d'analyse. Pour déterminer le nombre de plages utilisées pour indexer la table, exécutez une requête à partir de sys.dm_fts_population_ranges.

Si le compteur est bas, vous pouvez l'améliorer comme suit :

  • Assurez-vous que la table possède une plage multi-analyse. Pour vérifier, interrogez sys.dm_fts_population_ranges. Dans l'idéal, le nombre de la plage d'analyse doit être le double du nombre d'UC. La plage d'analyse est limitée par le nombre de lignes dans la table, le nombre d'UC et l'option de configuration de laplage d'analyse de texte intégral maximum. Vous devez redémarrer l'opération d'analyse pour que l'option soit prise en compte.
    ms142560.note(fr-fr,SQL.90).gifRemarque :
    Cela ne s'applique qu'à une analyse complète.
  • Vérifiez si la table de base a un index en clusters. Utilisez un type de données entier pour la première colonne de l'index en clusters. Évitez d'utiliser les GUID dans la première colonne de l'index en clusters. Une analyse sur plusieurs plages d'un index en clusters peut produire la vitesse d'analyse la plus élevée.
  • Mettez à jour les statistiques de la table de base à l'aide de l'instruction UPDATE STATISTICS. Le plus important est de mettre à jour les statistiques sur l'index en clusters ou la clé de texte intégral pour une analyse complète. De cette manière, une analyse sur plusieurs plages peut générer les partitions adéquates sur la table.
  • Créez un index secondaire sur une colonne d'horodatage si vous souhaitez améliorer les performances du remplissage incrémentiel.
ms142560.note(fr-fr,SQL.90).gifRemarque :
Contrairement à une analyse complète, le remplissage du suivi des modifications automatique, incrémentiel ou manuel n'a pas pour objectif de maximiser les ressources matérielles en vue d'obtenir une vitesse supérieure. Par conséquent, ces suggestions de paramétrage peuvent ne pas améliorer les performances pour l'indexation de texte intégral.

Recommandations pour l'augmentation des performances de la requête de texte intégral

La liste suivante comprend des recommandations destinées à augmenter les performances de la requête de texte intégral :

  • Défragmentez l'index de la table de base à l'aide de ALTER INDEX REORGANIZE.
  • Réorganisez le catalogue de texte intégral à l'aide de ALTER FULLTEXT CATALOG REORGANIZE. Assurez-vous d'effectuer ces opérations avant de tester les performances car l'exécution de cette instruction entraîne une fusion principale des index de texte intégral dans ce catalogue.
  • Limitez le choix de vos colonnes clés de texte intégral à une petite colonne. Même si une colonne de 900 octets est prise en charge, il n'est pas recommandé de créer un index de texte intégral qui utilise une colonne clé de cette taille.
  • Regroupez plusieurs prédicats CONTAINS dans un seul prédicat CONTAINS. Dans SQL Server, vous pouvez spécifier une liste de colonnes dans la requête CONTAINS.
  • Utilisez CONTAINSTABLE ou FREETEXTTABLE au lieu de CONTAINS ou FREETEXT respectivement, si vous n'avez besoin que d'informations sur la clé de texte intégral ou le rang.
  • Utilisez l'option TOP_N_BY_RANK de la syntaxe FREETEXTTABLE et CONTAINSTABLE pour limiter les résultats et augmenter les performances. Utilisez cette option si vous n'êtes pas intéressé par les correspondances possibles.
  • Vérifiez le plan de requêtes de texte intégral pour vous assurer que le plan de jointure adéquat a été sélectionné. Utilisez un indicateur de jointure ou un indicateur de requête si nécessaire. Si un paramètre est utilisé dans la requête de texte intégral, la valeur initiale du paramètre détermine le plan de requête. Vous pouvez utiliser l'indicateur de requête OPTIMIZE FOR pour forcer la requête à compiler avec la valeur souhaitée. Il est ainsi possible d'obtenir un plan de requête déterministe et de meilleures performances.

Voir aussi

Concepts

Administration de la recherche de texte intégral

Aide et Informations

Assistance sur SQL Server 2005

Historique des modifications

Version Historique

14 avril 2006

Contenu modifié :
  • Révision importante des suggestions de paramétrage des performances.