web-dev-qa-db-fra.com

Processus de blocage SSRS

Nous avons un serveur de rapports SSRS occupé (SQL Server 2008 R2) sur lequel nous voyons un blocage fréquent entre les processus ci-dessous:

  • [DBO]. [CheckSessionLock]
  • [DBO]. [Writelocksession]

Nous sommes conscients que certains rapports fonctionnent inacceptablement lentement. Ce que j'ai besoin de savoir, c'est si le blocage de la base de données de reporterver est symptomatique d'un serveur surchargé ou si le blocage est en train de faire fonctionner les rapports lents.

Je suis enclin à croire que c'est le premier cas, mais je n'ai pas pu recueillir des preuves le prouver définitivement en tant que tel.

J'ai lu le fil à - https://connect.microsoft.com/sqlserver/feedback/details/698388/blocking-in-ssrs-reporttserver-database dans lequel le problème est reconnu vaguement mais je ne peux pas Accédez au lien cité pour répondre à ce problème.

Certains sont-ils arrivés au bas du même problème avec le blocage de la base de données SERVENASERVER?

7
Yasin

Malheureusement, il n'y a pas grand chose que vous pouvez faire à ce sujet, ce comportement est par conception. Le problème se manifeste lorsque des sessions utilisateur sont terminées car le rapport prend trop de temps. Vous pouvez essayer d'améliorer les rapports ou de configurer le délai de session d'être un peu plus long que le rapport de fonctionnement le plus long.

Voir Ce lien Pour une explication sur la raison pour laquelle et certaines façons de travailler autour de lui.

Vous pouvez augmenter le délai de session comme une sorte de solution de contournement, le script est documenté dans l'article.

De l'article:

Cependant, il y a un scénario où le ping ne fonctionne pas, et c'est lors de l'exécution du rapport inital. Le problème est que, si le rapport est en cours d'exécution, la session de l'utilisateur est verrouillée (car nous remplissons l'instantané temporaire de l'utilisateur) et la maintien du contrôle de la visionneuse sera bloquée. Normalement, ce n'est pas un problème car les exécutions de rapports ne sont pas censées prendre beaucoup de temps et ils finissent souvent avant que le délai d'attente de la session frappe. Malheureusement, il y a des cas où des rapports (pour une raison quelconque) prennent une période incroyablement longue pour exécuter. Ce qui se passe dans ce cas est que la session de l'utilisateur est vieilli alors que le rapport est exécuté, entraînant toutes sortes de comportements étranges.

En supposant que vous avez SQL 2008R2 ou plus.

Oui, nous avons également été témoins de la même chose sur l'un de nos lourde SSRS SSRS Server Server et, tandis que le dépannage a eu lieu sur ce Connect article , qui est enregistré comme un bogue.

Comme expliqué:

Les SSRS émettent ces serrures pour fournir un mécanisme multithreading. Une fois que tous les threads exécutant le rapport que vous avez écrit, terminez, la serrure est supprimée. Donc, si vous les voyez, normalement, il s'agit d'une requête lente sur un serveur différent, ce qui entraîne le problème.

Certains problèmes peuvent se produire sur une charge lourde (ou donc ils disent), et certains signalent que les problèmes de collation empêchent CleanExpiredSessions de courir.

Aussi,

Ce comportement est par conception. Pour garder ses sessions en vie, le contrôle de la visionneuse tente les pingènes toutes les 10 minutes. Sur le côté du serveur, il se traduit par une invocation de getSessionData stocké Proc, qui commence à appeler CheckSessionLockLocklock stocké Proc, qui essaie une session de lecture Serrure de session. Si au moment où le traitement du rapport sur le rapport sur les rapports est toujours en cours d'exécution, les blocs de checkSessessionLocklock ont-ils été conservés car le verrouillage d'écriture de session est détenu pendant le traitement du rapport. GETESTORDATA TEMPS DE 10 MINUTES (PROPRIÉTÉ SYSTÈME "SESSIONAccessTimeout"). Si le traitement du rapport prend plus de 20 minutes, le délai d'attente de GetSessionData se produit et vous voyez ce problème.

Pour plus de lecture et de résolution à ce sujet, reportez-vous à délai d'attente de session pendant l'exécution

2
KASQLDBA

le blocage/blocage consiste à assurer la cohérence et constitue un comportement normal.

vous pouvez essayer de lire le niveau d'isolement instantané engagé pour la base de données Rapportservertempdb et définir un instantané de niveau d'isolation dans la procédure WritelockSession

Je n'ai pas implémenté la solution et je ne le recommanderais pas ..

la seule solution à ce problème est d'utiliser un autre outil de rapport

0
Ben