|
Cet article a fait l'objet d'une traduction manuelle. Déplacez votre pointeur sur les phrases de l'article pour voir la version originale de ce texte.
|
Traduction
Source
|
Améliorer les performances des index de recherche en texte intégral
-
Si l'utilisation de l'UC par le processus hôte de démon de filtre (fdhost.exe) ou le processus (sqlservr.exe) 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), la mémoire est engorgée. Les limitations de mémoire physique sont possibles sur tous les systèmes, et sur les systèmes 32 bits, la pression de mémoire virtuelle peut ralentir l'indexation de texte intégral.
Remarque
À partir de SQL Server 2008, le moteur d'indexation et de recherche en texte intégral peut utiliser la mémoire AWE parce que le moteur d'indexation et de recherche en texte intégral fait partie du sqlservr.exe.
-
Durée de création des traitements de texte intégral par SQL Server. -
Rapidité d'utilisation de ces traitements par le démon de filtre.
Remarque
|
|---|
|
|
Important
|
|---|
|
|
-
Pour utiliser tous les processeurs ou les noyaux au maximum, attribuez à sp_configure ‘max full-text crawl ranges’ la valeur correspondant au nombre de processeurs présents sur le système. Pour plus d'informations sur cette option de configuration, consultez Maximum de la plage de l'analyse de texte intégral (option de configuration de serveur). -
Vérifiez si la table de base a un index cluster. Utilisez un type de données entier pour la première colonne de l'index cluster. Évitez d'utiliser les GUID dans la première colonne de l'index cluster. Un remplissage multiplage sur un index cluster peut produire la vitesse de remplissage la plus élevée. Nous recommandons que la colonne servant de clé de texte intégral corresponde à un type de données Integer. -
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 cluster ou la clé de texte intégral pour un remplissage complet. De cette manière, un remplissage sur plusieurs plages peut générer les partitions adéquates sur la table. -
Créez un index secondaire sur une colonne timestamp si vous souhaitez améliorer les performances de l'alimentation incrémentielle. -
Avant d'effectuer une alimentation complète sur un ordinateur multiprocesseur de grande capacité, nous vous recommandons de limiter temporairement la taille du pool de mémoires tampons en définissant la valeur max server memory de manière à laisser suffisamment de mémoire au processus fdhost.exe et au système d'exploitation. Pour plus d'informations, consultez « Estimation des besoins en mémoire du processus hôte de démon de filtre (fdhost.exe) », plus loin dans cette rubrique.
Utilisation de la mémoire physique
Remarque
|
|---|
|
|
-
Si la quantité de mémoire physique disponible pendant une alimentation complète est égale à zéro, le pool de mémoires tampons SQL Server consomme peut-être la plupart de la mémoire physique du système. Le processus sqlservr.exe essaie de récupérer toute la mémoire disponible pour le pool de mémoires tampons, en fonction de la limite maximale de mémoire configurée pour le serveur. Si l'allocation de max server memory est trop importante, des insuffisances de mémoire et des échecs d'allocation de la mémoire partagée peuvent se produire pour le processus fdhost.exe.
Remarque
Durant une alimentation de texte intégral sur un ordinateur multiprocesseur, il peut se produire un conflit de mémoire au niveau du pool de mémoires tampons pour fdhost.exe ou sqlservr.exe. Le manque de mémoire partagée qui en résulte provoque des nouvelles tentatives d'exécution de lots, des surexploitations de la mémoire et des vidages par le processus fdhost.exe. Vous pouvez résoudre ce problème en définissant de façon appropriée la valeur max server memory du pool de mémoires tampons SQL Server. Pour plus d'informations, consultez « Estimation des besoins en mémoire du processus hôte de démon de filtre (fdhost.exe) », plus loin dans cette rubrique. La réduction de la taille de lot utilisée pour l'indexation de texte intégral peut également s'avérer utile. -
Problème de pagination Si la taille du fichier d'échange est insuffisante, comme cela peut se produire sur un système qui dispose d'un petit fichier d'échange avec une croissance limitée, fdhost.exe ou sqlservr.exe risquent de manquer de mémoire. Si les journaux d'analyse n'indiquent pas de défaillances relatives à la mémoire, il est probable que les performances sont dégradées par une pagination excessive.
Estimation des besoins en mémoire du processus hôte de démon de filtre (fdhost.exe)
|
Variable |
Valeur par défaut |
|---|---|
|
number_of_crawl_ranges |
|
|
ism_size |
|
|
max_outstanding_isms |
|
-
F, qui est une évaluation de la mémoire requise par fdhost.exe (en Mo). -
T, qui est la mémoire physique totale disponible sur le système (en Mo). -
M, qui est le paramètre max server memory optimal.
Important
|
|---|
|
|
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
Exemple : estimation des besoins en mémoire de fdhost.exe
F = 8*10*8=640
M = 8192-640-500=7052
Exemple : configuration de la mémoire maximum du serveur
USE master; GO EXEC sp_configure 'max server memory', 7052; GO RECONFIGURE; GO
Pour définir l'option de configuration max server memory
Facteurs pouvant réduire la consommation processeur
-
Temps d'attente élevé pour les pages Pour savoir si un temps d'attente de page est élevé, exécutez l'instruction Transact-SQL suivante : Execute SELECT TOP 10 * FROM sys.dm_os_wait_stats ORDER BY wait_time_ms DESC;
Le tableau suivant décrit les types de temps d'attente présentant un intérêt ici. Type d’attente Description Résolution possible PAGEIO_LATCH_SH (_EX ou _UP) Cela pourrait indiquer un goulet d'étranglement ES, auquel cas vous devriez généralement constater également une durée de file d'attente de disque moyenne élevée. Le déplacement de l'index de recherche en texte intégral vers un groupe de fichiers différent sur un disque différent peut aider à réduire le goulet d'étranglement ES. PAGELATCH_EX (ou _UP) Cela pourrait indiquer beaucoup de contention parmi les threads qui essaient d'écrire dans le même fichier de base de données. L'ajout des fichiers au groupe de fichiers sur lequel l'index de texte intégral réside pourrait aider à alléger cette contention. Pour plus d'informations, consultez sys.dm_os_wait_stats (Transact-SQL). -
Inefficacités dans l'analyse de la table de base Un remplissage complet analyse la table de base pour produire des lots. Cette analyse de table peut être inefficace dans les scénarios suivantes : -
Si la table de base a un pourcentage élevé de colonnes hors ligne qui sont indexées de texte intégral, l'analyse de la table de base pour produire des lots peut être le goulet d'étranglement. Dans ce cas, le déplacement des petites données dans la ligne à l'aide de varchar(max) ou nvarchar(max) peut améliorer la situation. -
Si la table de base est très fragmentée, l'analyse peut être inefficace. Pour plus d'informations sur le calcul des données hors ligne et de la fragmentation des index, consultez sys.dm_db_partition_stats (Transact-SQL) et sys.dm_db_index_physical_stats (Transact-SQL). Pour réduire la fragmentation, vous pouvez réorganiser ou reconstruire l'index cluster. Pour plus d'informations, consultez Réorganiser et reconstruire des index.
-