程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> 新解決SQL Server並發的方法

新解決SQL Server並發的方法

編輯:關於MYSQL數據庫

      您可以在優化數據庫查詢,升級數據庫服務器,但仍不足以保證應用程序良好的數據庫性能.這是因為問題可能產生於系統中並發(指同步)地執行查詢操作.實際上,在產品化的數據庫系統中,同步執行查詢可能引發的問題是再多的查詢優化也不能解決的.我們可以有最優化的、執行最快的查詢,但是,如果這些查詢因為並發問題得不到需要的數據,說明優化工作還做得不夠充分。

      從根本上講,我們必須保證數據庫查詢和執行查詢的連接必須能夠在並發執行中沒有錯誤(如死鎖或更新沖突),並能在可接受的等待時間內得到結果.如果不能做到,就要定位並發問題並找出原因:為什麼獨立運行查詢時正確,並發運行時就出問題.

      解決並發問題的過程是一個基於經驗的過程.模仿產品環境並不容易,從許多同步連接中預測查詢操作並發時的行為也很難.這就是為什麼必須經常保留系統狀態,才能在並發問題發生時診斷問題的原因.

      大多數情況下並發問題是一個SQL Server進程(或任務)等待某種資源,而這種資源還沒有被其他進程釋放.如果兩個進程串行,就不會有沖突;當它們並行時,對某種資源的沖突就產生了.這些等待大多由對用戶資源的鎖請求造成的.

      在本章中,我們將會學習到解決並發問題的技術.概括地講,就是診斷和解決以下情況:鎖、阻塞和死鎖.基本的方法簡單明了:

      ● 識別並發問題;

      ● 分析和找出原因;

      ● 修改並解決問題.

      使用這種方法需要我們熟悉相當多的背景資料.本章假設讀者已經閱讀或已經熟悉Kalen Delaney寫的Inside SQL Server 2005:The Storage Engine第8章“鎖和並發”中的內容(見本書參考書目中的引用:其他資源和引用).確切地說,那個章節包含必需的資料,關於SQL Server 2005中事務、隔離級別和鎖等解決並發問題需要的內容.

      1、解決並發問題的新工具

      SQL Server 2005增加了一些重要的解決並發問題的新工具.除了新增的工具,它仍然包含原來的一些工具,如sp_who2等系統存儲過程、Perfmon計數器,解決並發問題的SQL Trace/Profiler工具等.

      為了檢測和分析並發問題,SQL Server 2005包括了以下新工具:

      DMV,特別是sys.dm_os_wait_stats和sys.dm_os_waiting_tasks.

      加強的SQLDiag.exe功能,收集運行系統的信息.

      基於行版本的隔離選項(“快照”和“已提交讀快照”隔離級別).

      新的1222跟蹤標識和SQL Trace檢測分析死鎖的“死鎖圖表”事件類.

      SQL Trace/Profiler中的被阻進程報告事件類,和檢測長阻塞的“被阻塞進程阈值”服務器配置選項.

      新計數器 “SQLServer:Transactions Perfmon”對象,用來檢測“快照隔離”事務中的更新沖突,計算在tempdb中版本存儲的使用量.

      目前,新工具中有兩個最基本的工具值得注意:用於檢測的sys.dm_os_waiting_tasks DMV和為了決議的基於行版本的隔離級別.在這裡我們只概括地進行介紹,講到解決問題的特定技術時再介紹更多的細節.

      (1)新阻塞檢測工具:sys.dm_os_waiting_tasks

      sys.dm_os_waiting_tasks是SQL Server 2005檢測並發問題阻塞類型最重要的新工具.這個DMV顯示所有任務的等待信息.並不是所有等待任務都是阻塞的,因為任務可能等待I/O或內存授權.當一個任務等待另一個任務相對長時間時,它就會被阻塞.當一個任務A被另一個任務B阻塞,阻塞任務B將在視圖中顯示.

      這個視圖的優點之一是它列出了任務和進程.任務表現出比SPID(服務器進程ID)更詳細的SQL Server執行細節.如果進程是並行的,一個給定的SPID可能包含一些同步任務;如果spid不是並行的,任務就只有一個spid.

      導致任務等待的原因有很多,許多和並發沒有任何關系.所以從視圖中過濾出不相干的行很重要,從而可以更好地關注由於資源鎖定引起的阻塞問題.

      (2)新阻塞決議工具:基於行版本控制的隔離級別

      另一個主要的新工具由使用基於行版本的“快照隔離”選項組成,它減少了鎖的數量,從而減少阻塞和死鎖.確切地說,行版本可以減少或去除事務內外部的共享鎖.因此,由於發行共享鎖而可能被阻塞的查詢和事務就不再被阻塞了.和使用NOLOCK提示不同,這些查詢只會讀取已提交的數據.

      使用基於行版本的隔離級別在某些方面有一定作用,包括tempdb中由於行版本增長的活動、使用某個或全部“快照隔離”選項時觸發器需要的代碼改動,以及使用SNAPSHOT隔離級別時DDL選項與可能丟失的更新之間的沖突.

      2、並發問題的類型

      當一個SQL Server進程或任務在等待時,它通常在等待某種被另一個SQL Server鎖定的資源.最可能遇到的並發問題和鎖有關,包括下面的內容:

      ● 鎖定

      ● 阻塞

      ● 死鎖

      ● tempdb使用

      ● 更新沖突

      前3種與以下內容相關:鎖定是SQL Server基本的並發機制,阻塞發生於一個任務必須等待被另一個任務鎖定的資源時,死鎖發生於任務之間互相阻塞時.

      列表中後面兩種產生於使用行版本.一般來說,我們可能看到增長的tempdb活動與行版本使用有關,可能還有一些性能問題與之相關.(我們可能也需要定位其他與tempdb相關的並發問題,例如與高頻率創建臨時表格相關的高tempdb活動性.)此外,當使用寫數據庫事務的“快照”隔離級別時,我們可能發現更新沖突的案例。

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved