取得 Azure 建議以移轉 SQL Server 資料庫

適用於 Azure Data Studio 的 Azure SQL 移轉延伸模組可協助您評估資料庫需求、取得 Azure 資源的正確大小 SKU 建議,以及將 SQL Server 資料庫移轉至 Azure。

瞭解如何使用此統一體驗,從來源 SQL Server 實例收集效能數據,以取得 Azure SQL 目標的正確大小 Azure 建議。

概觀

在移轉至 Azure SQL 之前,您可以使用 Azure Data Studio 中的 SQL 移轉延伸模組,協助您為 Azure SQL 資料庫、Azure SQL 受控執行個體 和 Azure 虛擬機器 目標上的 SQL Server 產生正確的大小建議。 此工具可協助您從來源 SQL 實例收集效能資料(執行內部部署或其他雲端),並建議計算和記憶體組態以符合工作負載的需求。

此圖顯示適用於 Azure Data Studio 的 Azure SQL 移轉延伸模組中的 Azure 建議工作流程:

Diagram that shows the workflow of the SKU recommendation process.

注意

Azure Data Studio 的 Azure SQL 移轉延伸模組中的評定和 Azure 建議功能支援在 Windows 或 Linux 上執行的來源 SQL Server 實例。

必要條件

若要開始進行 SQL Server 資料庫移轉的 Azure 建議,您必須符合下列必要條件:

支援的來源與目標

您可以針對下列 SQL Server 版本產生 Azure 建議:

  • 支援 Windows 或 Linux 上的 SQL Server 2008 和更新版本。
  • 可能支援在其他雲端上執行的 SQL Server,但結果的正確性可能會有所不同

您可以針對下列 Azure SQL 目標產生 Azure 建議:

  • Azure SQL 資料庫
    • 硬體系列:標準系列 (Gen5)
    • 服務層級:一般用途、業務關鍵、超大規模資料庫
  • Azure SQL 受控執行個體
    • 硬體系列:標準系列(Gen5)、進階版 系列、進階版 系列記憶體優化
    • 服務層級:一般用途、業務關鍵
  • Azure 虛擬機上的 SQL Server
    • VM 系列:一般用途、記憶體優化
    • 儲存體 系列:進階版 SSD

效能數據收集

必須先從來源 SQL Server 實例收集效能數據,才能產生建議。 在此數據收集步驟中,會查詢 SQL Server 實例的多個 動態系統檢視 (DMV),以擷取工作負載的效能特性。 此工具會擷取計量,包括 CPU、記憶體、記憶體、記憶體和 IO 使用量每 30 秒,並將性能計數器儲存到本機計算機作為一組 CSV 檔案。

實例層級

每個 SQL Server 實體會收集此效能資料一次:

效能維度 描述 動態管理檢視 (DMV)
SqlInstanceCpuPercent SQL Server 行程使用的 CPU 數量,以百分比表示 sys.dm_os_ring_buffers
PhysicalMemoryInUse SQL Server 進程的整體記憶體使用量 sys.dm_os_process_memory
MemoryUtilizationPercentage SQL Server 的記憶體使用率 sys.dm_os_process_memory

資料庫層級

效能維度 描述 動態管理檢視 (DMV)
DatabaseCpuPercent 資料庫所使用的 CPU 總數百分比 sys.dm_exec_query_stats
CachedSizeInMb 資料庫所使用的快取大小總計,以 MB 為單位 sys.dm_os_buffer_descriptors

檔案層級

效能維度 描述 動態管理檢視 (DMV)
ReadIOInMb 從這個檔案讀取的 MB 總數 sys.dm_io_virtual_file_stats
WriteIOInMb 寫入此檔案的 MB 總數 sys.dm_io_virtual_file_stats
NumOfReads 此檔案上發出的讀取總數 sys.dm_io_virtual_file_stats
NumOfWrites 在此檔案上發出的寫入總數 sys.dm_io_virtual_file_stats
ReadLatency 此檔案上的 IO 讀取延遲 sys.dm_io_virtual_file_stats
WriteLatency 此檔案上的 IO 寫入延遲 sys.dm_io_virtual_file_stats

