mcpField
A
azure-sql-optimization

azure-sql-optimization

github.com/josiahsiegel数据与数据库59162 次安装19 周前更新
代码仓库

关于 azure-sql-optimization

面向 Azure SQL Database 管理者与开发者的优化参考技能,涵盖性能监控、自动调优、连接配置和成本控制,并提供 Azure 专属限制与处理方式。

主要功能

  1. 01比较服务层级与 DTU、vCore
  2. 02查询资源与性能监控示例
  3. 03自动调优及建议应用
  4. 04Hyperscale 与无服务器配置
  5. 05连接池、重试与成本优化

适用场景

  1. 01选择适合工作负载的服务层级
  2. 02定位高 CPU 或 I/O 查询
  3. 03配置自动暂停与只读扩展
  4. 04评估容量并优化数据库成本

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/josiahsiegel/claude-plugin-marketplace --skill azure-sql-optimization

安装后在 Claude Code 中输入/azure-sql-optimization确认已加载。

详细介绍

Azure SQL Database 优化

针对 Azure SQL Database 的平台专属优化。

快速参考

服务层级对比
层级最适合场景最大容量主要功能
Basic开发/测试、轻量工作负载2 GB成本低
Standard通用工作负载1 TBS0-S12 DTU
Premium高 I/O、低延迟4 TBP1-P15 DTU
General Purpose(vCore)大多数工作负载16 TB无服务器选项
Business Critical高可用性4 TB内存中技术、只读副本
Hyperscale大型数据库100 TB存储自动扩展
DTU 与 vCore
方面DTUvCore
定价资源打包计算与存储分开计费
控制有限精细控制
预留容量否是(最高可节省 72%)
无服务器否是(General Purpose)
最适合简单工作负载可预测的工作负载、迁移后的工作负载

性能监控

资源消耗
-- Last 15 minutes (avg 15-second intervals)
SELECT
    end_time,
    avg_cpu_percent,
    avg_data_io_percent,
    avg_log_write_percent,
    avg_memory_usage_percent,
    max_worker_percent,
    max_session_percent
FROM sys.dm_db_resource_stats
ORDER BY end_time DESC;

-- Historical (last 14 days, hourly)
SELECT
    start_time,
    end_time,
    avg_cpu_percent,
    avg_data_io_percent,
    avg_log_write_percent
FROM sys.resource_stats
WHERE database_name = DB_NAME()
ORDER BY start_time DESC;
查询性能洞察
-- Top CPU consumers last hour
SELECT TOP 20
    qt.query_sql_text,
    rs.avg_cpu_time / 1000 AS avg_cpu_ms,
    rs.count_executions,
    rs.avg_cpu_time * rs.count_executions / 1000 AS total_cpu_ms
FROM sys.query_store_query q
JOIN sys.query_store_query_text qt ON q.query_text_id = qt.query_text_id
JOIN sys.query_store_plan p ON q.query_id = p.query_id
JOIN sys.query_store_runtime_stats rs ON p.plan_id = rs.plan_id
JOIN sys.query_store_runtime_stats_interval rsi ON rs.runtime_stats_interval_id = rsi.runtime_stats_interval_id
WHERE rsi.start_time >= DATEADD(hour, -1, GETUTCDATE())
ORDER BY rs.avg_cpu_time * rs.count_executions DESC;

自动优化

启用自动优化
-- Enable all auto-tuning options
ALTER DATABASE current
SET AUTOMATIC_TUNING (
    FORCE_LAST_GOOD_PLAN = ON,
    CREATE_INDEX = ON,
    DROP_INDEX = ON
);

-- Check current settings
SELECT * FROM sys.database_automatic_tuning_options;
查看优化建议
-- Current recommendations
SELECT
    name,
    reason,
    score,
    state_desc,
    is_revertable_action,
    is_executable_action,
    details
FROM sys.dm_db_tuning_recommendations;
应用建议
-- Force a specific query plan
EXEC sp_query_store_force_plan @query_id = 12345, @plan_id = 67890;

-- Unforce plan
EXEC sp_query_store_unforce_plan @query_id = 12345, @plan_id = 67890;

Hyperscale 功能

存储自动扩展
  • 自动扩展至 128 TB
  • 无需预先配置存储
  • 仅按实际使用的存储付费
