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.
- 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?
- Est-il un moyen pour activer la réponse de segmentation pour SSRS?
- 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 |
Vous devez vous connecter pour publier un commentaire.
J'ai quelques idées et questions:
1. Est-ce un graphique lourde rapport? Si non, avez-vous des tables qui commencent comme texte, mais sont convertis en un graphique par la SSR convertisseur PDF (vérifiez si vous pouvez sélectionner le texte dans le fichier PDF)? 41K par page peut être plus que ce qu'elle devrait être, ou il ne pourrait pas, selon la façon dont denses en informations de votre rapport. Mais nous avons eu des cas où nous avons eu des problèmes mineurs avec un rapport de présentation, comme d'avoir un tableau de purge dans la page, les marges de l', qui a abouti à la SSR PDF renderer "jeter ses mains" et le rendu de la table comme une image plutôt que du texte. Évidemment, moins les graphiques dans votre rapport, le plus petit de la taille de votre fichier sera.
2. Est-il possible que vous pouvez facilement casser le rapport en morceaux? E. g., si c'est un 10-rapport d'endroit, où l'Emplacement 1 est suivie par Emplacement 2, etc., sur votre rapport final, pourriez-vous exécuter l'Emplacement 1 partie indépendante de l'Emplacement 2 de la partie, etc.? Si oui, vous pourriez rejoindre l'10 sous-rapports en un seul fichier PDF final à l'aide de PDFSharp après que vous avez reçu tous. Cela conduit à des difficultés avec la numérotation des pages, mais rien d'insurmontable.
J'imagine la taille du rapport. Je ne me souviens pas de tout sur ce qu'est un paramètre IIS et ce qui est SSRS-spécifique, mais il peut y avoir certains paramètres IIS (peut-être dans Metabase.xml) que vous auriez à être mis à jour à même de permettre que les données à passer à travers.
Vous pouvez isoler la question de savoir si le temps est le problème en prenant l'une de vos rapports de travail et capacités dans un long temps d'attente dans vos procédures stockées avec WAITFOR (en supposant que SQL Server pour votre SGBD).
Pas de solutions, à proprement parler, mais des idées. Espérons que cela aide.
OriginalL'auteur Kevin Crumley
Nous avons rétréci vers le bas à la grande exportation de PDF à partir de SSRS et trouvé 2 principaux coupables
1) à Moins que les images sont au format JPG ou PNG type de couleur 3, elles se sont élargies à BMP Voir ici
2), Sauf si vous configurez SSRS à se comporter autrement (non recommandé), puis SSRS incorporer des polices ou des sous-ensembles de polices dans le fichier PDF, sauf si elles sont l'un des 5 "standard" des polices PDF.
Bien qu'aucune des polices standard (autres que le Symbole je suppose) sont installés sur la plupart des OS de Windows hors de la boîte, nous avons trouvé que si vous utilisez
Times New Roman, Courier New, or Arial
puis vers l'avant et inverse de police de substitution aura lieu.La façon la plus facile de convertir vos RDL est de les considérer comme de XML et de la recherche et de remplacer le
FontFamily
balises.Si vous devez utiliser un non-standard de la police, alors, vous pouvez toujours minimiser les dégâts:
OriginalL'auteur
Évidemment, c'est un grand rapport, en fait c'est plus proche de 1,3 GO de base de données, qu'un rapport.
Avez-vous pensé de trouver un moyen de le diviser en plusieurs morceaux et de les combiner ensemble? (utilisez l'une des différentes façons de combiner des fichiers Pdf figurant sur ce site.)
OriginalL'auteur