在產生建議之前,至少需要 10 分鐘的數據收集,但為了準確評估您的工作負載,建議您長時間執行數據收集,以擷取尖峰和離峰使用量。

若要起始數據收集程式,請從連線到 Azure Data Studio 中的來源 SQL 實例開始,然後啟動 SQL 移轉精靈。 在步驟 2 上,選取 [取得 Azure 建議]。 選取 [立即收集效能數據],然後選取計算機上將儲存所收集數據的資料夾。

Screenshot that shows the wizard pane to collect performance data for SKU recommendations.

重要

數據收集程式會執行 10 分鐘,以產生第一個建議。 當您的作用中資料庫工作負載反映類似生產案例的使用方式時,請務必啟動數據收集程式。

產生第一個建議之後,您可以繼續執行數據收集程式來精簡建議。 如果您的使用模式隨著時間而有所不同,這個選項特別有用。

當您選取 [開始] 之後,數據收集程式就會開始。 每10分鐘,會匯總收集的數據點,並將每個計數器的最大值、平均數和變異數寫入一組三個CSV檔案。

您通常會在選取的資料夾中看到一組 CSV 檔案,其中包含下列後綴:

  • SQLServerInstance_CommonDbLevel_Counters.csv:包含資料庫檔案配置和元數據的相關靜態組態數據。
  • SQLServerInstance_CommonInstanceLevel_Counters.csv:包含伺服器實例硬體組態的相關靜態數據。
  • SQLServerInstance_PerformanceAggregated_Counters.csv:包含經常更新的匯總效能數據。

在此期間,讓 Azure Data Studio 保持開啟狀態,不過您可以繼續執行其他作業。 您可以隨時返回此頁面,然後選取 [停止數據收集] 來停止數據收集程式。

產生正確大小的建議

如果您已經從上一個會話收集效能數據,或使用其他工具(例如資料庫 移轉小幫手),您可以選取我已經擁有效能數據的選項來匯入任何現有的效能數據。 繼續選取儲存效能數據的資料夾(三個 .csv 檔案),然後選取 [ 開始 ] 以起始建議程式。

Screenshot that shows the pane to import performance data for a SKU recommendation.

注意

SQL 移轉精靈的步驟之一會要求您選取一組要評估的資料庫,而這些都是建議程序期間唯一要考慮的資料庫。

不過,效能數據收集程式會從來源 SQL Server 實例收集所有資料庫的性能計數器,而不只是選取的資料庫。

這表示先前收集的效能數據可用來重複重新產生不同資料庫子集的建議,方法是在步驟一上指定不同的清單。

建議參數

有多個可設定的設定可能會影響您的建議。

Screenshot that shows the recommendation parameters section.

選取 [ 編輯參數] 選項,根據您的需求調整這些參數。

Screenshot that shows the different recommendation parameters.

  • 縮放比例
    此選項可讓您提供緩衝區,以套用至每個效能維度。 此選項適用於季節性使用量、短期效能歷程記錄,以及未來使用量可能會增加的問題。 例如,如果您判斷四個虛擬核心 CPU 需求的規模係數為 150%,則真正的 CPU 需求為六個虛擬核心。

    默認縮放比例為100%。

  • 使用率百分比:
    匯總做為效能數據的數據點百分位數。

    預設值為第95個百分位數。

  • 開啟預覽功能
    此選項允許建議設定,可能尚未提供給所有區域中的所有使用者使用。

    這個選項預設為關閉。

  • 啟用彈性建議

    此選項會使用替代的建議模型,該模型會針對現有的雲端客戶利用個人化的價格效能分析。

    這個選項預設為關閉。

重要

如果您關閉 Azure Data Studio,資料收集程式就會終止。 收集到該點的數據會儲存在您的資料夾中。

如果您在資料收集進行時關閉 Azure Data Studio,請使用下列其中一個選項來重新啟動資料收集:

  • 重新開啟 Azure Data Studio,並匯入儲存在本機資料夾中的數據檔。 然後,從收集的數據產生建議。
  • 重新開啟 Azure Data Studio,然後使用移轉精靈重新開始數據收集。

