SQL Server2000中執行一個SQL, 在lock上發現自己鎖自己
很老的一個資料庫, SQL SERVER 2000 SP4, 執行一個查詢SQL的時候(查詢SQL中有加入nolock), PID=128, 在lock session 上檢視
發現 128 的session 是blocked , 同樣還有另外一個也是 128 的session 狀態為 blocking , 是否是多執行緒導致的自己鎖自己的情況 ?
執行時間達到 20多秒 。 但是在SQL後面加入 option (maxdop 1) 速度就變得非常快, 具體是什麼原因 ?
SELECT
'004' AS MSGFN,
'OB20031120' AS AENNR,
b.climat AS IDNRK,
'L' AS POSTP,
CONVERT(INT,b.SOITMNUM) AS POSNR,
b.ordqty AS MENGE_C ,
'X' AS SANFE
FROM purchaseordersitem a (nolock),purchaseordersitemdetail b (nolock)
WHERE a.mesgid='0a5dc698-6cc4-49bd-ab0b-e33121f6ec44'
AND a.ordnum='20058439390'
and a.itmnum='1'
AND a.mesgid= b.mesgid
AND a.ordnum=b.ordnum
and a.itmnum=b.itmnum
and a.highlevel IS NOT NULL
AND not exists (select * from purchaseorderscomponent(nolock)
where climat=b.climat
and rdnum='20058439390'
and mesgid='0a5dc698-6cc4-49bd-ab0b-e33121f6ec44'
and itmnum='1'
and ((ATTRIBNAME='InSystemBox'and ATTRIBVALUE='N')
or (ATTRIBNAME='PartType'and ATTRIBVALUE='OVERPACK')
)
)
ORDER BY POSNR
發現 128 的session 是blocked , 同樣還有另外一個也是 128 的session 狀態為 blocking , 是否是多執行緒導致的自己鎖自己的情況 ?
執行時間達到 20多秒 。 但是在SQL後面加入 option (maxdop 1) 速度就變得非常快, 具體是什麼原因 ?
SELECT
'004' AS MSGFN,
'OB20031120' AS AENNR,
b.climat AS IDNRK,
'L' AS POSTP,
CONVERT(INT,b.SOITMNUM) AS POSNR,
b.ordqty AS MENGE_C ,
'X' AS SANFE
FROM purchaseordersitem a (nolock),purchaseordersitemdetail b (nolock)
WHERE a.mesgid='0a5dc698-6cc4-49bd-ab0b-e33121f6ec44'
AND a.ordnum='20058439390'
and a.itmnum='1'
AND a.mesgid= b.mesgid
AND a.ordnum=b.ordnum
and a.itmnum=b.itmnum
and a.highlevel IS NOT NULL
AND not exists (select * from purchaseorderscomponent(nolock)
where climat=b.climat
and rdnum='20058439390'
and mesgid='0a5dc698-6cc4-49bd-ab0b-e33121f6ec44'
and itmnum='1'
and ((ATTRIBNAME='InSystemBox'and ATTRIBVALUE='N')
or (ATTRIBNAME='PartType'and ATTRIBVALUE='OVERPACK')
)
)
ORDER BY POSNR
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-681902/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- java多執行緒與併發 - 自己實現一個簡單的鎖(實現Lock介面)Java執行緒
- 自己動手寫SQL執行引擎SQL
- Phoenix:在HBase上執行SQL查詢SQL
- ----------------SQL Server2000中死鎖經驗總結 ---------------SQLServer
- 在shell中執行SQL*Plus命令SQL
- 一條SQL語句在MySQL中如何執行的MySql
- 利用SSIS在SQL Azure中執行計劃任務(上)DJSQL
- 在事務中執行sql語句SQL
- 在nhibernate中執行SQL語句SQL
- java中執行sql與pl/sql dev中執行sql快慢差距大原因JavaSQLdev
- 實現一個自己的語法解析器與執行引擎
- 在Mac上用自己編譯出的DNX執行.NET程式Mac編譯
- 在Mysql中執行一條SQL,會經歷什麼?MySql
- 一條sql語句在mysql中是如何執行的MySql
- 兩個會話分別只執行一個SQL,可能形成死鎖嗎會話SQL
- 執行truncate在pl/sqlSQL
- 【PL/SQL】在PL/SQL中執行重新整理Shared Pool命令SQL
- 實現一個自己的mvvmMVVM
- 如何自己實現一個 EventBus
- 怎樣在sqlite3上執行SQL語句SQLite
- 多執行緒與併發-----Lock鎖技術執行緒
- 檢視資料庫中的鎖(LOCK),找出程式及SQL資料庫SQL
- 在PL/SQL中執行作業系統命令SQL作業系統
- 在SQL Developer中Debug一個procedureSQLDeveloper
- 死磕 java執行緒系列之自己動手寫一個執行緒池Java執行緒
- 決定一個SQL執行效率的是執行計劃, 而不是SQL的寫法SQL
- Java多執行緒/併發06、執行緒鎖Lock與ReadWriteLockJava執行緒
- 自己實現一個window.location
- 自己實現一個java的arraylistJava
- 自己實現一個滑動視窗
- SQL Server如何查詢鎖已經kill lockSQLServer
- 同一個語句在plsql的sql視窗可以執行命令視窗不能執行SQL
- 開發一個自己的 CSS 框架(一)CSS框架
- 在PL/SQL中執行作業系統的命令SQL作業系統
- 如何開發一個自己的 RubyGem?
- 自己在mac上常用的命令Mac
- 執行SQL語句查詢時出現一個SQLException異常SQLException
- 克隆一個自己的 AI 來上網課AI