簡體   English   中英

Azure SQL 每個數據庫而不是每個服務器的數據庫 DTU 計算器

[英]Azure SQL Database DTU Calculator per database not per server

我在網上找到了一個很棒的腳本,它可以讓我們每個人在遷移之前確定在 Azure 上需要多少果汁:

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Unrestricted -Force

$ErrorActionPreference = "Stop"
$VerbosePreference = "Continue"

cls

Write-Output "Collecting counters..."
Write-Output "Press Ctrl+C to exit."

$counters = @("\Processor(_Total)\% Processor Time", 
"\LogicalDisk(_Total)\Disk Reads/sec", 
"\LogicalDisk(_Total)\Disk Writes/sec", 
"\SQLServer:Databases(_Total)\Log Bytes Flushed/sec") 

Get-Counter -Counter $counters -SampleInterval 1 -MaxSamples 3600 | 
    Export-Counter -FileFormat csv -Path "C:\sql-perfmon-log.csv" -Force

問題是這個腳本針對的是整個服務器,而不是特定的數據庫。

是否可以通過 PowerShell 或通過 PowerShell 運行 T-SQL 查詢並每秒檢索這 4 個指標:

  • 處理器 - 處理器時間百分比
  • 邏輯磁盤 - 磁盤讀取/秒
  • 邏輯磁盤 - 磁盤寫入/秒
  • 數據庫 - 刷新的日志字節數/秒

目標是僅為 1 個數據庫收集這 4 個指標。

這些是系統范圍的指標,沒有辦法將它們 scope 歸結為單個數據庫。

您可以使用RML Utilities捕獲服務器上所有流量的 SQL 跟蹤,並針對您僅還原目標數據庫的實例重放它。

或者您可以對連接到目標數據庫的會話的資源利用率進行采樣

select SYSDATETIME() sample_time,
       sum(cpu_time) cpu_time, 
       sum(total_elapsed_time) total_elapsed_time,
       sum(reads) reads,
       sum(writes) writes
from sys.dm_exec_sessions
where database_id = db_id('AdventureWorks2017')

或者創建一個 XEvent session 以在每次 session 結束時記錄此數據:

CREATE EVENT SESSION [aw_logout] ON SERVER 
ADD EVENT sqlserver.logout(
    WHERE ([sqlserver].[database_name]=N'AdventureWorks2017'))
ADD TARGET package0.event_file(SET filename=N'aw_session_logout')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM