上禮拜參加8月的SQL PASS,講師是微軟厲害的資料庫技術支援工程師Eddie,會議中有一個議題: 檢查SQL Server真正使用到多少Cores,回家作業(寫)。
SQL Server 2012之後,EE(企業版本)的計價從socket改為cores核心授權計價,AP Team也沒太注意安裝細節,infra會安裝好,採購會算好錢,我們AP使用好就對了。
隨著版本升級,接著AP開始用SQL Server 2012、SQL Server 2014,也因為處理的資料量越來越大,機器從2U升級到4U,CPU從E5升到E7,為的就是更多穩定的CPU運算力及延展。
這個議題的收穫也算是類DB效能提升!來筆記DB消失的運算力:
通常我們都透過MSDN訂閱網站來下載測試軟體,搜尋欄位輸入SQL Server 2016 Enterprise,有3個結果:其中,橘色框才是以後客戶新採購SQL Server核心授權計價時要下載的。
以前看到有Core字樣,可能誤以為是Server core那種沒UI的安裝檔所以沒選,因此選了最下面的哪一個,經過微軟技術支援工程師Eddie及網友Simon的解釋分享發現,如果安裝了非core license安裝,其實CPU的使用是有license上限的!
SQL Server EE – Server
佈署環境 |
CPU使用上限 |
VM |
20 Core |
實體機 |
20 Core |
實體機(啟用hyper-thread) |
40 Core |
趕快來查測試環境SQL Server版本
語法查看版本:
SELECT @@VERSION
果然安裝的不是核心授權版!
從SQL Server的紀錄也看的到!
測試環境: SQL Server 2012 Enterprise
測試環境: SQL Server 2014 Enterprise
嗯,果然都出現License的限制!
執行測試CPU 100%語法
USE master
SELECT MyInt = CONVERT(BIGINT, o1.object_id) + CONVERT(BIGINT, o2.object_id) + CONVERT(BIGINT, o3.object_id)
INTO #temp
FROM sys.objects o1
JOIN sys.objects o2 ON o1.object_id < o2.object_id
JOIN sys.objects o3 ON o1.object_id < o3.object_id
SELECT SUM(CONVERT(BIGINT, o1.MyInt) + CONVERT(BIGINT, o2.MyInt))
FROM #temp o1
JOIN #temp o2 ON o1.MyInt < o2.MyInt
工作管理員/效能/CPU
嗯,只有20 Core在工作,剩下來的12 Core都休假出國玩了。
百敬老師也有幫忙提問Eddie解決的方式,我們來試試看:
1.下載SQL Server 2014 Enterprise Core 版本
2.升級安裝
點選安裝檔後,選維護(Maintenance)/版本升級(Edition Upgrade)
輸入金鑰
選定要升級的執行個體(Instance)
升級中
完成升級,過程約3分鐘
完成升級
4.重新啟動SQL Server 服務
5.查看版本
SELECT @@VERSION
Instance屬性資訊:
SQL Server log
6.執行耗時CPU
這才是Team work!
小結:
- 還好專案都還在測試階段,還有機會救。
- SQL PASS收穫很多。
SQL_Server_2012_Licensing_Quick_Reference_Guide_Mar2012_2_ZHTW.pdf
參考:
Compute Capacity Limits by Edition of SQL Server
Differences between SQL Server 2012 Enterprise Edition - Server CAL and Per Core Licensing
Upgrade to a Different Edition of SQL Server 2016 (Setup)
Supported Version and Edition Upgrades
Trying to create an SQL Query that will max all CPUs to 100%