當您執行 SQL Server 2008年或 SQL Server 2005 在系統上的效能或記憶體問題都有 64 個以上的邏輯處理器

徵狀

請試想下列案例:

  • 您可以安裝 Microsoft SQL Server 2008年或 Microsoft SQL Server 2005年。

  • 在其安裝 SQL Server 的電腦有 64 個以上的邏輯處理器。

  • 非統一記憶體存取 (NUMA) 已啟用。

在此案例中,您會遇到會影響效能或記憶體使用量的問題。例如,您會遇到下列一或多個下列問題:

  • SQL Server 錯誤記錄檔中,可能會記錄類似下列其中一項的錯誤訊息:

    錯誤訊息 1

    2013-07-17 05:10:31.02 伺服器 IO 完成接聽程式 (0x27a0) 工作者 0x00000000516A41A0 似乎非傳送節點 3 」 上。預估 CPU 用於: 核心 0 毫秒,使用者 14991 的 ms 間隔: 15001

    錯誤訊息 2

    等候緩衝閂-4 的型別、 bp 000000008BFEF300、 頁面 1:6908、 stat 0x35c0000b、 資料庫識別碼時發生逾時的 2013年-07-17 05:15:02.83 spid707: 月 4 日,配置單位識別碼: 72057594041860096,工作 0x000000005166D048: 0,waittime 300,旗標 0x1a,擁有工作 0x0000000005C4F4C8。不繼續等候。

    錯誤訊息 3

    2013-07-17 05:44:18.71 spid690 錯誤: 701,高的嚴重性等級: 17,狀態: 42.2013-07-17 有 05:44:18.71 的 spid690 是資源不足的系統記憶體集區 '預設' 若要執行這項查詢。

  • SQL Server 會停止回應使用者的查詢。

  • 在受影響的 SQL Server 安裝,就會發生無法解釋的成長,記憶體使用量。

  • 由延遲寫入器的背景執行緒所執行的作業無法完成如預期般運作。例如,可能會不會完成下列作業:

    • 不會更新目前的時間戳記。因此,所有的資料庫分頁有相同的時間戳記,並且延遲寫入器執行緒無法收回任何緩衝區。

    • 效能監視器 (Perfmon.exe) 中的緩衝區集區計數器不會更新,而且可以永遠會顯示"0"(零)。

    • 無法動態變更的最小的記憶體和記憶體的最大伺服器設定。

    • 長時間執行輸入/輸出偵測運作不如預期。

    • 緩衝集區不切換到 [記憶體穩定的狀態,並在它保留 「 離開 」 的緩衝區。

原因

因為 SQL Server 2008年,以及 SQL Server 2005 不是處理器群組 (K 群組的設定) 注意,可能會發生這些問題。建立在 NUMA 節點 0 的主體延遲寫入器執行緒負責與 SQL Server 記憶體管理員相關的許多內部管理活動。不過如果處理程序在處理器上執行,可能無法啟動執行緒延遲寫入器群組其他具有 64 個以上的邏輯處理器,且也具有 NUMA 設定的電腦上的第一個群組。附註用完記憶體不足 (OOM) 訊息時,會一般內部管理活動,通常是由延遲寫入器執行緒不會發生。即使沒有足夠的可用記憶體,就可能發生這個問題。錯誤、 閂鎖逾時、 及其他問題,這可能會造成 「 非傳送 IOCP 接聽程式 」。

解決方案

SQL Server 2008

如果要解決這個問題,在 SQL Server 2008年中的,下載並安裝 Microsoft SQL Server 2008 Service Pack 3 (SP3)。若要取得下載套件,並需 SQL Server 2008 SP3 的詳細資訊,請移至下列的 Microsoft 下載中心 」 網站:

SQL Server 2008 Service Pack 3

因應措施

SQL Server 2008年,SQL Server 2005

若要解決這個問題,SQL Server 2008年,以及 SQL Server 2005 中,停用 NUMA。若要停用 NUMA,啟用追蹤旗標 8015,SQL Server 服務啟動時執行。附註如果要在停用 NUMA 之後,您可以使用系統中的所有處理器。不過,效能可能會比較不理想因為會有所有處理器的單一延遲寫入器/IOCP 接聽程式。

SQL Server 2005

若要解決這個問題,SQL Server 2005 中,我們建議,您僅限於 64 的作業系統可用的處理器數目。若要限制可用處理器數目,請依照下列步驟執行:

  1. 按一下 [開始],按一下 [執行]、 輸入msconfig,,然後按一下[確定]

  2. 在 [系統組態編輯程式] 對話方塊中,按一下 [開機]。INI ] 索引標籤。

  3. 開機中。INI索引標籤上,按一下 [進階選項

  4. 開機中。INI 進階選項對話方塊中,選取/NUMPROC = ] 核取方塊。

  5. 在清單中下一步就是/NUMPROC =核取方塊,選取一個值小於或等於 64,,然後按一下[確定]

  6. 在 [系統組態編輯程式] 對話方塊中,按一下[確定]

  7. 重新啟動伺服器。

參考

如需有關 SQL Server 2008 SP3,包括 < 原因=""> 一節所述的 NUMA 問題中所修正的問題按一下文件編號,檢視 「 Microsoft 知識庫 」 中的文件:

2546951 SQL Server 2008 Service Pack 3 所修正的問題清單如何將 SQL Server 或 SQL Server 代理程式指派給處理器群組的相關資訊,請移至下列的 MSDN 網站:

指定 SQL Server,處理器群組 (OOM,擱置,效能計數器一定是零緩衝集區,...) 的 SQL 代理程式如需有關 NUMA 組態的詳細資訊,請移至下列 MSDN 網站:

SQL Server: 釐清 NUMA 組態資訊有關 NUMA 組態的外部索引的網頁,收到下列的 MSDN 網站:

它的運作方式: SQL Server 2008 NUMA 和外部索引的網頁

需要更多協助?

擴展您的技能
探索訓練
優先取得新功能
加入 Microsoft 測試人員

這項資訊有幫助嗎?

感謝您的意見反應!

感謝您的意見反應! 我們將協助您與我們的其中一個 Office 支援專員連絡以深入了解您的意見。

×