在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資料庫datediff函式引發的效能問題SQLServer資料庫函式
- SQL Server安全設定最佳實踐SQSQLServer
- SQL Server 2016升級遷移過程中效能問題解決案例SQLServer
- SQL Server 查詢超時問題排查SQLServer
- 淺談SQL Server中的快照問題SQLServer
- Echarts中Option屬性設定Echarts
- 使用SQL-Server分割槽表功能提高資料庫的讀寫效能SQLServer資料庫
- Mybatis where 1=1 動態sql問題MyBatisSQL
- SQL Server database mail問題診斷一例SQLServerDatabaseAI
- SQL Server資料庫恢復常見問題SQLServer資料庫
- MySQL: Couldn't execute 'SET OPTION SQL_QUOTE_SHOW_CREATE=1MySql
- SQL Server 2005效能調整一(zt)SQLServer
- SQL Server 2005效能調整二(zt)SQLServer
- SQL Server技術問題之遊標優缺點SQLServer
- 兩款工具解決SQL Server遷移問題DJSQLServer
- 在Linux 上安裝 SQL ServerLinuxSQLServer
- 如何改善SQL Server + SharePoint組合效能BGSQLServer
- SQL Server中datetimeset轉換datetime型別問題淺析SQLServer型別
- [提問交流]OneThink支援 sql server?SQLServer
- STM32埠IO方向設定問題的IO方向設定問題
- SQL Server管理員帳號鎖定後如何恢復訪問VUSQLServer
- zCloud使用技巧:如何使用效能下鑽功能分析SQL效能問題CloudSQL
- 關閉windows更新、設定自啟動、提高開發機效能Windows
- [翻譯]SQL Server 2005 Analysis Services效能指南 Part 1 - 理解查詢構架SQLServer
- SQL Server常見問題介紹及快速解決建議SQLServer
- 【MSSQL】在Linux上安裝SQL SERVERSQLLinuxServer
- zotero的同步設定問題
- [20201221]spfile設定問題.txt
- SQL Server中的IO效能殺手Forwarded recordSQLServerForward
- SQL執行計劃異常引起的效能問題SQL
- SQL執行計劃異常 引起的效能問題SQL
- SQL Server 資料訪問策略:CLRMESQLServer
- SQL Server 資料庫開發中的十大問題VYSQLServer資料庫
- 設定flex後子元素設定寬度失效問題Flex
- SQL Server 資料庫 最佳化 效能瓶頸SQLServer資料庫
- SQL Server中使用Check約束達到提升效能SQLServer
- Windows Server 2022 初始設定WindowsServer
- 提高組字串專題1字串
- Django的時區設定問題Django