日本好好热aⅴ|国产99视频精品免费观看|日本成人aV在线|久热香蕉国产在线

  • <cite id="ikgdy"><table id="ikgdy"></table></cite>
    1. 西西軟件園多重安全檢測(cè)下載網(wǎng)站、值得信賴的軟件下載站!
      軟件
      軟件
      文章
      搜索

      首頁(yè)西西教程數(shù)據(jù)庫(kù)教程 → SQL事務(wù)阻塞分析

      SQL事務(wù)阻塞分析

      相關(guān)軟件相關(guān)文章發(fā)表評(píng)論 來源:本站整理時(shí)間:2010/9/16 17:53:32字體大。A-A+

      作者:中國(guó)風(fēng)(Roy)點(diǎn)擊:89次評(píng)論:1次標(biāo)簽: SQL

      • 類型:電子教程大。8.5M語(yǔ)言:中文 評(píng)分:8.3
      • 標(biāo)簽:
      立即下載

      --阻塞
      /***********************************************************************************************************************
      阻塞:其中一個(gè)事務(wù)阻塞,其它事務(wù)等待對(duì)方釋放它們的鎖,同時(shí)會(huì)導(dǎo)致死鎖問題。

      --生成測(cè)試表Ta
      if not object_id('Ta') is null
      drop table Ta
      go
      create table Ta(ID int Primary key,Col1 int,Col2 nvarchar(10))
      insert Ta
      select 1,101,'A' union all
      select 2,102,'B' union all
      select 3,103,'C'
      go
      生成數(shù)據(jù):
      /*
      表Ta
      ID Col1 Col2
      ----------- ----------- ----------
      1 101 A
      2 102 B
      3 103 C

      (3 行受影響)
      */

      將處理阻塞減到最少:
      1、事務(wù)要盡量短
      2、不要在事務(wù)中請(qǐng)求用戶輸入
      3、在讀數(shù)據(jù)考慮便用行版本管理
      4、在事務(wù)中盡量訪問最少量的數(shù)據(jù)
      5、盡可能地使用低的事務(wù)隔離級(jí)別

      go
      阻塞1(事務(wù)):
      --測(cè)試單表

      -----------------------------連接窗口1(update\insert\delete)----------------------
      begin tran
      --update
      update ta set col2='BB' where ID=2
      --或insert
      begin tran
      insert Ta values(4,104,'D')
      --或delete
      begin tran
      delete ta where ID=1

      --rollback tran

      ------------------------------------------連接窗口2--------------------------------
      begin tran
      select * from ta

      --rollback tran

      --------------分析-----------------------
      select
      request_session_id as spid,
      resource_type,
      db_name(resource_database_id) as dbName,
      resource_description,
      resource_associated_entity_id,
      request_mode as mode,
      request_status as Status
      from
      sys.dm_tran_locks
      /*
      spid resource_type dbName resource_description resource_associated_entity_id mode Status
      ----------- ------------- ------ -------------------- ----------------------------- ----- ------
      55 DATABASE Test 0 S GRANT NULL
      54 DATABASE Test 0 S GRANT NULL
      53 DATABASE Test 0 S GRANT NULL
      55 PAGE Test 1:201 72057594040483840 IS GRANT
      54 PAGE Test 1:201 72057594040483840 IX GRANT
      55 OBJECT Test 1774629365 IS GRANT NULL
      54 OBJECT Test 1774629365 IX GRANT NULL
      54 KEY Test (020068e8b274) 72057594040483840 X GRANT --(spID:54請(qǐng)求了排它鎖)
      55 KEY Test (020068e8b274) 72057594040483840 S WAIT --(spID:55共享鎖+等待狀態(tài))
      (9 行受影響)
      */

      --查連接住信息(spid:54、55)
      select connect_time,last_read,last_write,most_recent_sql_handle
      from sys.dm_exec_connections where session_id in(54,55)

      --查看會(huì)話信息
      select login_time,host_name,program_name,login_name,last_request_start_time,last_request_end_time
      from sys.dm_exec_sessions where session_id in(54,55)

      --查看阻塞正在執(zhí)行的請(qǐng)求
      select
      session_id,blocking_session_id,wait_type,wait_time,wait_resource
      from
      sys.dm_exec_requests
      where
      blocking_session_id>0--正在阻塞請(qǐng)求的會(huì)話的 ID。如果此列是 NULL,則不會(huì)阻塞請(qǐng)求

      --查看正在執(zhí)行的SQL語(yǔ)句

      select
      a.session_id,sql.text,a.most_recent_sql_handle
      from
      sys.dm_exec_connections a
      cross apply
      sys.dm_exec_sql_text(a.most_recent_sql_handle) as SQL --也可用函數(shù)fn_get_sql通過most_recent_sql_handle得到執(zhí)行語(yǔ)句
      where
      a.Session_id in(54,55)
      /*
      session_id text
      ----------- -----------------------------------------------
      54 begin tran update ta set col2='BB' where ID=2
      55 begin tran select * from ta
      */

      處理方法:
      --連接窗口2
      begin tran
      select * from ta with (nolock)--用nolock:業(yè)務(wù)數(shù)據(jù)不斷變化中,如銷售查看當(dāng)月時(shí)可用。





      阻塞2(索引):

      -----------------------連接窗口1
      SET TRANSACTION ISOLATION LEVEL SERIALIZABLE --針對(duì)會(huì)話設(shè)置了 TRANSACTION ISOLATION LEVEL
      begin tran
      update ta set col2='BB' where COl1=102

      --rollback tran



      ------------------------連接窗口2
      insert into ta(ID,Col1,Col2) values(5,105,'E')



      處理方法:

      create index IX_Ta_Col1 on Ta(Col1)--用COl1列上創(chuàng)索引,當(dāng)更新時(shí)條件:COl1=102會(huì)用到索引IX_Ta_Col1上得到一個(gè)排它鍵的范圍鎖



      阻塞3(會(huì)話設(shè)置):

      -------------------------------連接窗口1

      begin tran
      --update
      update ta set col2='BB' where ID=2
      select col2 from ta where ID=2

      --rollback tran

      --------------------------------連接窗口2

      SET TRANSACTION ISOLATION LEVEL READ COMMITTED --設(shè)置會(huì)話已提交讀:指定語(yǔ)句不能讀取已由其他事務(wù)修改但尚未提交的數(shù)據(jù)
      begin tran
      select * from ta



      處理方法:
      --------------------------------連接窗口2(善用會(huì)話設(shè)置:業(yè)務(wù)數(shù)據(jù)不斷變化中,如銷售查看當(dāng)月時(shí)可用)

      SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED --設(shè)置會(huì)話未提交讀:指定語(yǔ)句可以讀取已由其他事務(wù)修改但尚未提交的行
      begin tran
      select * from ta

        相關(guān)評(píng)論

        閱讀本文后您有什么感想? 已有人給出評(píng)價(jià)!

        • 8 喜歡喜歡
        • 3 頂
        • 1 難過難過
        • 5 囧
        • 3 圍觀圍觀
        • 2 無聊無聊

        熱門評(píng)論

        最新評(píng)論

        發(fā)表評(píng)論 查看所有評(píng)論(1)

        昵稱:
        表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
        字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過審核才能顯示)