Deshabilitación temporal del umbral de la vista de lista en listas de gran tamaño

Cuerpo:

En SharePoint 2010, se han agregado algunos límites nuevos para proteger los servidores y a otros usuarios de operaciones costosas llevadas a cabo accidentalmente por otros usuarios. Para ver una lista completa de los límites máximos y los límites del software SharePoint 2010, haga clic aquí http://technet.microsoft.com/en-us/sharepoint/ff601870.aspx. Si desea obtener más información sobre el significado de los diferentes tipos de límite haga clic aquí para leer el tema de ayuda http://office2010.microsoft.com/en-us/sharepoint-server-help/manage-lists-and-libraries-with-many-items-HA010378155.aspx?redir=0. Para obtener más detalles sobre las características que le ayudan a administrar listas de gran tamaño y sobre los procedimientos recomendados, lea las notas del producto sobre el diseño de listas de gran tamaño y maximización del rendimiento de listas http://technet.microsoft.com/en-us/library/ff608068(office.14).aspx.

El umbral de la vista de lista es uno de los umbrales que se encuentra bajo la configuración de "limitación de recursos" para cada aplicación web, que se puede administrar en Administración central. Está establecido en 5.000 de manera predeterminada; esto significa que el servidor de SharePoint bloqueará cualquier vista o consulta que intente procesar más de 5.000 elementos a la vez. Por ejemplo, una vista que filtra una columna no indizada en una lista que tiene 5.001 elementos recibirá un mensaje que indicará al usuario que el umbral de la vista de lista bloqueó la consulta y, si hay un intervalo de tiempo diario establecido, el mensaje también indicará las horas durante las cuales se permite realizar esa operación.

Poco tiempo después de la actualización, es posible que algunos usuarios descubran que no pueden obtener acceso a los datos a través de las vistas que tenían y que para obtener acceso a los datos de la forma en que desean hacerlo (por ejemplo, ordenados por una columna llamada "color") deben agregar un índice a la lista de gran tamaño. Sin embargo, sigue existiendo la limitación del umbral de la vista de lista, por lo que solo podrán hacerlo si:

  1. Esperan a que el administrador establezca el intervalo de tiempo diario, si es que lo establece y habilita. De manera predeterminada, el intervalo de tiempo diario no está establecido ya que debe ser una decisión consciente por parte del administrador para determinar qué horario "fuera de las horas pico" es más conveniente para la organización. Este es el curso de acción recomendado, pero a veces no es suficiente si el usuario necesita tener acceso a los datos inmediatamente.
  2. El administrador del conjunto o granja de servidores aumenta el umbral de la vista de lista a un número muy elevado para que todos los que tengan una lista de gran tamaño puedan tener acceso a todas sus vistas. Esto no es aconsejable ya que representa un alto riesgo para el mantenimiento y estabilidad del servidor y, en vez de resolver el problema para el pequeño número de personas que tiene una lista de gran tamaño, puede crear problemas para todos los demás y promover la creación de vistas y consultas mal construidas.
  3. El administrador otorga a la lista específica del usuario una exención temporal del umbral de la vista de lista. Esta exención solo puede establecerse mediante programación. Le mostraré aquí cómo se puede crear la exención y levantarla una vez finalizado el período especificado a los usuarios. Recomiendo que sea prudente al conceder esta excepción y que no la deje más tiempo del necesario. En la mayoría de los casos, dar a los usuarios una semana para arreglar sus vistas o código personalizado es más que suficiente.

Para deshabilitar el umbral de la vista de lista para una lista en particular se puede usar el modelo de objetos para editar la propiedad "EnableThrottling" de la lista como false (la opción predeterminada es true). El siguiente código muestra cómo hacerlo para una lista en particular o para todas las listas de un determinado sitio. Es aconsejable otorgar esta exención solo a listas específicas y no a un sitio completo, ya que de esta forma es más fácil hacer un seguimiento de las posibles causas del mal rendimiento del servidor y subrayar la importancia de arreglar las listas lo más rápido posible para los usuarios finales.

Aquí hay un script escrito por Chris Clark, un evaluador del equipo de SharePoint, para realizar este cambio. Para revertir el cambio (es decir, quitar la excepción de una lista o de todas las listas de un sitio web), simplemente cambie esta línea:

$list.EnableThrottling = $false

to:

$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 http://localhost -ListName "Shared Documents"

#               makeexceptionlist.ps1 -WebUrl http://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

Directora de programas de SharePoint, Microsoft

Publicado: 15/08/2010 11:40 p.m.

Esta entrada de blog es una traducción. Encontrará el artículo original en Temporarily disabling List View Threshold on a large list