探索效能和安全性
Azure 生態系統在 Azure 虛擬機器上提供了數個 SQL Server 執行個體的效能和安全性選項。 每個選項都提供數個功能,例如符合工作負載容量和效能需求的不同磁碟類型。
儲存體考量
SQL Server 需要良好的儲存體效能,才能提供健全的應用程式效能,不論其為內部部署執行個體或安裝在 Azure VM 中。 Azure 提供各種不同的儲存體解決方案,以滿足您的工作負載需求。 雖然 Azure 提供各種類型的儲存體 (Blob、檔案、佇列、資料表) 在大部分情況下 SQL Server 工作負載會使用 Azure 受控磁碟。 例外狀況是容錯移轉叢集執行個體可以建立在檔案儲存體上,而備份會使用 Blob 儲存體。 Azure 受控磁碟可作為提供給 Azure VM 的區塊層級儲存體裝置。 受控磁碟提供許多優點,包括 99.999% 的可用性、可調整的部署 (每個區域的每個訂用帳戶最多可以有 50000個 VM 碟),以及與可用性設定組和區域的整合,以提供更高層級的復原能力,並防止失敗。
Azure 受控磁碟均提供兩種類型的加密。 Azure 伺服器端加密是由儲存體服務提供,可作為儲存體服務提供的待用加密。 Azure 磁碟加密在 Windows 上使用 BitLocker,並在 Linux 上使用 DM-Crypt,以提供 VM 內的 OS 和資料磁碟加密。 這兩種技術都與 Azure Key Vault 整合,且可讓您使用自己的加密金鑰。
每個虛擬機器都具備至少兩個與之關聯的兩個磁碟:
作業系統磁碟 - 每部虛擬機器都需要包含開機磁碟區的作業系統磁碟。 在 Windows 平台虛擬機器或 Linux 上的 /dev/sda1,此磁碟會是 C 磁碟機。 作業系統會自動安裝在作業系統磁碟上。
暫存磁碟 - 每部虛擬機器都包含一個用於暫存儲存體的磁碟。 此儲存體適用於不需要持久的資料,例如網頁檔案或分頁檔。 由於磁碟是暫時性的,因此不應該使用來儲存任何重要的資訊,例如資料庫或交易記錄檔,因為這些資源會在維護期間遺失或將虛擬機器重新開機。 此磁碟機將在 Windows 上掛接為 D:\,而在 Linux 上掛接為 /dev/sdb1。
此外,您也可以將額外的資料磁碟新增至執行 SQL Server 的 Azure VM。
- 資料磁碟 - Azure 入口網站中使用資料磁碟一詞,但實際上這些只是新增至虛擬機器的額外受控磁碟。 您可以使用 Windows 上的儲存空間或 Linux 上的邏輯磁碟區管理,將這些磁碟集區化以增加可用的 IOPs 和儲存體容量。
此外,每個磁碟可以是下列其中一種類型:
功能 | Ultra 磁碟 | 進階 SSD | 標準 SSD | 標準 HDD |
---|---|---|---|---|
磁碟類型 | SSD | SSD | SSD | HDD |
適用對象 | IO 密集型工作負載 | 效能敏感性工作負載 | 輕量型工作負載 | 備份、非關鍵性工作負載 |
最大磁碟大小 | 65,536 GiB | 32,767 GiB | 32,767 GiB | 32,767 GiB |
最大輸送量 | 2,000 MB/s | 900 MB/秒 | 750 MB/秒 | 500 MB/s |
最大 IOPS | 160,000 | 20,000 | 6,000 | 2,000 |
在 Azure 上 SQL Server 的最佳做法,是建議使用進階磁碟集區來提高 IOP 和儲存體容量。 資料檔案應該儲存在自己的集區中,並在 Azure 磁碟上使用讀取快取。
交易記錄檔不會受益於此快取,因此這些檔案應該會進入自己的集區,而不需要快取。 TempDB 可以選擇性地移至自己的集區,或使用 VM 的暫存磁碟 (可提供低延遲,因為會實際連接到執行 VM 的實體伺服器)。 正確設定的進階 SSD 將會看到以單一位數毫秒為單位的延遲。 對於需要延遲低於該時間的任務關鍵性工作負載,您應該考慮使用 Ultra SSD。
安全性考量
Azure 符合數個產業法規和標準,可讓您組件符合規範的解決方案,在虛擬機器中執行 SQL Server。
適用於 SQL 的 Microsoft Defender
適用於 SQL 的 Microsoft Defender 能提供 Azure 資訊安全中心安全性功能,例如弱點評定和安全性警示。
適用於 SQL 的 Azure Defender 可用來識別並減輕 SQL Server 執行個體和資料庫中的潛在弱點。 弱點評量功能可偵測 SQL Server 環境中的潛在風險,並協助您修復風險。 也能為您的安全性狀態提供深入解析,以及解決安全性問題時可採取的步驟。
Azure 資訊安全中心
Azure 資訊安全中心是統一的安全性管理系統,可評估和提供可改善資料環境數個安全性層面的機會。 Azure 資訊安全中心讓您能夠完整檢視所有混合式雲端資產的安全性健康情況。
效能考量
現有的內部部署 SQL Server 效能功能大多可於 Azure 虛擬機器 (VM) 取得。 提供的選項之一有資料壓縮,可改善 I/O 密集型工作負載的效能,同時減少資料庫的大小。 同樣地,資料表和索引分割可改善大型資料表的查詢效能,同時改善效能和可擴縮性。
資料表資料分割
資料表資料分割提供許多優點,但通常只有在資料表規模大到將危害查詢效能時,才會考慮此策略。 識別哪些資料表是資料表資料分割的候選項目,可有效減少中斷和干擾。 使用分割區資料行篩選資料時,只會存取資料的子集,而非整個資料表。 同樣地,資料分割資料表上的維護作業會壓縮特定分割區中的特定資料或重建索引的特定分割區,來減少維護時間。
定義資料表分割區有四個所需的主要步驟:
- 建立檔案群組,可定義建立分割區時所涉及的檔案。
- 建立資料分割函式,可根據指定的資料行定義資料分割規則。
- 建立資料分割配置,可定義每個分割區的檔案群組。
- 待分割的資料表。
下列範例說明如何建立 2021 年 1 月 1 日至 2021 年 12 月 1 日的資料分割函數,並將分割區散發到不同的檔案群組。
-- Partition function
CREATE PARTITION FUNCTION PartitionByMonth (datetime2)
AS RANGE RIGHT
-- The boundary values defined is the first day of each month, where the table will be partitioned into 13 partitions
FOR VALUES ('20210101', '20210201', '20210301',
'20210401', '20210501', '20210601', '20210701',
'20210801', '20210901', '20211001', '20211101',
'20211201');
-- The partition scheme below will use the partition function created above, and assign each partition to a specific filegroup.
CREATE PARTITION SCHEME PartitionByMonthSch
AS PARTITION PartitionByMonth
TO (FILEGROUP1, FILEGROUP2, FILEGROUP3, FILEGROUP4,
FILEGROUP5, FILEGROUP6, FILEGROUP7, FILEGROUP8,
FILEGROUP9, FILEGROUP10, FILEGROUP11, FILEGROUP12);
-- Creates a partitioned table called Order that applies PartitionByMonthSch partition scheme to partition the OrderDate column
CREATE TABLE Order ([Id] int PRIMARY KEY, OrderDate datetime2)
ON PartitionByMonthSch (OrderDate) ;
GO
資料壓縮
SQL Server 提供不同的壓縮資料選項。 雖然 SQL Server 仍然將壓縮的資料儲存在 8 KB 的頁面上,但是當資料壓縮時,可將更多資料的資料列儲存在指定頁面上,如此可讓查詢讀取較少的頁面。 讀取較少的頁面有兩個優點:可減少執行的實體 IO 數量,而且可讓更多的資料列儲存在緩衝集區中,以便更有效率地使用記憶體。 建議您在適當時機啟用資料庫頁面壓縮。
壓縮的取捨是需要少量的 CPU 額外負荷,不過在大部分情況下,儲存體 IO 的優點遠遠超過任何額外處理器使用量。
上圖顯示此效能優勢。 這些資料表具有相同的基礎索引;唯一的差別是 Production.TransactionHistory_Page 資料表上的叢集和非叢集索引是頁面壓縮。 針對頁面壓縮物件進行的查詢,比使用未壓縮物件的查詢執行的邏輯讀取數少了 72%。
壓縮是在物件層級的 SQL Server 中實作。 每個索引或資料表都可以個別壓縮,而您可以選擇在資料分割資料表或索引內壓縮分割區。 您可以使用 sp_estimate_data_compression_savings 系統預存程序來評估您將儲存的空間量。 在 SQL Server 2019 之前,此程序不支援資料行存放區索引或資料行存放區封存壓縮。
資料列壓縮 - 資料列壓縮相當基本,而且不會產生太多額外負荷;不過,不提供分頁壓縮可能會提供的相同數量壓縮 (以儲存空間所需的減少百分比來測量)。 資料列壓縮基本上會將每個資料行中的每個值儲存在儲存該值所需的最小空間量中。 針對數值資料類型 (例如整數、浮點數和小數) 使用可變長度的儲存格式,而且使用可變長度格式來儲存固定長度字元字串。
頁面壓縮 - 頁面壓縮是資料列壓縮的超集,因為在套用頁面壓縮之前,所有頁面一開始都會先壓縮資料列。 然後,會將稱為前置詞和字典壓縮的技巧組合套用到資料。 前置詞壓縮可在單一資料行中排除重複的資料,並將指標儲存回頁面標頭。 在該步驟之後,字典壓縮會在頁面上搜尋重複的值,並以指標加以取代,進一步減少儲存空間。 您的資料中重複項目越多,在壓縮資料時節省的空間就越大。
資料行存放區封存壓縮 - 資料行存放區物件一律會壓縮,不過,可以使用封存壓縮來進一步壓縮,這會在資料上使用 Microsoft XPRESS 壓縮演算法。 這種壓縮類型最適用於不常讀取的資料,但是基於法規或商業理由,需要予以保留。 雖然這項資料會進一步壓縮,但是 CPU 解壓縮的成本往往會勝過從 IO 減少所獲得的任何效能提升。
其他選項
以下是可為生產工作負載考量的其他 SQL Server 功能和動作清單:
- 啟用備份壓縮
- 針對資料檔案,啟用立即檔案初始化
- 針對資料庫限制自動成長
- 停用資料庫的自動壓縮/自動關閉
- 將所有的資料庫 (包括系統資料庫) 移到資料磁碟
- 將 SQL Server 的錯誤記錄檔和追蹤檔案目錄移至資料磁碟
- 設定 SQL Server 記憶體上限
- 啟用鎖定記憶體中的分頁
- 針對 OLTP 繁重環境啟用臨機操作工作負載最佳化
- 啟用查詢存放區。
- 安排 SQL Server Agent 作業以執行 DBCC CHECKDB、索引重新組織、索引重建,以及更新統計資料作業
- 監視和管理交易記錄檔的健康情況和大小
如深入了解效能最佳做法,請參閱 Azure 虛擬機器上的 SQL Server 最佳做法。