<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)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 处破女第一次亚洲18分钟| 一级毛片免费毛片一级毛片免费| 免费无码肉片在线观看| 亚洲欧洲精品久久| 亚在线观看免费视频入口| 人人狠狠综合久久亚洲婷婷| 亚洲精品视频免费观看| 国产成人精品亚洲精品| 9久久免费国产精品特黄| 中文字幕日韩亚洲| 国产性生大片免费观看性 | www免费黄色网| 久久久久亚洲精品男人的天堂| 免费高清A级毛片在线播放| 亚洲精品国自产拍在线观看| 国产无限免费观看黄网站| 亚洲AV无码专区国产乱码4SE| 免费无码又爽又刺激高潮视频| 亚洲成人网在线观看| 欧洲精品成人免费视频在线观看| 亚洲欧美日韩中文字幕在线一区| 国产免费观看黄AV片| 久久国产乱子伦精品免费午夜 | 日韩电影免费在线观看中文字幕| 亚洲精品综合一二三区在线| 亚洲综合免费视频| 亚洲人成无码网站在线观看| 亚洲成a人片在线观看久| a级在线观看免费| 亚洲sss综合天堂久久久| 免费人成年激情视频在线观看| 精品国产污污免费网站入口| 久久精品国产亚洲av麻豆色欲| 思思99re66在线精品免费观看| 一区二区三区视频免费| 亚洲一区二区中文| 国产免费69成人精品视频| 男女拍拍拍免费视频网站| 亚洲成av人片不卡无码| 国产午夜影视大全免费观看| 人妻在线日韩免费视频|