J'ai installé un serveur de génération de rapports SQL (2008 R2), avec certains rapports. Mais j'ai quelques problèmes de performances.
Le premier appel de la journée au serveur (via l'interface de rapport par exemple), est TRES lent (quelque chose comme 30 à 45 secondes au mieux).
La génération de rapport est alors "rapide" (1-2 secondes).
Les prochains appels sur le serveur sont toujours rapides jusqu'au lendemain. J'ai l'impression que cela charge beaucoup de choses dans la mémoire. Mais que peut prendre 30-45 secondes pour être chargé en mémoire ??? Et comment le charger une seule fois?
Le serveur est assez bon (quad core, 8 Go de RAM, jamais près de sa capacité pour le moment).
Quel est le problème? Comment puis-je résoudre ça ?
Ces rapports ne seront lancés que 4 à 5 fois par semaine, ils seront donc toujours lents si je ne peux pas changer cela. Et comme il est disponible pour les clients, je ne peux tout simplement pas leur faire comprendre cela (et le rapport est appelé via un site Web, je risque donc de perdre du temps).
Merci beaucoup
Cela semble être un problème de SSRS. Il n'y a rien de mal avec votre rapport.
Il est "normal" que SSRS prenne plus de temps à charger la première fois que vous y accédez après une longue période d'inactivité. Le problème provient de la façon dont SSRS fonctionne et SSRS redémarre régulièrement le domaine d'applications après une période donnée. Une fois le domaine de l’application redémarré, lors de la première demande auprès du SSRS, il doit charger tous les paramètres, ce qui prend beaucoup de temps.
This blog show est une solution de contournement à la situation
Voici le script PowerShell que j'ai écrit pour résoudre le problème. Il est configuré comme une tâche à exécuter tous les 1h00:
Stop-Service "SQL Server Reporting Services (MSSQLSERVER)"
Start-Service "SQL Server Reporting Services (MSSQLSERVER)"
$wc = New-Object system.net.webClient
$cred = [System.Net.CredentialCache]::DefaultNetworkCredentials
$wc.Credentials = $cred
$src = $wc.DownloadString("http://localhost/Reports/Pages/Report.aspx?ItemPath=***NAME OF HOME PAGE***")
La meilleure solution que je pouvais trouver était d'émettre une commande "curl" vers la page http du rapport en utilisant la commande batch de Windows dans un service Windows. Cela a parcouru les pages tous les matins avant que les utilisateurs entrent.
Vous n'avez plus accès au code (le travail était il y a longtemps), mais cette question montre comment utiliser curl:
Comme Diego l'a dit, SSRS a quelques problèmes. Le premier appel est lent, en ce qui concerne la configuration de votre serveur. Je vous recommande la configuration suivante à ajouter dans rsreportserver.config (situé si vous ne le connaissez pas dans C:\Programmes\Microsoft SQL Server\MSRS10.MSSQLSERVER\Reporting Services\ReportServer \)
Si vous souhaitez augmenter la mémoire maximale utilisée par SSRS: (ce qui signifie 7 Go)
<WorkingSetMaximum>7000000</WorkingSetMaximum>
Si vous souhaitez améliorer le premier appel, vous pouvez définir (en minutes)
<RecycleTime>4320</RecycleTime>
En réalité, SSRS a un temps de réinitialisation (recyclage) dans lequel nettoie sa mémoire tampon. Par défaut, il est réglé sur 720 min (12 h), c’est pourquoi, si vous ouvrez un rapport tous les matins, le chargement est très lent . Comme vous le souhaitez, vous pouvez définir un temps de recyclage supérieur (2-3 jours). Je ne recommande pas un délai plus long, car la mémoire tampon se remplira et que vous n'obtiendrez que des pages vierges. Vous devrez donc redémarrer manuellement Reporting Services.
J'ai converti la requête principale et les commandes déroulantes de la page pour charger à partir de procédures stockées, ce qui a entraîné une différence de 5 secondes dans le processus de chargement. Évitez d'utiliser des requêtes en ligne.
Il peut ne pas être complètement lié à SQL Server. Essayez de voir s’il ne s’agit pas d’un problème de vérification de la liste de révocation de signes de code, voir Correction du démarrage lent de l’application en raison de la validation du signe de code