2009-02-23 7 views
0

J'ai un serveur de base de données sur SQL Server 2000 (oui je sais ...) avec des catalogues de texte intégral sur certaines de ses tables. Je suis en train de faire une population complète pendant la nuit en temps calme, et j'aimerais pouvoir mettre à jour les catalogues pendant la journée afin que de nouvelles données puissent être considérées dans les recherches.SQL Server 2000 peut-il être créé pour remplir un catalogue de texte intégral sans bloquer les tables qu'il lit?

Le problème que j'ai remarqué est que lorsqu'une population incrémentale s'exécute, il y a une quantité considérable de blocage, causée par le processus de population. Les autres transactions sur cette base de données utilisent "read uncommitted", ou dirty reads, pour minimiser les retards (je ne me soucie pas particulièrement des données précises jusqu'à la seconde) donc je ne sais pas exactement pourquoi la population, qui lui-même ne lit que les données, les bloque.

Des indices, des indices?

Répondre

1

histoire courte: non, et la situation est beaucoup mieux que les mises à jour récentes de SQL Server 2008. La version RTM de 2008 avait ces mêmes questions, que nous avons décrit ici:

http://www.brentozar.com/archive/2008/11/stackoverflows-sql-2008-fts-issue-solved/

Le solution de contournement consiste à utiliser les sous-systèmes de stockage les plus rapides qui ont un sens pour votre budget et vos charges de travail. Les catalogues de texte intégral doivent se trouver sur des tableaux séparés à partir de vos données et de vos journaux, ce qui permet de terminer la population plus rapidement.

Vous avez également mentionné que vous êtes surpris que la lecture provoque des verrous. Nous avons des articles sur SQLServerPedia expliquant le processus de verrouillage de SQL Server, comme celui-ci:

http://sqlserverpedia.com/wiki/SQL_Server_Locking_Mechanism

Si vous voulez des réponses plus spécifiques, surveillez votre serveur au cours de la population. Exécutez sp_who2, examinez les requêtes qui sont bloquées et exécutez une commande DBCC INPUTBUFFER (spid) pour déterminer leur T-SQL. De cette façon, vous pouvez voir exactement quels types de requêtes sont à l'origine. Si vous êtes sûr d'utiliser la fonction de lecture non validée, téléchargez une copie du plan d'exécution de votre requête, et nous pouvons vous aider à l'interpréter pour savoir ce qui se passe.

Questions connexes