2009-02-12 1 views
4

Я создал документ rdl, который указывает на proc, который возвращает 90 000 строк, и я получаю исключение из памяти. Существует ли ограничение на количество строк, которые могут обрабатывать проекты отчетов?SSRS - OutOf MemoryException - существует ли ограничение на количество строк, которое может отображаться

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

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

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

eInfo: 2/12/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 (байт [] буфера, Int32 смещение, счетчик Int32) в системе .IO.BinaryWriter.Write (строковое значение) в Microsoft.ReportingServices.ReportProcessing.Persistence.IntermediateFormatWriter.ReportServerBinaryWriter.WriteString (String stringValue) ....

ответ

4

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

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

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

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

3

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

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

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

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

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

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

  • адрес -summary
  • ого
  • EEHeap -gc
  • DumpHeap -stat

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

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

[1]: http://support.microsoft.com/kb/909678 "System.OutOfMemoryException" сообщение об ошибке при использовании SQL Server Reporting Services

0

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

+1

Пожалуйста, включите описание шагов требуется здесь, в этом сообщении, или он может быть удален как [«Не ответ»] (http://meta.stackexchange.com/q/8259). Вы можете по-прежнему включать ссылку, если хотите, но только как ссылку. Также обратите внимание, что вы * должны * раскрывать, ссылается ли ссылка на ваш собственный блог/сайт. –

+0

Это связано с тем, что мне показалось странным, что я должен был установить интерактивную высоту, особенно на 0. Так или иначе, но это помогло. – YvesR

Смежные вопросы

 Смежные вопросы