這個系列文主要是我個人經驗與我看待DB的角度出發
然後因為現在有 AI,語法、datatype 那些很基礎的東西網路上都很多了,所以就不會出現在這裡
系列文主要會分成兩個階段,基礎 & 效能調校。
因為都是我個人經驗,如有錯誤請多指教。

先說授權模式,通常落實在企業的時候啦,都是找代理報價,把你的需求給他們,他們再一份報價給你。
所以說了解這個東西沒什麼用,頂多是不要被坑而已。
授權模式有分 CAL、CORE、訂閱跟雲端,訂閱應該是很少在用沒看過有人用。
這在以前我會覺得沒必要,因為還要再多去找到一個會用 Server Core 的工程師來維護,但如今有 AI 可以輔助,所以如果可以的話,要用 Server Core 也是沒問題。
在Windows Server Core上安裝SQL SERVER是相對安全的,因為他攻擊面積小、漏洞少、又可提升性能
儲存的硬體設備,基本上就是 SQL Server 的命脈,不論後期你執行計畫、index 等等調的再好,儲存的硬體設備或是規劃很爛的話,再怎麼調都是徒勞。
以下有幾個建議參考 :
Data 跟 Log 要用什麼 RAID 都可以,甚至不用 RAID 我也沒意見。
然後基本上也不會有人推薦你去用 RAID0 來當 Data 的陣列。
可是我實際看過有人或是網路上的人推薦把 RAID0 拿來做 TempDB 的陣列。
這點我是絕對不同意的
我理解他們為什麼會這樣推薦,理由不外乎是 : 因為 RAID0 速度很快,又剛好符合 TempDB 不需要備援的特性,TempDB 又是一個需要速度最快的 DB,這樣方常 OK。
乍看之下是沒問題,但是如果今天這個 RAID0 壞掉了呢?
我們要先知道,如果沒有 TempDB,那 SQL Server instance 是開不起來的,這時候怎麼辦?
你的 RTO 時間夠你在那邊慢慢修 RAID0 嗎?
遇到這種把 TempDB 放在 RAID0 上面,然後 RAID0 又剛好壞掉的狀況,只剩下兩條路走
1. 等待你的團隊把 RAID0 修好,換一顆硬碟然後重跑 RAID 之類的。
2. 把SQL SERVER的 Instance 用 minimal configuration 模式開啟,然後用SQLCMD去變更TempDB的儲存位置。
所以基於這個原因,我不同意為了效能,把TempDB 放在一個脆弱的RAID上,真的要放,也是去放RAID10,相較於主要DATA,TempDB放 RAID10的話會便宜很多,他不用太大的硬碟。
確實如果你很有錢,就用這個吧。
只是SSD的特性應該大家都知道,無預警突發性故障、故障後資料很難救回等等,所以要用 SSD 的話RAID還是要做。
SSD/NVMe 通常能同時提供較好的隨機 I/O 延遲與循序吞吐量,因此很適合 SQL Server。不過仍需評估寫入耐久度、持續寫入效能、斷電保護、容量成本與備援設計,不能因為使用 SSD 就省略 RAID、備份或高可用規劃。
所以用之前還是評估一下這個Instance 用途是什麼。
最重要的還是錢的問題
還有一個儲存架構是 SAN,但這我沒用過,所以我也不會。
Get-Volume -DriveLetter C | Select-Object DriveLetter, FileSystem, AllocationUnitSize
最後就是雲端了
這東西每一家都不一樣AWS、AZURE、姑姑魯 Cloud,然後又貴,所以沒研究。
雖然SQL Server如今以支持多種作業系統,但最好還是使用windows系統
選高效能的電源計畫
Set-ItemProperty -path HKLM:\SYSTEM\CurrentControlSet\Control\PriorityControl -name Win32PrioritySeparation -Type DWORD -Value 24
這個容易被人忽略,以下介紹三種在安裝期間不會自動授予的權限,但我建議去處理的
如果再安裝 SQL Server 的時候沒有啟用即時檔案初始化也就是 IFI (Instant File Initialization)的話,那麼當 SQL Server 需要建立或是擴充一個檔案的時候,她會直接把那個檔案全部填滿0。
這個動作叫做 zeroing out,目的是複寫先前占用該磁碟空間的任何資料,雖然安全但這樣就會花費一點時間,特別對於大型檔案而言更明顯。
再細一點的話就是,這個影響僅限於 data file,以及 2022 以後的 log file 如果自動成長 <= 64 mb 的話,也可以受用,其餘擴展檔案都沒辦法因此受益。
一般來說微軟是建議啟用的,阿他建議啟用但是又不開預設我是不懂為什麼。
可能是因為這動作有一個很小的安全風險,因為他不寫0了,所以先前存在硬碟上這個位置的資料,在理論上是可以被發現的。但這風險很小,所以還是開吧。
為了達成這個目的,必須將 Perform Volume Maintenance Tasks 的使用者權限給SQL Server Database Engine 的服務帳戶。一旦給予這個權限,SQL Server會自動立即檔案初始化,不需要做其他設定。
win+r 然後輸入 secpol.msc
然後「本機原則」➤「使用者權限指派」。
這會顯示完整的指派清單。向下捲動直到找到「執行磁碟區維護工作」。
在該指派上按一下右鍵並進入其內容,即可加入SQL Server 服務帳戶。

如果Windows 面臨記憶體壓力,那他會嘗試釋放RAM,這很合理,但這會造成SQL Server的效能問題。
SQL Server 會將最近使用過的資料快取在 buffer cache 中,這是Database Engine 所保留的一塊記憶體區域,所有資料分頁都是從buffer cache 中讀取的,即使必須先從磁碟讀取出來。所以如果Windows 面臨RAM壓力時,選擇釋放這個 buffer cache ,那SQL Server就會面臨效能問題。
為了避免這種情況發生,可以跟 IFI 一樣授予權限給SQL Server Database Engine 服務帳戶,但前提是SQL Server的版本必須是企業版或標準版。
這次要給的權限叫做鎖定記憶體分頁,給這個權限之後就可以把buffer cache 鎖定在記憶體中不被Windows 釋放。
原則上來說,放 SQL Server 的那一台伺服器,應該是不要再做別的事情了,Windows 不應該有記憶體壓力。
如果是使用虛擬機,根據虛擬平台的設定,可會無法設定鎖定記憶體分頁,因為這可能會因為balloon driver。虛擬化平台會使用氣球驅動程式來從客體作業系統 中回收記憶體。
如果預計使用SQL Audit來擷取instance的活動,可以選擇把產生的事件儲存到檔案、安全性記錄檔或應用程式記錄檔。如果有高度的安全需求,安全性記錄檔會是最適合的位置。
為了讓事件能寫入安全性記錄檔,Database Engine的服務帳戶必須授予產生安全性稽核( Generate Security Audits )的使用者權限指派。
然後還要啟用這個
下一篇開始進入正式安裝。