リスト ビューのしきい値に関する SharePoint オンプレミス版の対処策
こんにちは、SharePoint サポートの森 健吾 (kenmori) です。
これまで、リスト ビューのしきい値に関して、複数の投稿をさせていただきました。
タイトル : リスト ビューのしきい値に関する FAQ
アドレス : https://blogs.technet.microsoft.com/sharepoint_support/2015/04/14/faq/
タイトル : リスト ビューのしきい値によって発生する現象と対処策
アドレス : https://blogs.technet.com/b/sharepoint_support/archive/2015/05/16/sharepoint-list-view-threshold-story.aspx
SharePoint オンプレミス版では、一時的にしきい値制限を解消するための方法がありますので、今回はその内容についてご紹介します。
なお、ここに記載する対処策は、SharePoint Online では実現できません。ファームを複数のテナント単位で共有する SharePoint Online では全世界のユーザーに影響するしきい値自身の無効化や変更はできませんので、ご了承ください。
1. SPList.EnableThrottling の使用
SharePoint サーバー サイド オブジェクト モデルを使用することで、リスト単位でリスト ビューのしきい値を無効にすることができます。
例えば、特にフォルダー直下ではなく、フォルダー配下の件数でしきい値に該当する事象 (フォルダーの URL 変更や集計列の追加など) は、運用における一時的な変更です。これらを実行する際には、サーバーのメンテナンス時や夜間など、ユーザーアクセスが少ない時間帯に、一時的にしきい値を無効化して対処して実行してしまう方法が考えられます。
タイトル : SPList.EnableThrottling property
アドレス : https://msdn.microsoft.com/en-us/library/office/microsoft.sharepoint.splist.enablethrottling.aspx
$web = Get-SPWeb https://sharepoint/sites/site
$list = $web.GetList("/sites/site/Shared%20Documents")
$list.EnableThrottling = $false
$list.Update()
2. システム管理者アカウントで処理を行う。
ソフトウェアの境界と制限に記載されているとおり、管理者のしきい値にはより大きな値が設定されています。そのため、代わりにシステム アカウントなどの管理者権限で操作を行う方法も対処策のひとつです。
タイトル : ソフトウェアの境界と制限 (SharePoint 2013)
アドレス : https://technet.microsoft.com/ja-jp/library/cc262787(v=office.15)
リスト ビューのしきい値 |
5,000 |
しきい値 |
管理者によって設定される、クエリが制限されない時間帯の範囲外で、クエリなどのデータベース操作が同時に処理できるリストまたはライブラリのアイテムの最大数を指定します。 |
監査者と管理者に対するリスト ビューのしきい値 |
20,000 |
しきい値 |
適切な権限を持つ監査者または管理者によって実行されたときに、クエリなどのデータベース操作が同時に処理できるリストまたはライブラリのアイテムの最大数を指定します。この設定は [オブジェクト モデルの上書きを許可する] と併せて機能します。 |
なお、プログラム開発でSPSecurity.RunWithElevatedPrivilegesメソッドを使用して昇格したコードや、SPSite, SPWeb オブジェクトを偽装したコードからリストを参照しても、管理者に対するリスト ビューのしきい値を使用して問題を回避できません。しきい値に関しては、偽装 (権限の昇格) アクセスではなく、システム アカウントで直接ログインする必要があります。
3. リスト ビューのしきい値を一時的に変更する。
SharePoint オンプレミスでは、リスト ビューのしきい値は設定可能な値です。下記の手順で設定変更可能となります。
1) SharePoint サーバーの全体管理にアクセスします。
2) [Web アプリケーションの管理] にアクセスします。
3) Web アプリケーションを選択し、[全般設定] – [リソースの調整] をクリックします。
4) リスト ビューのしきい値に一時的に大きな値を設定します。
5) [OK] をクリックします。
上記の画面には、回避策 2 でお伝えした管理者に対するリスト ビューのしきい値 (20000) も定義されております。
なお、リスト ビューのしきい値に関する FAQ にて記載した通り、SharePoint Server 2013 からはコンテンツ データベース内のほとんどのテーブルに対してロックエスカレーションが無効化される定義 (LOCK_ESCALATION = DISABLE) が追加されております。そのため、5000 件という絶対値以上のレコードにアクセスすること自体に制約はありません。むやみに高い値を設定することは推奨しませんが、サーバー スペックが高い場合は、テストしながら設定値を少しずつ増やすということも可能となります。
本投稿は以上になります。