C-Sharp

如何保證對 SQL Server 2008 R2 的插入首先記憶體在 RAM 中?

  • February 3, 2012

想像一個“突發”的數據流,即它可能有 10,000 個事件很快到達,然後一分鐘內甚麼也沒有。

在此處輸入圖像描述

您的專家建議:如何為 SQL Server 編寫 C# 插入程式碼,以保證 SQL 將所有內容立即記憶體在其自己的 RAM 中,而不會阻塞我的應用程序超過將數據輸入所述 RAM 所需的時間?為了實現這一點,您是否知道設置 SQL 伺服器本身的任何模式,或者設置我正在寫入的各個 SQL 表的模式?

當然,我可以做我自己的版本,包括在 RAM 中建構我自己的隊列——但我不想重新發明舊石器時代的石斧,可以這麼說。

你有沒有試過寫信看看會發生什麼?你有一個已知的瓶頸嗎?

如果您需要防止您的應用程序被阻止,那麼一種方法是將寫入排隊以推遲數據庫呼叫。但是,我希望隊列在一兩秒內清除:所以如果可以的話,你需要一個隊列嗎?

或者您可以將其放到臨時台上,然後再沖洗?我們使用這種技術來處理每分鐘數百萬新行的持續寫入(我們實際上使用帶有簡單恢復的暫存數據庫):但直到我們有僅寫入行的經驗才實現它。

注意:SQL Server 中的每次寫入都將作為預寫日誌 (WAL) 協議的一部分執行磁碟。這適用於該寫入的 t-log 條目。

帶有該行的數據頁將在某個時間點(基於時間、使用、記憶體壓力等)進入磁碟,但通常您的數據無論如何都會在記憶體中。這稱為“檢查點”,不會從記憶體中驅逐數據,只是刷新更改(2011 年 11 月 24 日編輯)

編輯:

出於全面考慮,根據上面的最後一段,將此數據庫的 LDF 轉移到一組專用磁碟以獲得更高的性能。同上一個暫存數據庫(MDF/LDF 各一個)。為您的數據庫伺服器擁有十幾個或三個不同的捲(通常通過 SAN)是很常見的

引用自:https://dba.stackexchange.com/questions/12185