這個(gè)問(wèn)題現在有了一些新的發(fā)現。
首先,我找到了重現客戶(hù)那里出現的那個(gè)復雜SQL語(yǔ)句的方法。這個(gè)現象其實(shí)是這樣的:
所以客戶(hù)那里出現那個(gè)SQL 語(yǔ)句的原因是 “List View Threshold“調整得太大。而”List View Threshold”調大的原因,是為了讓普通用戶(hù)能夠打開(kāi)文檔庫。
但是其實(shí)我們有更好的辦法可以在不調大“List View Threshold“(也就避免了SharePoint使用適合小數據量大SQL語(yǔ)句操作大數據量的文檔庫,從而造成性能問(wèn)題)的前提下,讓普通用戶(hù)也打開(kāi)文檔。
方法是執行下面的PowerShell 腳本。
$app=Get-SPWebApplication “http://<site url>”
$app.UnthrottledPrivilegedOperationWindowEnabled=$true
$app.DailyUnthrottledPrivilegedOperationsDuration=24
$app.Update()
這個(gè)腳本的目的是修改SharePoint對于大List/Library(也就是list item數量操作 List View Threshold的list )操作的一個(gè)開(kāi)關(guān)。SharePoint 2013可以規定一天中某些時(shí)段允許普通用戶(hù)打開(kāi)大List。默認是不允許的,目的是為了整個(gè)系統的Scalability。但是在客戶(hù)的這個(gè)環(huán)境中,訪(fǎng)問(wèn)這些大文檔庫是必須的,所以我們可以修改為一天中24個(gè)小時(shí)都能夠讓普通用戶(hù)訪(fǎng)問(wèn)大list。
這樣List View Threshold不再是限制用戶(hù)訪(fǎng)問(wèn)的一個(gè)閾值,而是SQL語(yǔ)句優(yōu)化的一個(gè)閾值。通常List View Threshold 設置5,000是比較合適的??蛻?hù)那里有約30,000個(gè)文檔,所以肯定會(huì )使用優(yōu)化的語(yǔ)句。
下面的PowerShell腳本可以比較方便地修改這個(gè)值。
$app=Get-SPWebApplication “http://<site url>”
$app.MaxItemsPerThrottledOperation=5000
$app.Update()
遺憾的是SharePoint這些比較高級的調優(yōu)功能(應該說(shuō)是設計很巧妙的),缺乏文檔說(shuō)明。所以很少有人知道。MSDN有關(guān)于這兩些設置的字面解釋?zhuān)菦](méi)有給出生動(dòng)的范例來(lái)說(shuō)明其用途。我們只能夠通過(guò)程序的調試,從源代碼中看出這些設置的實(shí)際用途。
聯(lián)系客服