Un peu de contexte:
au début, nous avons écrit des rapports juste "directement", sans aucune indication de verrouillage dans les requêtes. Avec les rapports plus volumineux, cela entraînerait parfois des problèmes de verrouillage. Au début, nous y avons remédié en utilisant le WITH (NOLOCK)
conseil pour les tables dans la requête.
Parce que (a) c'est assez envahissant, et (b) il est facile d'oublier l'indice pour l'une des tables, nous sommes passés à un deuxième paramètre d'approche TRANSACTION ISOLATION LEVEL
pour READ UNCOMMITTED
(ce qui est bien) en haut de la requête de chaque ensemble de données.
Comme vous pouvez le deviner, il est toujours facile d'oublier l'indice pour l'un des ensembles de données. Cela conduit donc à la question:
Question: Quelles sont les options d'envoi d' NOLOCK
indices avec les requêtes de rapport?
PS. Je me rends compte que c'est dans une certaine mesure un problème XY (avec beaucoup de mes autres options pour X, telles que l'optimisation de la requête, ne pas faire de rapport sur la base de données opérationnelle, etc.), mais j'ai essayé d'en faire une question valide sur elle-même néanmoins .
Options:
Voici les options mentionnées ci-dessus, avec des options supplémentaires sur lesquelles je suis curieux de savoir si elles fonctionneraient:
- Définissez l'
WITH (NOLOCK)
indice pour chaque table. (envahissant, très facile à oublier) - Définissez le niveau d'isolement sur
READ UNCOMMITTED
pour la requête entière. (toujours facile à oublier) - Est-il possible de spécifier cela au niveau du rapport ? Par exemple, assurez-vous que toutes les requêtes d'ensembles de données pour un rapport seront exécutées sans verrouillage.
- Est-il possible de spécifier cela à un autre niveau SSRS ? Par exemple, définissez-le pour un certain dossier de rapport ou en utilisant une extension?
- Est-il possible de spécifier cela au niveau de la source de données / chaîne de connexion ? Par exemple, tous les rapports pertinents utilisent-ils une certaine "source de données sans verrouillage"?
- Lié à l'option précédente: il est peut-être possible de spécifier un indice de verrouillage par défaut pour un utilisateur "no-lock-sql-user" spécifique (celui qui est utilisé dans la connexion)?
- ???
Quelles options sont viables? Y a-t-il des options que j'ai manquées?