<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    qileilove

    blog已經轉移至github,大家請訪問 http://qaseven.github.io/

    處理鎖、阻塞和死鎖(1)——確定長時間運行的事務

     前言:

      事務是OLTP系統中的主要部分。它管理數據一致性和數據并發問題,當多個資源同時被讀取或者修改相同數據時,SQLServer會通過鎖定機制來確保數據庫中的數據總是處于一個有效狀態。在SQLServer中,鎖管理器是負責實現這些鎖機制。SQLServer對于不同的資源類型提供不同的鎖類型,如數據庫、文件、對象、表、區、頁和鍵。

      當你使用事務時,依然會遇到由事務引起的問題,這些通常是由于鎖、阻塞和死鎖引起的。

      本系列將講解這三部分的概念。

      確定長時間運行的事務:

      長時間運行的事務會阻塞其他事務,并且引發新一輪的長時間運行事務!這將嚴重影響數據庫服務器的性能。

      作為DBA,你需要經常監控服務器的事務,當你發現有長運行的事務時,需要使用必須的步驟糾正。本文將講解通過事務的持續時間去監控這些事務,如果經常找到一些事務持續時間很長,你可能需要查找是否被其他事務阻塞了,或者深入研究事務的語句是否有問題。

      準備工作

      本文使用SQLServer2012的示例數據庫AdventureWorks2012數據庫。

      步驟:

      1、打開SQLServer,連接到AdventureWorks2012數據庫。

      2、輸入以下腳本,使其開啟一個簡單的事務:

    USE AdventureWorks2012
    GO
    BEGIN TRANSACTION
    SELECT  *
    FROM    Sales.SalesOrderHeader

      3、不關閉窗口,在新窗口中輸入以下代碼,監控當前正在運行的事務:

    SELECT  ST.transaction_id AS TransactionID ,
            DB_NAME(DT.database_id) AS DatabaseName ,
            AT.transaction_begin_time AS TransactionStartTime ,
            DATEDIFF(SECOND, AT.transaction_begin_time, GETDATE()) AS TransactionDuration ,
            CASE AT.transaction_type
              WHEN 1 THEN 'Read/Write Transaction'
              WHEN 2 THEN 'Read-Only Transaction'
              WHEN 3 THEN 'System Transaction'
              WHEN 4 THEN 'Distributed Transaction'
            END AS TransactionType ,
            CASE AT.transaction_state
              WHEN 0 THEN 'Transaction Not Initialized'
              WHEN 1 THEN 'Transaction Initialized & Not Started'
              WHEN 2 THEN 'Active Transaction'
              WHEN 3 THEN 'Transaction Ended'
              WHEN 4 THEN 'Distributed Transaction Initiated Commit Process'
              WHEN 5 THEN 'Transaction in Prepared State & Waiting Resolution'
              WHEN 6 THEN 'Transaction Committed'
              WHEN 7 THEN 'Transaction Rolling Back'
              WHEN 8 THEN 'Transaction Rolled Back'
            END AS TransactionState
    FROM    sys.dm_tran_session_transactions AS ST
            INNER JOIN sys.dm_tran_active_transactions AS AT ON ST.transaction_id = AT.transaction_id
            INNER JOIN sys.dm_tran_database_transactions AS DT ON ST.transaction_id = DT.transaction_id
    ORDER BY TransactionStartTime
    GO

      4、下面是結果的截圖:

      5、現在來關閉事務,在第一個窗口中輸入:

    ROLLBACK TRANSACTION
    GO

      分析:

      上面例子中先打開一個窗口,然后建立一個新查詢。在另外一個窗口中,查詢了當前正在運行的事務。

      本例中使用了下面3個DMV:

      1、sys.dm_tran_session_transactions:提供視圖相關的信息,并包含了特定會話的信息。

      2、sys.dm_tran_active_transactions:返回實例級別上,所以正在活動的事務信息。

      3、sys.dm_tran_database_transactions:返回數據庫級別上的事務信息。

      例子中使用了DB_NAME()來返回當前數據庫,作為篩選特定數據庫上的事務信息。

    posted on 2013-03-26 11:12 順其自然EVO 閱讀(374) 評論(0)  編輯  收藏 所屬分類: 測試學習專欄數據庫

    <2013年3月>
    242526272812
    3456789
    10111213141516
    17181920212223
    24252627282930
    31123456

    導航

    統計

    常用鏈接

    留言簿(55)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲国产精品自在自线观看| 亚洲妇女水蜜桃av网网站| 亚洲色大成网站www久久九 | 最近中文字幕无免费| 久久精品国产69国产精品亚洲| 人妻仑乱A级毛片免费看| 无码专区一va亚洲v专区在线| 亚洲av无码片在线观看| 四虎在线成人免费网站| 亚洲日本国产乱码va在线观看| 久久免费视频99| 97亚洲熟妇自偷自拍另类图片| 免费精品99久久国产综合精品| 精品久久久久久亚洲| 中文字幕不卡免费高清视频| 黑人大战亚洲人精品一区 | 国产精品国产免费无码专区不卡 | 日韩大片在线永久免费观看网站 | 99re视频精品全部免费| 图图资源网亚洲综合网站| 伊人久久免费视频| 亚洲一本之道高清乱码| 成人无遮挡裸免费视频在线观看| 亚洲午夜成人精品无码色欲| 国产成人在线观看免费网站 | 成人一区二区免费视频| 国产成人精品日本亚洲网站| 99精品在线免费观看| 自拍日韩亚洲一区在线| 日本免费一二区在线电影| 免费一级全黄少妇性色生活片 | 91免费福利精品国产| 色偷偷女男人的天堂亚洲网| 日韩免费a级在线观看| EEUSS影院WWW在线观看免费| 亚洲国产精品VA在线观看麻豆| 毛片免费全部播放无码| 亚洲gay片在线gv网站| 亚洲色大成网站www永久一区| 国产精品视频白浆免费视频| 亚洲六月丁香六月婷婷蜜芽|