Временное отключение порогового значения представления списка для большого списка

Временное отключение порогового значения представления списка для большого списка

Текст

В SharePoint 2010 был добавлен ряд ограничений для защиты серверов и пользователей от трудоемких операций, непреднамеренно выполняемых другими пользователями. Полный список программных ограничений в SharePoint 2010 см. здесь https://technet.microsoft.com/en-us/sharepoint/ff601870.aspx. Дополнительные сведения о назначении различных ограничений см. здесь в разделе справки https://office2010.microsoft.com/en-us/sharepoint-server-help/manage-lists-and-libraries-with-many-items-HA010378155.aspx?redir=0. Подробные сведения о функциях для работы с большими списками и рекомендации по их использованию см. в следующем техническом документе: Проектирование больших списков и максимизация производительности https://technet.microsoft.com/en-us/library/ff608068(office.14).aspx .

Пороговое значение представления списка — это одно из пороговых значений, входящих в набор параметров "регулирования ресурсов" для каждого веб-приложения, управление которыми осуществляется с помощью Центра администрирования. По умолчанию установлено значение 5000, означающее, что все представления или запросы, пытающиеся обработать более 5000 элементов одновременно, будут заблокированы сервером SharePoint. Например, если представление попытается отфильтровать неиндексированный столбец в списке из 5001 элемента, пользователь получит сообщение о том, что запрос был заблокирован по пороговому значению представления списка, а при заданном ежедневном временном интервале для больших запросов в сообщении также будет указано время, в течение которого эта операция разрешена.

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

  1. Пользователь должен дождаться наступления ежедневного временного интервала для больших запросов, если таковой задан и активирован администратором. По умолчанию этот интервал не задан, поскольку администратор должен тщательно выбрать время, когда нагрузка на вычислительные ресурсы организации минимальна. Такой подход является рекомендуемым, однако в некоторых случаях он может стать помехой, когда пользователю необходимо получить доступ к данным немедленно.
  2. Администратор фермы должен задать в качестве порогового значения представления списка достаточно большое число, чтобы каждый пользователь, работающий с большими списками, мог получить доступ ко всем представлениям. Использовать такой подход крайне не рекомендуется, поскольку в этом случае исправность и стабильность работы сервера подвергаются высокому риску, а вместо решения проблемы для небольшого количества пользователей, у которых она возникает, такой подход потенциально приводит к возникновению проблем у всех остальных сотрудников и косвенно способствует небрежному проектированию представлений и запросов.
  3. Администратор должен задать для конкретного списка пользователя временное исключение для порогового значения представления списка. Это исключение можно задать только программно. В данной статье я покажу, как выполнить эту задачу, а также как возобновить исключение по истечении указанного для пользователей периода времени. Я настоятельно рекомендую использовать это исключение как можно реже и не устанавливать срок действия больший, чем это действительно необходимо. В большинстве случаев недели на исправление представлений или настраиваемого кода более чем достаточно.

Чтобы отключить пороговое значение представления списка для конкретного списка, с помощью объектной модели присвойте свойству "EnableThrottling" списка значение false (по умолчанию установлено значение true). В приведенном ниже коде показано, как выполнить эту операцию для отдельного списка или для всех списков на указанном сайте. Лучше всего снять это ограничение только для конкретных списков, а не для всего сайта, поскольку в дальнейшем это упростит выявление причин низкой производительности сервера. Кроме того, в этом случае пользователи быстрее осознают необходимость устранения проблем со списками.

Ниже приведен скрипт для внесения этого изменения, написанный Крисом Кларком (Chris Clark), инженером-испытателем из группы разработчиков SharePoint. Чтобы отменить изменение (т. е. отменить исключение для одного или всех списков на сайте), просто замените следующую строку:

$list.EnableThrottling = $false

на

$list.EnableThrottling = $true

###########################################################################

#             MakeExceptionLIst Script

#             OnFailure: NONE

#             OnSuccess: Changes SPList settings to make one or more lists under an SPWeb Exception Lists                                         

#                                                                                            

#             Input Parameters:

#               - WebUrl ~ The URL of the SPWeb which contains the lists to be made exception lists

#               - ListName (Optional) ~ The name of the list to make an exception list

#  

#             Ex:

#               makeexceptionlist.ps1 -WebUrl https://localhost -ListName "Shared Documents"

#               makeexceptionlist.ps1 -WebUrl https://localhost/sites/site1 -ListName "*"

#

#       Exit code rule:

#       On success, exit 0

#       On failure, if no other scripts depend on this, exit a none-zero value

#       Do not use "return" to give the caller exit code, as this cannot be

#       captured by the caller process.

###########################################################################

Param([string]$WebUrl = "", [string]$ListName = "")

# Add Sharepoint pssnapin

Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue

###########################################################################

#

#             Turn off/on list throttling on selected list

#

###########################################################################

Function UpdateList($list)

{

     $listname = $list.Title

     Write-Host "Making list $listname an exception list"

     $list.EnableThrottling = $false

     $list.Update()

}

###########################################################################

#

#             Retrieve relevant objects (SPWeb, SPList) for operation and call Update

#

###########################################################################

$web = Get-SPWeb $WebUrl

if( $web -eq $NULL )

{

     Write-Host "Web not found.  Exiting"

     exit 1;

}

if ( $ListName -eq "*" )

{

     Write-Host "Locating all Lists under web..."

     $lists = $web.Lists

     foreach( $list in $lists )

     {

                UpdateList( $list )            

     }

}

elseif ( $ListName -ne "" )

{

     Write-Host "Locating List < $ListName >..."

     $list = $web.Lists[$ListName]

     if ( $list -ne $NULL )

     {

                Write-Host "List found!"

                UpdateList( $list )

     }

     else

     {

                Write-Host "List not found.  Exiting"

                exit 1;

     }

}

else

{

     Write-Host "Invalid List Name"

     exit 1;

}

Write-Host "Done!"

exit 0;

###########################################################################

#   End

#

###########################################################################

— Дина Айуб (Dina Ayoub)

Руководитель программы SharePoint, корпорация Майкрософт

Дата публикации: 15.08.2010 23:40

Это локализованная запись блога. Исходная статья находится по адресу Temporarily disabling List View Threshold on a large list