L'optimisation de l'Exportation en PDF de Énorme de Rapports dans Sql Reporting Services 2005

Tout d'abord, je comprends que c'est une idée horrible à exécuter extrêmement large/long à exécuter des rapports. Je suis conscient que Microsoft a une règle stipulant qu'un rapport SSRS devrait pas prendre plus de 30 secondes à s'exécuter. Cependant, parfois, gargantuesque rapports sont un préféré mal due à des forces externes telles conformité avec les lois de l'état.

À mon lieu de travail, nous avons une asp.net (2.0) application que nous avons migré à partir de Crystal Reports SSRS. En raison de la grande base d'utilisateurs et complexe de l'INTERFACE de création de rapports exigences, nous avons une série d'écrans qui accepte de l'utilisateur saisie des paramètres et crée des horaires à exécuter pendant la nuit. Depuis l'application prend en charge plusieurs cadres de présentation de rapports nous n'utilisons pas de la planification/instantané établissements de SSR. Tous les rapports dans le système sont générés par un planifiée console application qui prend de l'utilisateur paramètres saisis et génère les rapports avec les solutions de création de rapports les rapports ont été créés. Dans le cas de rapports SSRS, l'application de console génère les rapports SSRS et les exportations au format Pdf via le SSRS API de service web.

Jusqu'à présent SSRS a été beaucoup plus facile à traiter que le Cristal à l'exception de certaines de 25 000 pages du rapport que nous avons récemment convertis à partir de crystal reports pour SSRS. Le serveur SSRS est un 64 bits, server 2003 avec 32 go de ram, fonctionnant SSRS 2005. Tous nos petits rapports de travail fantastique, mais nous avons des problèmes avec notre plus grande des rapports comme celui-ci. Malheureusement, nous n'arrivons pas à générer le aforemention rapport par le biais de l'API de service web. L'erreur suivante se produit environ 30 à 35 minutes dans la production/exportation:

Message d'Exception: La connexion sous-jacente a été fermée: Une erreur inattendue s'est produite sur une recevoir.

L'appel de service web est quelque chose que je suis sûr que vous avez vu avant:

data = rs.Render(this.ReportPath, this.ExportFormat, null, deviceInfo,
   selectedParameters, null, null, out encoding, out mimeType, out usedParameters, 
   out warnings, out streamIds);

La chose étrange est que ce rapport va exécuter/affichage/exportation si le rapport est exécuté directement sur le serveur de rapports à l'aide du gestionnaire de rapports. Le proc qui produit les données pour le rapport s'exécute pendant environ 5 minutes. Le rapport s'affiche dans SSRS format natif dans le navigateur/viewer après environ 12 minutes. L'exportation au format pdf par le biais de l'explorateur/visualiseur dans le gestionnaire de rapports en faut 55 minutes. Cela fonctionne de manière fiable et qu'il produit un énorme 1.03 go pdf.

Voici certaines des choses évidentes, j'ai essayé d'obtenir le rapport de travail via l'API de service web:

  • définir la HttpRuntime ExecutionTimeout
    la valeur de 3 heures sur le rapport
    serveur
  • désactivé http garder avie sur le serveur de rapports
  • augmenté le délai d'exécution du script sur le serveur de rapports
  • définir le rapport à jamais sur le serveur
  • définir le rapport de délai d'attente de plusieurs heures sur l'appel du client

De réglages, j'ai essayé, je suis assez à l'aise de dire que tous les problèmes de délai d'attente ont été éliminés.

Basé sur mes recherches sur le message d'erreur, je crois que l'API de service web n'envoie pas de fragments de réponses par défaut. Cela signifie qu'il essaie d'envoyer tous les 1,3 go sur le fil en une seule réponse. À un certain point, IIS jette l'éponge. Malheureusement, l'API abstraction de service web de configuration donc je n'arrive pas à trouver un moyen d'activer la réponse de segmentation.

  1. Personne ne sait de toute façon à réduire/optimiser l'exportation en PDF de phase et /ou de la taille du fichier PDF sans baisser le nombre total de pages?
  2. Est-il un moyen pour activer la réponse de segmentation pour SSRS?
  3. Quelqu'un d'autre a toutes les autres théories pour expliquer pourquoi cela fonctionne sur le serveur, mais pas par le biais de l'API?

EDIT: Après lecture de kcrumley post, j'ai commencé à prendre un coup d'oeil à la moyenne de la taille de la page en prenant de taille de fichier /nombre de pages. Ce qui est assez intéressant sur les petits rapports de maths fonctionne de telle sorte que chaque page est d'environ 5 KM. Fait intéressant, lorsque le rapport est plus grand cette "moyenne" augmente. Un 8000 pages du rapport, par exemple, est en moyenne plus de 40K/page. Très bizarre. Je vais aussi ajouter que le nombre d'enregistrements par page est défini à l'exception de la dernière page dans chaque groupe, il n'est donc pas un cas où certaines pages ont plus de disques que l'autre.

OriginalL'auteur |