J'ai un processus avec un Select qui prend beaucoup de temps pour se terminer, de l'ordre de 5 à 10 minutes.
Je suis actuellement ne pas utiliser NOLOCK
en tant qu'indication pour le moteur de base de données MS SQL.
Parallèlement, un autre processus effectue des mises à jour et des insertions dans la même base de données et les mêmes tables.
Le premier processus a démarré et s'est récemment terminé prématurément par un message
SQLEXCEPTION : La transaction était bloquée sur les ressources de verrouillage avec un autre processus et a été choisie comme victime du blocage.
Ce premier processus s'exécute sur d'autres sites dans des conditions identiques, mais avec des bases de données plus petites et, par conséquent, l'instruction select en question prend beaucoup moins de temps (de l'ordre de 30 secondes environ). Dans ces autres sites, je n'obtiens pas le message de blocage. Je n'ai pas non plus reçu ce message sur le site qui rencontre le problème au départ, mais je suppose qu'au fur et à mesure que la base de données s'est développée, j'ai dû franchir un certain seuil. Voici mes questions :
- Le temps nécessaire à l'exécution d'une transaction pourrait-il rendre le processus associé plus susceptible d'être signalé comme victime d'une impasse.
- Si j'exécute la sélection avec un indice NOLOCK, le problème sera-t-il résolu ?
- Je soupçonne qu'un champ de type datetime vérifié dans le cadre de la clause WHERE de l'instruction de sélection est à l'origine de la lenteur de la recherche. Puis-je créer un index basé sur ce champ ? Est-ce conseillé ?