在SQL Server 2000中設定OPTION (MAXDOP 1) 效能提高問題
Windows 2003 , SQL Server 2000 SP4 .
執行下面的語句需要近 20 秒。 但是在後面加入 OPTION (MAXDOP 1) 或者 OPTION (MAXDOP 2) ..... 到 OPTION (MAXDOP 9) , 速度變得非常快, 執行時間都小於1秒, 但是 OPTION (MAXDOP 10) 的時候就變回原來的20秒左右, 當然快和慢時候的執行計劃也不一樣, 慢的時候關鍵解析處是 Merge Join / Right Anti Semi Join , 快的時候為 Nested Loops/Inner Join , Hash Match/Left Anti Semi Join .
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
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
OPTION (MAXDOP 1)
-------------------------------------------------------------
下面是在網上找到的一些測試資料:
經過多次重灌實驗和對比,基本找到原因了!!!
是Windows 2000 的問題.
對於上述儲存過程,反覆比較執行結果如下.
--------------------------------------------------------------------
重灌win2000, 不打補丁,安裝SQL SERVER 2000, 測試100,000記錄, 28秒.
win2000作業系統打補丁
打 補丁 sp1 ,還是28-30秒左右.
打 補丁 sp2 ,27-30秒之間. (這三種情況下,CPU 大約55%左右)
打 補丁 sp3 , 或 sp4 , 則效能急劇 下降, 需要10分7秒, CPU 使用5%以下.
解除安裝SP3 或SP4 到( SP1 , SP3 , 或沒有補丁) 效能立即恢復如前.
因此推斷:
win2000 在對稱SMP機器上,或者在此類似架構的機器上(XEON 的超執行緒對於作業系統,就象2個CPU ), 對於SMP的排程, 沒有補丁, SP1 , SP2 時,還是很正常的.但到補丁SP3 , SP4可能出現了問題. 而SQL SERVER 2000在SMP類計算機上, 可能使用了作業系統的特殊內部功能,這些功能就是與SMP相關的. 可能是內部CPU排程等原因造成CPU沒有被很好利用.ORACLE公司,不知道這些特殊功能,自然就無法使用, 因此ORACLE也就不會出現效能下降問題. 而在普通相容機上,單CPU , P3或P4 , 根本不會使用這些特殊統能.所以沒有效能問題暴露.
關於沒有補丁和只使用SP1 , 或 SP2 CPU 使用55%左右, 我想可能是磁碟 IO限制. 因為儲存過程在 SQL SERVER 內部執行, 經過內部編譯, 已經不完全是CPU密集型, 而是磁碟io密集型,所以不需要消耗太多CPU, , CPU還需要等待IO.
----------------------
我的作業系統是 Windows 2003 , 所以可能類似windows2000打了SP4補丁的情況 。 準備將幾張表匯入到sql 2008 測試一下, 看看到底是widows 的問題, 還是SQL Server 2000 的問題。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-681946/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQL Server 2000中的資料同步問題SQLServer
- SQL Server的安全設定問題解答SQLServer
- 建立索引——提高SQL Server效能索引SQLServer
- java 連結sql server 2000 問題JavaSQLServer
- SQL Server 2000 許可權問題SQLServer
- SQL Server2000 許可權問題SQLServer
- 在Oracle裡設定訪問多個SQL Server(轉)OracleSQLServer
- 提高sql效能資源(1)SQL
- 檢測和解決 SQL Server2000 SP4中問題SQLServer
- 不同網段sql server 2005 連線 sql server 2000的問題SQLServer
- 在安裝有sql server2000的基礎上裝sql server 2005遇到的問題SQLServer
- SQL Server2000表複製的原理問題SQLServer
- 怎麼解決SQL server 2000的中文問題?SQLServer
- Echarts中Option屬性設定Echarts
- SQL Server 2000 死鎖(dead lock) 問題解決SQLServer
- 安裝與ms sql server2000連線問題?SQLServer
- CDC在sql server 2017中無法使用的問題SQLServer
- sql server datediff函式引發的效能問題SQLServer函式
- [轉]SQL Server 2000定時執行SQL語句SQLServer
- 淺談SQL Server中的快照問題SQLServer
- Sql server中Collation conflict問題SQLServer
- 提高SQL效能SQL
- SQL SERVER 2000新增功能介紹1 (轉)SQLServer
- SQL Server 2000設定了資料庫的自動增長,硬碟空間也沒問題,但還是遭遇空間不足問題SQLServer資料庫硬碟
- 請問在論壇中設定頭像路徑問題
- 關於無盤win2000中的ip設定問題(轉)
- SQL SERVER安全設定攻略SQLServer
- SQL Server 2000中的觸發器使用SQLServer觸發器
- sql server left join問題SQLServer
- Microsoft SQL Server 2008中SQL Server服務啟動故障問題ROSSQLServer
- SQL Server2000中執行一個SQL, 在lock上發現自己鎖自己SQLServer
- 深入探索MS SQL Server 2000網路連線的安全問題 (轉)SQLServer
- 解決SQL Server中CHAR欄位空格問題SQLServer
- SQL Server中的未文件化的dbcc命令(適用於SQL Server 2000)SQLServer
- XML文件插入SQL Server2000資料庫(1)XMLSQLServer資料庫
- iOS圖片設定圓角效能問題iOS
- SQL SERVER資料庫datediff函式引發的效能問題SQLServer資料庫函式
- SQL Server 2000 shrink tempdbSQLServer