读取扩展
-- Connection string option
ApplicationIntent=ReadOnly

-- In application code
"Server=myserver.database.windows.net;Database=mydb;ApplicationIntent=ReadOnly;..."
命名副本
-- Create named replica
ALTER DATABASE MyDatabase
ADD SECONDARY ON SERVER MySecondaryServer
WITH (SERVICE_OBJECTIVE = 'HS_Gen5_2', SECONDARY_TYPE = Named, NAME = N'MyReadReplica');

无服务器配置

配置自动暂停
-- Via Azure Portal, CLI, or PowerShell
-- Set auto-pause delay (minutes), min/max vCores

-- Check current usage
SELECT
    cpu_percent,
    auto_pause_delay_in_minutes_configured
FROM sys.dm_db_resource_stats_serverless;
无服务器最佳实践
  1. 用于间歇性工作负载 - 在空闲期间节省成本
  2. 设置合适的最小 vCore 数量 - 为时间敏感型应用避免冷启动
  3. 监控自动暂停 - 自动恢复会增加延迟
  4. 对于持续运行的工作负载,可考虑始终开启 - 预配模式可能更便宜

连接优化

连接池
// .NET connection string
"Server=tcp:myserver.database.windows.net,1433;Database=mydb;
 Min Pool Size=10;Max Pool Size=100;Connection Timeout=30;"
重试逻辑
// Azure SQL requires retry logic for transient faults
var options = new SqlRetryLogicOption()
{
    NumberOfTries = 5,
    DeltaTime = TimeSpan.FromSeconds(1),
    MaxTimeInterval = TimeSpan.FromSeconds(30)
};
连接最佳实践
  1. 使用连接池 - 降低连接开销
  2. 实现重试逻辑 - 处理暂时性故障(错误 40613、40197)
  3. 使用重定向连接模式 - 初始连接后性能更佳
  4. 及时关闭连接 - 不要不必要地占用连接

Azure 特定限制

不支持的功能
  • SQL Agent(使用 Azure Functions、Logic Apps)
  • 从文件执行 BULK INSERT(使用 Blob Storage)
  • 链接服务器(使用 Elastic Query)
  • FILESTREAM
  • 同一服务器中的跨数据库查询(使用 Elastic Query)
解决方法
从 Blob Storage 批量插入
-- Create credential
CREATE DATABASE SCOPED CREDENTIAL BlobCredential
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = 'your_sas_token';

-- Create external data source
CREATE EXTERNAL DATA SOURCE BlobStorage
WITH (
    TYPE = BLOB_STORAGE,
    LOCATION = 'https://youraccount.blob.core.windows.net/container',
    CREDENTIAL = BlobCredential
);

-- Bulk insert
BULK INSERT MyTable
FROM 'data.csv'
WITH (DATA_SOURCE = 'BlobStorage', FORMAT = 'CSV', FIRSTROW = 2);
使用 Elastic Query 进行跨数据库查询
-- On target database
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'password';

CREATE DATABASE SCOPED CREDENTIAL ElasticCredential
WITH IDENTITY = 'username', SECRET = 'password';

CREATE EXTERNAL DATA SOURCE RemoteDB
WITH (
    TYPE = RDBMS,
    LOCATION = 'remote-server.database.windows.net',
    DATABASE_NAME = 'RemoteDatabase',
    CREDENTIAL = ElasticCredential
);

CREATE EXTERNAL TABLE dbo.RemoteTable (...)
WITH (DATA_SOURCE = RemoteDB);

成本优化

预留容量
  • 相较于即用即付,最高可节省 72%
  • 期限为 1 年或 3 年
  • 可灵活更换或退款
合理调整规格
-- Check if over-provisioned
SELECT
    AVG(avg_cpu_percent) AS avg_cpu,
    MAX(avg_cpu_percent) AS max_cpu,
    AVG(avg_data_io_percent) AS avg_io,
    MAX(avg_data_io_percent) AS max_io
FROM sys.dm_db_resource_stats
WHERE end_time >= DATEADD(day, -7, GETUTCDATE());

-- If avg < 40% consistently, consider downsizing
Hyperscale 成本注意事项
  • 计算:按秒计费
  • 存储:按已用空间按小时计费
  • 只读副本:产生额外计算成本
  • 内存不会自动释放(请监控并适当扩展或缩减)

评论

支持 Markdown