原文链接:点击打开链接
SharePoint从2010版本开始,引入了一个新的功能,List Threshold(列表阈值),简单来说,这个功能允许管理员设置一个数量上限,这个数量上限就是访问列表或者文档库的时候,可以读取的item的最大数量。举一个简单的例子,如果一个list中有成千上万条数据,用户希望在一个页面中都显示出来,List Threshold将禁止这样的操作,而直接返回一个错误页面。
被List Threshold禁止的操作并不仅仅是展示数据,这只是一个最简单的情况。其他的操作,例如,假设你的List Threshold是5000,列表中有6000条item,同时你创建了一个view,只显示50条item,但是这些item通过某列(非索引列)排序。在这种情况下,事实上SharePoint必须要将6000条item排序,然后返回其中的50条。还有一种情况是,当你删除包含了大列表的一个站点的时候,也可能失败,因为SharePoint必须查询列表中的所有item,从而触发List Threshold的限制。类似的操作还有很多。
所以我们该怎么处理这样的情况呢?——到管理中心去配置一个合理的List Threshold值。
我们知道,List Threshold可以在Web Application级别配置,如果你到Web Applicaiton的Threshold配置页面你能发现这个配置”List View Threshold“,它的默认值是5000,但我们也要知道,最小值是2000,你不能设置2000以下的值。在List View Threshold配置下面,还有一个”Object Model Override“配置,这个配置如果是enabled,那将会允许”超级用户“在使用对象模型的情况下(注意只是在使用对象模型的情况下,而不是UI),获取更多的item。这个数量定义在”List View Threshold for Auditors and Administrators“这个配置选项中。
----什么是”超级用户“?---
超级用户是指Site Collection Administrator 或者Site Collection Auditor。这两个权限可以在创建Permission Policy Level的时候指定:
默认创建的两个Permission Policy Level:“Full Control”和“Full Read”是包含这两个权限的:
---------------------------------
在”List View Threshold for Auditors and Administrators“这个配置选项之下的配置项是“Daily Time Window for Large Queries”,这个选项允许指定一个时间窗口,当服务器的负载小的时候,比如夜里,你可以在这段时间中运行一些大数据量的查询而不受List Threshold的限制。需要注意的是,一旦某个查询在时间窗口中运行起来,即使时间窗口关闭,这个查询也是会继续运行直到结束的。
说了很多List Threshold的限制和配置,下面说一些例外的情况:
1.如果你是一个前端服务器(WFE)的Box Administrator(说实话我不知道什么是Box Administrator,应该是指WFE的本地管理员?),而且所请求的数据就在这个WFE上,那么你可以读取list中的所有item。
2.在对象模型中,SPList对象有一个属性“EnableThrottling”(SharePoint 2010之后的对象模型),如果将这个属性设置为False,那么你可以读取list中的所有item。
3.在使用对象模型中的“SPQuery”或者“SPSiteQuery”对象的时候,可以设置其属性“QueryThrottleMode”为“SPQueryThrottleOptions.Override”,来提高阈值到Administrator的水平,读取更多的数据。以下是一个简单的代码示例:
using (SPSite theSite = new SPSite("http://foo"))
{
using (SPWeb theWeb = theSite.RootWeb)
{
SPList theList = theWeb.Lists["My List Name"];
SPQuery qry = new SPQuery();
qry.QueryThrottleMode = SPQueryThrottleOption.Override;
//set the Query property as needed to retrieve your data
SPListItemCollection coll = theList.GetItems(qry);
//do something with the data
}
}
知道了以上的设置和一些影响阈值的属性,我们举一些例子来说明不同的设置对视图数据展示和查询的影响:
# 3000条item
EnableThrottling 属性值:true
默认视图:显示3000条item
List View Threshold值:2500
LIst View Threshold for Auditors and Administrators值:2800
Object Model Override:Yes
QueryThrottleMode:Override,并读取list中的所有item
用户类型 | 列表视图 | 对象模型 |
---|---|---|
Reader | 没有item显示,超过阈值 | 没有item返回,超过阈值 |
Super User | 没有item显示,超过阈值 | 没有item返回,超过阈值 |
Box Admin | 显示3000条item | 返回3000条item |
我们改一下“List View Threshold for Auditors and Administrators”的值:
#3000条item
EnableThrottling 属性值:true
默认视图:显示3000条item
List View Threshold值:2500
LIst View Threshold for Auditors and Administrators值:3500
Object Model Override:Yes
QueryThrottleMode:Override,并读取list中的所有item
用户类型 | 列表视图 | 对象模型 |
---|---|---|
Reader | 没有item显示,超过阈值 | 没有item返回,超过阈值 |
Super User | 没有item显示,超过阈值 | 返回3000条item |
Box Admin | 显示3000条item | 返回3000条item |
我们再改一下EnableThrottling属性:
#3000条item
EnableThrottling 属性值:false
默认视图:显示3000条item
List View Threshold值:2500
LIst View Threshold for Auditors and Administrators值:3500
Object Model Override:Yes
QueryThrottleMode:Override,并读取list中的所有item
用户类型 | 列表视图 | 对象模型 |
---|---|---|
Reader | 显示3000条item | 返回3000条item |
Super User | 显示3000条item | 返回3000条item |
Box Admin | 显示3000条item | 返回3000条item |
再改一下设置:
#3000条item
EnableThrottling 属性值:true
默认视图:显示2500条item
List View Threshold值:2500
LIst View Threshold for Auditors and Administrators值:3500
Object Model Override:Yes
QueryThrottleMode:Override,并读取list中的所有item
用户类型 | 列表视图 | 对象模型 |
---|---|---|
Reader | 显示2500条item | 没有item返回,超过阈值 |
Super User | 显示2500条item | 返回3000条item |
Box Admin | 显示2500条item | 返回3000条item |
1,可能会受到List Threshold影响的操作可以参考这篇文章(需要翻墙):点击打开链接
或者下载微软的文档:下载链接
其他的一些操作例如上传文档,签入文档等是不受List Threshold的限制的。
2,提升权限去处理Threshold。
在实际工作中,发现QueryThrottleMode并不管用,即使设置了,也不能提高查询的数量到管理员的水平,这种情况下可以提升权限到网站集管理员来运行CAML查询。
如果提升权限之后,还是如法满足要求获取数据,那只能是修改LIst Threshold,或者想其他的办法了。