最低許可權

若要查詢效能數據收集所需的系統檢視,此工作所使用的SQL Server 登入需要特定許可權。 您可以使用下列文稿建立評量和效能資料收集的最低特殊權限使用者:

-- Create a login to run the assessment
USE master;
GO

CREATE LOGIN [assessment] WITH PASSWORD = '<STRONG PASSWORD>';

-- Create user in every database other than TempDB and model and provide minimal read-only permissions
EXECUTE sp_MSforeachdb '
   USE [?];
   IF (''?'' NOT IN (''TempDB'',''model''))  
   BEGIN TRY
      CREATE USER [assessment] FOR LOGIN [assessment]
   END TRY
   BEGIN CATCH
      PRINT ERROR_MESSAGE()
   END CATCH'
   
EXECUTE sp_MSforeachdb '
   USE [?];
   IF (''?'' NOT IN (''tempdb'',''model''))  
   BEGIN TRY
      GRANT SELECT ON sys.sql_expression_dependencies TO [assessment]
   END TRY
   BEGIN CATCH
      PRINT ERROR_MESSAGE()
   END CATCH'
   
EXECUTE sp_MSforeachdb '
   USE [?];
   IF (''?'' NOT IN (''tempdb'',''model''))  
   BEGIN TRY
      GRANT VIEW DATABASE STATE TO [assessment]
   END TRY
   BEGIN CATCH
      PRINT ERROR_MESSAGE()
   END CATCH'

-- Provide server level read-only permissions
GRANT SELECT ON sys.sql_expression_dependencies TO [assessment];
GRANT SELECT ON sys.sql_expression_dependencies TO [assessment];
GRANT EXECUTE ON OBJECT::sys.xp_regenumkeys TO [assessment];
GRANT VIEW DATABASE STATE TO assessment;
GRANT VIEW SERVER STATE TO assessment;
GRANT VIEW ANY DEFINITION TO assessment;

-- Provide msdb specific permissions
USE msdb;
GO

GRANT EXECUTE ON [msdb].[dbo].[agent_datetime] TO [assessment];
GRANT SELECT ON [msdb].[dbo].[sysjobsteps] TO [assessment];
GRANT SELECT ON [msdb].[dbo].[syssubsystems] TO [assessment];
GRANT SELECT ON [msdb].[dbo].[sysjobhistory] TO [assessment];
GRANT SELECT ON [msdb].[dbo].[syscategories] TO [assessment];
GRANT SELECT ON [msdb].[dbo].[sysjobs] TO [assessment];
GRANT SELECT ON [msdb].[dbo].[sysmaintplan_plans] TO [assessment];
GRANT SELECT ON [msdb].[dbo].[syscollector_collection_sets] TO [assessment];
GRANT SELECT ON [msdb].[dbo].[sysmail_profile] TO [assessment];
GRANT SELECT ON [msdb].[dbo].[sysmail_profileaccount] TO [assessment];
GRANT SELECT ON [msdb].[dbo].[sysmail_account] TO [assessment];

-- USE master;
-- GO
-- EXECUTE sp_MSforeachdb 'USE [?]; BEGIN TRY DROP USER [assessment] END TRY BEGIN CATCH SELECT ERROR_MESSAGE() END CATCH';
-- DROP LOGIN [assessment];

不支援的案例和限制

疑難排解

  • 未產生任何建議
    • 如果未產生任何建議,則這種情況可能表示未識別任何可完全滿足來源實例效能需求的組態。 若要查看特定大小、服務層級或硬體系列被取消資格的原因:
      • 移至 [ > 顯示所有命令 > 開啟擴充功能記錄] 資料夾,以從 Azure Data Studio 存取記錄
      • 流覽至 Microsoft.mssql > SqlAssessmentLogs > 開啟 SkuRecommendationEvent.log
      • 記錄包含已評估之每個潛在設定的追蹤,以及它為何/未被視為合格組態的原因: Screenshot that shows SKU recommendations log.
    • 嘗試重新產生已啟用彈性建議的建議。 此選項會使用替代的建議模型,此模型會針對現有的雲端客戶利用個人化的價格效能分析。

下一步