Sql-Server

使用較低的隔離級別會提高 OLTP 性能嗎?

  • December 14, 2016

我們有一個 SQL Server 2008 R2 實例,它每天從 CTI 和 AVR 等自動設備獲取數百萬行數據。在同一情況下,有許多分析數據的繁重報告。

我正在研究將這些活動分成兩個不同的過程的選項:

  1. 從自動設備中獲取行。
  2. 分析數據並生成大量報告。

我計劃嘗試將第一個程序的隔離級別設置為最低(讀取未送出),因為數據完整性不是這樣的問題。

我會從最低隔離級別的分離和使用中獲得顯著的性能提升嗎?

SQL Server 2008 解決方案

看到您正在考慮將數據庫複製到兩個實例中,將隔離級別從預設的已送出隔離級別更改為未送出讀不會有太大影響。

參考:數據庫引擎中的隔離級別

插入發生在沒有任何活動 (SELECT) 查詢的 instance1.database 上。

將數據從 instance1.database 傳輸到 instance2.database(報告數據庫)在夜間會產生很小的影響。否則,在正常辦公時間訪問 instance2.database 時,使用者不會受到 instance1.database 上發生的 INSERT 的影響。

無需更改隔離級別。

替代解決方案:可用性組

使用更新的 SQL Server 版本(2012 或更高版本)和可用性組可能會更好。通過這種方式,您可以將實時數據發送到 AG,並且您只需將第二個副本配置為只讀,然後您可以查詢該副本以進行報告。這記錄在 MSDN 文章中:

在可用性副本 (SQL Server) 上配置只讀訪問

這是AlwaysOn 可用性組 (SQL Server)的概述

有 3 種可能的事情要尋找:

  1. 閱讀數據載入性能指南並調整載入方法和一些好的技巧
  2. 確保使用合理的值調整自動增長設置,以在插入期間盡可能減少自動增長事件

2.a 載入完成後更新您的統計數據。這將有助於查詢優化器生成更好的計劃。 3. 您受到您使用的 sql server 版本的限制。SQL Server 2016 專為此類分析和繁重的工作負載而設計。使用聚集和非聚集列儲存索引和記憶體優化表。想想可能的升級!

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