SQL Query FOR XML работает нормально в 2000 году, медленно в 2008 R2 - PullRequest
1 голос
/ 05 мая 2011

Я конвертирую клиентские пакеты SSIS из DTS в SSIS.В одном из своих пакетов у них есть задача «Выполнить SQL», в которой есть запрос, подобный следующему:

SELECT * FROM [SOME_TABLE] AS ReturnValues 
ORDER BY IDNumber
FOR XML AUTO, ELEMENTS

Этот запрос, по-видимому, возвращает приличное количество времени в старой системе, но в новом окне он занимаетдо 18 минут для запуска запроса в SSMS.Иногда, если я запускаю его, он генерирует ссылку XML, и если я щелкаю по нему, чтобы просмотреть XML, он выдает «System.OutOfMemoryException» и предлагает увеличить количество символов, извлекаемых с сервера для данных XML.Я увеличил этот параметр до неограниченного и все еще получаю ошибку.

Сама таблица содержит 220 500 строк, но возвращенные строки запроса показывают 129 810 до остановки запроса.Это просто вопрос нехватки памяти для системы?Этот блок имеет 48 ГБ (Win 2008 R2 EE x64), экземпляр ограничен 18 ГБ из-за общей среды разработки.Буду признателен за любую помощь / понимание, так как я действительно не знаю XML!

Ответы [ 3 ]

2 голосов
/ 05 мая 2011

Когда вы используете SSMS для выполнения запросов XML FOR XML, он сгенерирует весь XML, а затем поместит его в сетку и позволит вам щелкнуть по нему.Существуют ограничения на объем возвращаемых данных и 220 000 строк, в зависимости от ширины таблицы, она огромна и выдает много текста.

Недостаточно памяти из-за того, что SQL Server пытаетсяпроанализировать все это, и это потребляет много памяти для SSMS.

Вы можете попробовать выполнить в файл и посмотреть, что вы получите для размера.Но главная причина нехватки памяти заключается в том, что из-за большого количества XML и его возврата в таблицу вы не сможете получить все результаты все время с таким типом набора результатов (по размеру).

DBADuck (Бен)

1 голос
/ 05 мая 2011

Исключение из-за недостатка памяти связано с объемом текста, который может обрабатывать элемент управления сеткой .net.220 тыс. Строк огромны!настройка в SSMS для отображения неограниченного количества данных так же хороша, как ограничение памяти .net control.

0 голосов
/ 05 мая 2011

Вы можете посмотреть на удаление опции ELEMENTS и посмотреть на данные в формате атрибута.Это уменьшит количество возвращаемого XML «строкового пространства».Лично я предпочитаю атрибуты элементам только по этой причине.Контекст имеет решающее значение, поэтому он зависит от того, чего вы пытаетесь достичь (посмотрите на данные или используйте данные).Не могли бы вы передать данные в переменную XML?Когда все сказано и сделано, DBADuck на 100% прав в своем утверждении.

SqlNightOwl

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...