Каковы хорошие способы вокруг порога просмотра списка?

sharepoint.stackexchange https://sharepoint.stackexchange.com/questions/16402

Вопрос

Я пытаюсь использовать данные из списка SharePoint в SSRS (отчетные услуги).
Отчет не слишком большой - всего несколько десятков строк, но для каждой строки мне нужно добавить данные из второго списка, который (в настоящее время) содержит 7000 строк. На SharePoint 2007 я успешно сделал подобные вещи, но я не могу заставить его работать на SharePoint 2010.
Я пытался:

Я продолжаю бить ту же стену - я не могу получить никаких данных, потому что список слишком большой! Я получаю аналогичную ошибку:

Попытка операции запрещена, поскольку она превышает порог просмотра списка, применяемый администратором.

Это обескураживает. Я довольно много читал на эту тему и не вижу хорошего пути обойти его, кроме как увеличить порог во всем приложении.

Есть ли простой способ обойти это новое ограничение? Есть сложный способ?
Я ищу «лучшую практику» ... это не выглядит, я могу продолжать использовать любой из этих методов надежно. Единственное «хорошее» решение, которое я могу придумать, чтобы использовать SSI для копирования всех строк в базу данных, но это кажется излишним ...

Это было полезно?

Решение

В центральной администрации вы можете полностью отключить порог списка или установить более высокий предел. Вы также можете установить временное окно, когда лимит отключен, и тогда запустить службу отчета. Перейдите на страницу управления веб -приложениями в центральной администрации и выберите опцию дросселирования ресурса из кнопки «Общие настройки» в ленте.

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

Другие советы

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

В качестве примера я столкнулся с этой проблемой, пытаясь получить все папки в библиотеке SharePoint. Количество папок было значительно ниже 5000 (порог списка по умолчанию), но с более чем 20 000 пунктов в библиотеке я запускал исключение.

Решением было индексировать тип контента (доступный через настройки библиотеки SharePoint) и использовать следующий запрос:

<Where><BeginsWith><FieldRef Name='ContentTypeId' /><Value Type='ContentTypeId'>0x0120</Value></BeginsWith></Where>

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

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

Документация: «Предоставляет методы для итерации элементов списка, списков, сайтов для регулирования объема передаваемых данных (то есть, чтобы избежать броски SpqueryThrottledException)».

SSRS 2008 R2 имеет добавленную опцию источника данных SharePoint. SharePoint Data Source будет выполнять серию из 2000 MAX -вопросов, пока весь запрос не будет завершен. Это позволяет вам преодолеть порог просмотра списка и не влиять на производительность. PowerPivot выполняет это еще лучше. Он будет запрашивать списки 1000 строк за раз и кэшировать результаты в рабочей книге Excel. PowerPivot также позволяет создавать столбцы и отношения поиска. Затем SSR могут запросить источник данных PowerPivot внутри SharePoint, как это является аналитическим кубом.

Хотя выбор для этого спрашивающего - это повысить предел, он есть по уважительной причине: избегать создания плохо выполняемых сайтов. По мере того, как ваш сайт растет в контенте, или он становится шаблоном для других сайтов, вы обнаружите, что каждый пользователь, который нажимает на страницы, которые требуют «расслабления». произойдет.

Я писал об этом и о наборе решений в http://squarepoint.blogspot.com/2013/05/creating-performant-sharepoint-apps.html. Анкет Там могут быть некоторые предложения, которые могут помочь вам избежать проблемы и сохранить работу SharePoint без штрафа за производительность.

Вы также могли бы отключить свойство EnubleThrottling для конкретного списка с слишком большим количеством элементов как Майкл Моррисон написал здесь:

$web = Get-SPWeb http://url/to/web/with/list
$list = $web.Lists[“BIG_LIST_NAME”]
$list.EnableThrottling = $false

Удачи!

Если у вас есть доступ, возможно, рассмотрите возможность объединить поисковый API и веб -сервис? Поиск может индексировать и вернуть гораздо большее количество полей. Это круговой способ получить данные, но он поддерживается.

Вы можете определить «учетную запись обслуживания» и дать права администратора сбора сайтов этой учетной записи. Используйте эту учетную запись, чтобы запросить данные. Я полагаю, что они могут запросить 20 000 предметов (или это было 5000?!) Одновременно.

Если это не работает:

  • Поместите индексатор в столбец списка (UID?)
  • Используйте PowerShell, чтобы увеличить ListViewTreShold

Имейте в виду, что граница 5000 пунктов имеет цель. Запрос из 2200 предметов может снизить производительность, запрос 5000+ может даже заблокировать таблицу в базе данных!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с sharepoint.stackexchange
scroll top