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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 自己動手寫SQL執行引擎SQL
- 一條SQL語句在MySQL中如何執行的MySql
- 利用SSIS在SQL Azure中執行計劃任務(上)DJSQL
- 兩個會話分別只執行一個SQL,可能形成死鎖嗎會話SQL
- 一條 SQL 語句在 MySQL 中是如何執行的?MySql
- 在Mysql中執行一條SQL,會經歷什麼?MySql
- 一條sql語句在mysql中是如何執行的MySql
- 怎樣在sqlite3上執行SQL語句SQLite
- 實現一個自己的語法解析器與執行引擎
- 多執行緒與併發-----Lock鎖技術執行緒
- mysql一次執行多個SQL檔案MySql
- c# 實現定義一套中間SQL可以跨庫執行的SQL語句C#SQL
- 上傳執行sql檔案到linuxSQLLinux
- 實現一個自己的mvvmMVVM
- PHP執行sqlPHPSQL
- MyBatis SQL執行MyBatisSQL
- [ORACLE] SQL執行OracleSQL
- Oracle - 執行過的SQL、正在執行的SQL、消耗資源最多的SQLOracleSQL
- 死磕 java執行緒系列之自己動手寫一個執行緒池Java執行緒
- 一條Sql的執行過程SQL
- 在 Docker 裡執行 Microsoft SQL 伺服器DockerROSSQL伺服器
- 自己實現一個java的arraylistJava
- 自己實現一個window.location
- 利用SSIS在SQL Azure中執行計劃任務(下)KCSQL
- peewee 執行原生 sqlSQL
- Sql執行順序SQL
- 自適應查詢執行:在執行時提升Spark SQL執行效能SparkSQL
- oracle查詢sql執行耗時、執行時間、sql_idOracleSQL
- 開發一個自己的 CSS 框架(一)CSS框架
- 一條SQL如何被MySQL架構中的各個元件操作執行的?MySql架構元件
- Slave SQL執行緒與PXB FTWRL死鎖問題分析SQL執行緒
- 搭建自己的GitLab+jenkins並在kubernetes中拉取映象執行(九)GitlabJenkins
- 自己在mac上常用的命令Mac
- 執行一條 SQL 語句,期間發生了什麼?SQL
- DBA日常維護SQL指令碼_自己編寫的SQL指令碼
- sql 開發篇一 之 表鎖查詢及解鎖SQL
- SQL 執行 - 執行器最佳化SQL
- 大概在昨天下午資料庫執行記錄裡面發現一條奇怪的 sql資料庫SQL
- 克隆一個自己的 AI 來上網課AI