SSRS - OutOf MemoryException - есть ли ограничение на количество строк, которые могут быть отображены - PullRequest
4 голосов
/ 12 февраля 2009

Я создал документ RDL, который указывает на процесс, который возвращает 90 000 строк, и я получаю исключение нехватки памяти. Существует ли ограничение на количество строк, которые могут обрабатывать проекты отчетов?

В настоящее время я изменил процесс, управляющий моим отчетом, чтобы он просто выбирал Top 90 000. Мои спецификации должны быть в состоянии создать отчет с 120 000 строками. Мой отчет представляет собой матрицу.

Клянусь, на прошлой неделе я сгенерировал отчет, в котором 106800 строк, но теперь внезапно я не могу.

Я написал расширение рендеринга, и вот часть исключения, когда я вхожу в код.

Информация: 12.02.2009 12:03:53 PM prairieFyre.ReportActions.RenderReport: Отчет об ошибке рендеринга Microsoft.Reporting.WinForms.LocalProcessingException: ошибка произошло во время локальной обработки отчета. ---> Microsoft.ReportingServices.ReportProcessing.ReportProcessingException: Произошла непредвиденная ошибка при обработке отчета. ---> System.OutOfMemoryException: исключение типа «System.OutOfMemoryException» было сгенерировано. в System.IO.MemoryStream.set_Capacity (значение Int32) в System.IO.MemoryStream.EnsureCapacity (значение Int32) в System.IO.MemoryStream.Write (буфер Byte [], смещение Int32, число Int32) в System.IO.BinaryWriter.Write (строковое значение) в Microsoft.ReportingServices.ReportProcessing.Persistence.IntermediateFormatWriter.ReportServerBinaryWriter.WriteString (String stringValue) ....

Ответы [ 3 ]

4 голосов
/ 12 февраля 2009

Не думаю, что есть ограничение, кроме вашей аппаратной конфигурации. Если у вас 32-разрядный компьютер, рабочий процесс, обрабатывающий этот процесс, имеет менее 2 гигабайт памяти для работы, возможно, ближе к 1 гигабайту, если учитывать объем памяти в режиме ядра. Если вы собираетесь обслуживать большие отчеты, подобные этой, вам, вероятно, потребуется 64-битная установка с минимум 4 гигабайтами памяти или более на коробке. Эта настройка позволит рабочему процессу выделить более 2 гигабайт используемой памяти для выполнения этих больших запросов без проблем.

Если обновление оборудования невозможно, вы также можете рассмотреть эти альтернативы.

  • Вы сказали, что отчет представляет собой матричный отчет, и, похоже, вы не отображаете все эти данные пользователю, а агрегируете их. Не могли бы вы предварительно агрегировать некоторые из этих данных в базу данных, а затем просто использовать SSRS для отображения?

  • Поскольку отчет представляет собой не что иное, как файл XML, создайте строку XML отчета изнутри сервера SQL или с помощью какого-либо сценария или процесса. Это может быть много работы.

3 голосов
/ 02 августа 2010

Стек указывает, что MemoryStream, используемый для хранения результата выполнения отчета, не может увеличить (удвоить) его размер.

Обычно это вызвано фрагментацией адресного пространства, которая обычно не может быть решена путем добавления аппаратного обеспечения.

Microsoft ReportViewer ограничен в объеме данных, которые он может обрабатывать, поскольку он предназначен для хранения промежуточного результата выполнения отчета в MemoryStream, который, к сожалению, требует квадратично растущего объема непрерывного свободного адресного пространства, что в обычном приложении .NET ( 2 ГБ адресного пространства) не больше 256 МБ, а зачастую и намного меньше.

Например, в этом потоке хранятся все значения полей, агрегированные значения, выражения и изображения, поэтому размер напрямую зависит от размера наборов данных, добавленных в отчет.

Для анализа адресного пространства и объектов приложения .NET лучше всего выполнить отладку с помощью WinDBG (средства отладки для Windows) и расширений SOS.

Ценные команды для анализа фрагментации адреса:

  • ! Address -summary
  • лм
  • ! EEHeap -gc
  • ! DumpHeap -stat

В этом конкретном случае может оказаться возможным уменьшить объем данных путем предварительной агрегации значений, уже находящихся в источнике данных, а не в матрице.

Дополнительные советы приведены в статье базы знаний «При использовании служб отчетов SQL Server может появиться сообщение об ошибке« System.OutOfMemoryException »[1].

[1]: http://support.microsoft.com/kb/909678 Сообщение об ошибке «System.OutOfMemoryException» при использовании служб отчетов SQL Server

0 голосов
/ 28 июля 2012

Убедитесь, что для свойства interactiveHeight не установлено значение 0. http://bidn.com/blogs/MMilligan/bidn-blog/2903/ssrs-gotcha-interactiveheight=0

...