51CTO 博客链接:https://blog.51cto.com/u_13637423
最近一段时间,给客户或者Partner处理问题时,经常面临SharePoint 列表视图阈值问题,今天整理本文给大家介绍一下如果大家有存储items数量比较多的大型列表,如何克服SharePoint Online List View Threshold的问题,比如说列表中的项目数超过了列表视图阈值5000个items,无法正常显示等等。
首先,这里给大家介绍一下什么是列表视图阈值?
在SharePoint Online中,Microsoft 设置了一个阈值或者限制,一次在单个视图中检索的项目或者文件不得超过5000个,这样在从大型的SharePoint List或者Document Library中检索item或者document时,就不会出现性能问题。
如果你打开一个列表视图,它视图检索超过5000个items的时候,页面会提示:The number of items in this list exceeds the list view threshold, which is 5000 items. Tasks that cause excessive server load (such as those involving all list items) are currently prohibited
一旦出现列表阈值问题,你将无法在列表中执行任何操作,比如无法对某个item或者folder单独授权权限,会有如下错误提示:the attempted operation is prohibited because it exceeds the list view threshold
说明:上述问题只发生在特定的视图中显示超过5000个items的时候,会出现问题,但不影响我们在列表中存储items,因为我们可以最多存储30 million 个item或者document。
那么为什么SharePoint List View会出现5000阈值错误呢?实际上SharePoint 列表视图阈值限制是来自于SQL服务器,因为List data和List Column存储在单个SQL表中,在SharePoint中浏览List时,SharePoint会自动将查询发送给SQL,后者将返回用户请求结果。对于Performance view,如果SQL在单个SQL表中执行查询(如果超过5000个items时),则SQL会将执行查询时锁定整个表,比如说SharePoint Online的某个list中存储10000个item,当你尝试在视图中显示它们时,在后台会触发一个对SQL的查询,这就产生了问题,暂时锁定了SQL table。
那么如何克服和解决List View Threshold的问题呢?
如果要解决这个问题,就不要在单个时间点检索或者获取超过5000个items。推荐以下4种解决方案:
方案1:使用SharePoint List Modern Experience
在SharePoint Online中,你可以对list或者library启用Modern Experience,与Classic 对比,他们的分页工作方式不同,如下所示:
方案2:创建多个List View或者给List View添加Filter
· 创建多个List View,因为每个View可以以不同的方式显示内容,所以可以根据用户的需求,创建多个List View将Items数量降低到5000以下。
· 给List View添加Filter,我们可以根据实际需求,来给List View添加Filter,比如按照Item的创建或者修改时间进行过滤,让其Item返回的值小于5000
方案3:添加Index
添加Index,向List Column添加Index,用于排序和筛选View,这样会绕过阈值,但我们只能在list中添加20个index column。
方案4:为List或者Library启用Automatic Index management
如果用户在List或者Library的Advanced Settings中启用了Automatic Index management,那么会在SharePoint Online中关联一个Large list column index management的timer job,这样当list中的item超过2500时,会自动创建索引。
SharePoint Online的List view threshold不同于SharePoint Server,可以在管理中心调整其value等于20000,SharePoint Online是无法更改的,所以如果大家遇到相关问题,可以尝试上述4种解决方案,谢谢大家阅读。