Availability-Groups
多個基本可用性組和性能 - SQL Server
我正在將我公司的一些 SQL Server 機器遷移到新的 SQL 2016 設置。我們目前在 SQL 2012 上使用數據庫鏡像。我正在遷移的實例之一目前有大約 60 個數據庫,儘管偶爾會出現問題,但鏡像對我們來說工作得很好。由於各種原因,此實例正在執行 SQL 標準版。由於不推薦使用鏡像,因此我熱衷於嘗試基本可用性組。
但是,我在將一個只有 20 個數據庫的實驗室放在一起時遇到了真正的性能問題。在初始設置期間,簡單地創建一個新的可用性組將耗盡可用性組的 472 個執行緒限制(最大執行緒數 - 40)。在主伺服器上,我會看到如下內容:
time active_workers idle_workers worker_limit worker_start_success --------------------- ------------ ------------ -------------------- 12:01 473 0 472 true 12:02 473 0 472 false ... multiple rows elided 12:05 472 451 472 false 12:06 22 16 472 true
只需嘗試查看其中一個可用性組的儀表板,就會將 CPU 鎖定幾分鐘。這不是一個超級強大的虛擬機,但 VMWare 告訴我它已為其分配了 3014 MHz。
這也沒有在數據庫端檢測任何數據庫操作或 I/O。
我是否缺少性能注意事項?在這一點上,我覺得基本可用性組不適用於我的情況,但我想確保我沒有忽略某些東西。我非常依賴這些文章/部落格文章:
最後,這是我用來自動創建可用性組的 PowerShell 腳本。我可能在這裡做一些不正確的事情:
Backup-SqlDatabase -Database $DatabaseName -BackupFile $DatabaseBackupFile -ServerInstance "vm-sqllab1" Backup-SqlDatabase -Database $DatabaseName -BackupFile $LogBackupFile -ServerInstance "vm-sqllab1" -BackupAction 'Log' Restore-SqlDatabase -Database $DatabaseName -BackupFile $DatabaseBackupFile -ServerInstance "vm-sqllab2" -NoRecovery Restore-SqlDatabase -Database $DatabaseName -BackupFile $LogBackupFile -ServerInstance "vm-sqllab2" -RestoreAction 'Log' -NORECOVERY $PrimaryReplica = New-SqlAvailabilityReplica -Name "vm-sqllab1" -EndpointUrl "TCP://vm-sqllab1.domain:5022" -FailoverMode "Manual" -AvailabilityMode "AsynchronousCommit" -AsTemplate -Version 13 $SecondaryReplica = New-SqlAvailabilityReplica -Name "vm-sqllab2" -EndpointUrl "TCP://vm-sqllab2.domain:5022" -FailoverMode "Manual" -AvailabilityMode "AsynchronousCommit" -AsTemplate -Version 13 $AgName = "vm-ag-" + $DatabaseName New-SqlAvailabilityGroup -Path "SQLSERVER:\SQL\vm-sqllab1\Default\" -Name $AgName -AvailabilityReplica ($PrimaryReplica, $SecondaryReplica) -BasicAvailabilityGroup -Database @($DatabaseName) Join-SqlAvailabilityGroup -Path SQLSERVER:\SQL\vm-sqllab2\Default -Name $AgName Add-SqlAvailabilityDatabase -Path SQLSERVER:\SQL\vm-sqllab2\Default\AvailabilityGroups\$AgName -Database $DatabaseName
這有兩個部分。首先,確保您安裝了 CU1。值得注意的是,它包含一個修復
第二部分是使用 T-SQL 代替 PowerShell。當我這樣做時,可用性組的創建速度要快得多,而且我沒有看到我在上面抱怨的任何 CPU/執行緒問題。這是我用來創建具有直接播種的可用性組的程式碼。我從這篇部落格文章中改編了它:
在初級:
CREATE AVAILABILITY GROUP [vm-ag-TestDb21] WITH (BASIC, DB_FAILOVER = OFF, DTC_SUPPORT = NONE) FOR DATABASE [TestDb21] REPLICA ON N'vm-sqllab1' WITH (ENDPOINT_URL = N'TCP://vm-sqllab1.domain:5022', FAILOVER_MODE = MANUAL, AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT, BACKUP_PRIORITY = 50, SECONDARY_ROLE(ALLOW_CONNECTIONS = NO), SEEDING_MODE = AUTOMATIC), N'vm-sqllab2' WITH (ENDPOINT_URL = N'TCP://vm-sqllab2.domain:5022', FAILOVER_MODE = MANUAL, AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT, BACKUP_PRIORITY = 50, SECONDARY_ROLE(ALLOW_CONNECTIONS = NO), SEEDING_MODE = AUTOMATIC) GO
在復製品上:
ALTER AVAILABILITY GROUP [vm-ag-TestDb21] JOIN GO ALTER AVAILABILITY GROUP [vm-ag-TestDb21] GRANT CREATE ANY DATABASE GO