【问题标题】:Azure SQL Database DTU Calculator per database not per server每个数据库而不是每个服务器的 Azure SQL 数据库 DTU 计算器
【发布时间】:2021-06-08 13:13:40
【问题描述】:

我找到了一个amazing script online,它可以让我们每个人在迁移之前确定我们在 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 个指标。

【问题讨论】:

    标签: azure powershell tsql scripting azure-sql-database


    【解决方案1】:

    这些是系统范围的指标,无法将它们缩小到单个数据库。

    您可以使用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 会话来记录这些数据:

    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')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-06
      • 1970-01-01
      • 1970-01-01
      • 2018-07-03
      相关资源
      最近更新 更多