2017-05-19 143 views
3

首先,這裏是我們的設置:如何明確解決此錯誤:由於內存不足,.NET Framework執行被升級策略中止?

  • 的SQL Server 2014 SP2標準版64位
  • 的128GB RAM(最大通過標準版允許的),其中120GB被分配給SQL Server
  • 服務器目前擁有〜5000個數據庫,這些都是相似的(相同的表,存儲過程等),總共690GB的數據(MDF文件只)

現在發生了什麼:

飄飛,服務器已經運行了一段時間後,我們收到了一些數據庫執行查詢時,此錯誤:

.NET Framework execution was aborted by escalation policy because of out of memory 

這個錯誤發生更多的時候,當我們執行的所有客戶端數據庫的更新(當我們啓動一個功能時)使用Red Gate SQL Multi Script。在〜5000 DBS中,我們有70個錯誤。再次運行更新腳本,錯誤發生在一個部分上,依此類推,直到我們正確更新所有數據庫。這只是煩人的。

我們有這個錯誤很長一段時間。我們的服務器有64GB的內存,所以我們只是增加了更多的內存來最大限度地使用SQL Server標準編輯器,但是仍然在幾天後出現錯誤。我們認爲這個錯誤可能是其他問題的症狀。

幾件事情,可能有助於得到一個答案:

  • 我們的SQL Server的版本是64位的,所以我們認爲我們沒有對付Virtual Address Space Reservation
  • 錯誤還發生當從用PHP/Linux編寫的客戶端應用程序運行時,所以我們不是在談論.NET框架的客戶端代碼
  • 在我們的數據庫中,我們製作的.NET框架的唯一用法是GROUP_CONCAT,一個.NET CLR程序集用戶定義函數幫助我們模擬MySQL GROUP_CONCAT聚合。我們在每個5000客戶端數據庫中都有一個程序集的副本。
  • 我們已經試圖降低max server memory設置(以96GB),但我們仍然得到這些錯誤

如果需要更多的信息,我會更新我的問題。

+1

我認爲CLR沒有足夠的內存。這裏是很好的文章,希望它有幫助:https://www.johnsansom.com/sql-server-memory-configuration-determining-memtoleave-settings/ –

回答

0

自我嘗試修復已經4個月了,我沒有再次遇到這個錯誤。儘管如此,我沒有錯誤的確切解釋,但這裏是我的嘗試,它似乎工作:

我的猜測是在我們的每個5000 +數據庫中有相同的.NET CLR程序集可能是在某些方面問題和增加的內存使用情況。

  1. 我創建了一個新的數據庫名字類似DotNetClrUtils
  2. 我複製了。NET CLR大會在此數據庫GROUP_CONCAT
  3. 我改變GROUP_CONCAT所有使用我們所有的客戶端代碼和存儲過程來引用單個實例中DotNetClrUtils數據庫(調用它像這樣:DotNetClrUtils.dbo.GROUP_CONCAT_D(col, ',')

這一切,現在這個問題消失了!

相關問題