• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Prayer

            在一般中尋求卓越
            posts - 1256, comments - 190, trackbacks - 0, articles - 0
              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

            常見DB2鎖等待解決流程 牛新莊的

            Posted on 2009-08-07 09:30 Prayer 閱讀(1215) 評論(0)  編輯 收藏 引用 所屬分類: DB2

            以下內容摘錄自《DB2性能調整和優化》一書鎖一章,如果轉載務必指明出處!

            大家可以到卓越網上購買,鏈接地址如下:

            http://www.amazon.cn/search/search.asp?searchKind=author&searchWord=%E7%89%9B%E6%96%B0%E5%BA%84&searchType=1&sortType=market
             

            鎖等待是實際生產中最常碰到的性能問題,下面我們總結了鎖等待問題的解決流程和步驟。現在的情況是一個應用系統中出現很多鎖等待導致系統出現性能問題。我們可以執行如下步驟來解決鎖等待問題:

            1、首先把數據庫監控開關打開:

            db2 update dbm cfg using DFT_MON_LOCK on DFT_MON_STMT on

            db2  update monitor switches using lock ON sort ON bufferpool ON uow ON table ON statement ON
             

            2、利用DB2表函數編寫一個監控SQL腳本。

            select AGENT_ID ,substr(STMT_TEXT,1,100) as statement,STMT_ELAPSED_TIME_MS  from table(SNAPSHOT_STATEMENT('SAMPLE',-1)) as B where AGENT_ID in (select AGENT_ID_HOLDING_LK from table(SNAPSHOT_LOCKWAIT('SAMPLE',-1)) as A  order by  LOCK_WAIT_START_TIME ASC FETCH FIRST 20 ROWS ONLY ) order by STMT_ELAPSED_TIME_MS DESC-----這個腳本非常實用,希望大家熟悉掌握
             

            此語句,會按照執行時間的長短的先后順序排列出所有造成lockwait的sql語句。

            3、我們可以把這個腳本寫到一個shell腳本中,每隔三秒鐘(不一定是3秒,也可以1秒)運行一次,把監控結果管道累加輸出到一個文件。

            #!/usr/bin/ksh

            #

            dbname=$1

            #create a log file

            filename=find.locksql.$(date+'%m%d%H%M%S')

            touch $filename


            #connect to database

            echo now,connecting to database: $dbname

            db2 "connect to $dbname"

            db2 "update dbm cfg using DFT_MON_LOCK on DFT_MON_STMT on"

            db2  "update monitor switches using lock ON sort ON bufferpool ON uow ON table ON statement ON"

            echo now,finding the SQLs which made lockwait

            db2  "select AGENT_ID ,substr(STMT_TEXT,1,100) as statement,STMT_ELAPSED_TIME_MS  from table(SNAPSHOT_STATEMENT('$dbname',-1)) as B where AGENT_ID in (select AGENT_ID_HOLDING_LK from table(SNAPSHOT_LOCKWAIT('$dbname',-1)) as A  order by  LOCK_WAIT_START_TIME ASC FETCH FIRST 20 ROWS ONLY ) order by STMT_ELAPSED_TIME_MS DESC" > $filename


            echo The SQLs have saved to the file $filename
             

            4、 一旦定位引起鎖等待的SQL語句后,如果該SQL語句寫的效率很低下,可以考慮對該SQL語句作出調整;如果該SQL語句上沒有創建最合理的索引,嘗試使用db2advis工具為引起鎖等待的SQL語句創建最合理的索引。嘗試調優引起鎖等待的SQL語句。

            5、 如果創建索引和調優SQL語句仍然不能解決問題,考慮能否根據業務邏輯選擇UR隔離級別。但是這種方式只能解決讀的問題。

            6、 在業務邏輯允許的情況下,考慮設置DB2_EVALUNCOMMITTED、DB2_SKIPDELETED和DB2_SKIPINSERTED來提高并發。

            7、 最后考慮能否對引起鎖等待的SQL語句關聯的表做數據歸檔,業務分離等手段。

            傳統的鎖定方法會導致應用程序互相阻塞。當一個應用程序必須等待另一個應用程序釋放其鎖定時,阻塞就會發生。用于處理這種阻塞的影響的策略通常會提供一種機制以指定最大可接受阻塞持續時間。這就是應用程序在不能獲取鎖定的情況下在返回之前等待的時間。 

              以前,只能在數據庫級別通過更改 locktimeout 數據庫配置參數的值來指定鎖定等待超時時間。鎖定等待策略通過新的 SET CURRENT LOCK TIMEOUT 可以在語句級別指定(DB2 V9.5以后),此語句更改 CURRENT LOCK TIMEOUT 專用寄存器的值。CURRENT LOCK TIMEOUT 專用寄存器指定在返回指示不能獲取鎖定的錯誤之前等待鎖定的秒數。

             


            本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/db2cn/archive/2009/07/11/4340511.aspx

            久久国产精品一国产精品金尊 | 中文字幕乱码久久午夜| 久久久久国产日韩精品网站| 99久久精品国产麻豆| 国产一区二区精品久久岳| 久久99精品久久久久久水蜜桃| 久久久久九九精品影院| 久久91精品国产91久| 久久久久久国产a免费观看黄色大片| 中文字幕无码免费久久| 免费国产99久久久香蕉| 色婷婷噜噜久久国产精品12p| 中文精品久久久久人妻不卡| 99国产精品久久| 狠狠色丁香久久婷婷综合图片| 麻豆亚洲AV永久无码精品久久| 久久精品国产亚洲一区二区三区 | 国产日产久久高清欧美一区| 久久久久亚洲爆乳少妇无| 亚洲AV无码久久精品色欲| 国产99久久久久久免费看| 亚洲精品乱码久久久久久中文字幕| 久久免费视频观看| 久久香蕉超碰97国产精品| 欧美无乱码久久久免费午夜一区二区三区中文字幕 | 久久久久国产一区二区| 久久这里只有精品18| 亚洲综合久久夜AV | 国产精品成人久久久久三级午夜电影| 日韩精品久久久久久久电影蜜臀| 理论片午午伦夜理片久久| 久久精品一区二区国产| 久久久无码人妻精品无码| 久久亚洲日韩看片无码| www亚洲欲色成人久久精品| 久久精品人人槡人妻人人玩AV | 久久久久亚洲AV无码观看| 久久久99精品成人片中文字幕| 四虎国产精品免费久久久| 久久精品国产99国产精品澳门| 国产精品久久久久天天影视|