使用 Amazon RDS for SQL Server 的性能洞察监控查询性能 数据库博客
使用 Amazon RDS 性能洞察监控 SQL Server 查询性能
关键要点
Amazon RDS 性能洞察是一个强大的功能,提供实时和历史的数据库性能洞察。新增 SQL 摘要和 SQL 统计功能,以改善数据库查询分析。性能洞察的界面能够以多种方式可视化数据库负载,并分析查询执行计划。Amazon RDS 性能洞察Performance Insights是 Amazon 关系数据库服务Amazon RDS 的一项强大功能,提供您数据库性能的实时和历史洞察。无论您是在排查性能瓶颈、识别慢查询还是优化系统,性能洞察都可以给予帮助。通过性能洞察,您可以深入了解数据库的行为。
性能洞察扩展了现有的 Amazon RDS 监控功能,可以详细展示并帮助您分析数据库性能。使用 性能洞察仪表板,您可以可视化 RDS 数据库实例的负载,并按应用程序、数据库、等待事件、SQL 语句、主机或用户进行切片分析。

在本文中,我们将讨论最近在性能洞察中发布的新功能:
SQL 摘要和 SQL 统计由性能洞察生成的 SQL Server 查询执行计划SQL 摘要和 SQL 统计
在深入新功能之前,我们先了解一下 SQL 摘要。SQL 摘要 是多个结构相似但具体值不同的实际查询的组合。摘要将 SQL 查询中的绑定值替换为问号。例如,一个摘要可能是 SELECT FROM emp WHERE lname=,其中可能包括以下子查询:
SELECT FROM emp WHERE lname = SanchezSELECT FROM emp WHERE lname = OlagappanSELECT FROM emp WHERE lname = Wu
要查看摘要中的具体 SQL 语句,请选择查询,然后点击加号符号以展开细节。在以下示例中,所选查询是一个摘要。
然而,SQL Server 不支持像开源引擎那样的摘要。摘要文本将帮助您理解哪些类型的查询对数据库性能的影响最大。在 SQL Server 中,每个摘要都与特定的 queryhash 相关联。
queryhash 或计算的查询的二进制哈希值用于识别逻辑相似的查询。您可以使用 queryhash 来确定仅因具体值不同而产生的查询的资源使用情况。queryhash 是一个计算值,无论具体值如何,都指向一个查询。例如:
SQL Text select col11col2 from table1 where col345465757e ltgt 456
DIGESTTEXT select col1col2 from table1 where col345465757e ltgt
Amazon RDS for SQL Server 会在语句和摘要级别收集 SQL 统计信息,针对顶部 SQL 查询的详细信息,请参见 SQL Server 的 SQL 统计。
查询执行计划
性能洞察仅捕获估计的查询执行计划。所捕获的计划包含所有计划节点和统计信息。更多信息请参见 使用性能洞察仪表板分析执行计划。
所捕获的执行计划可以以两种不同格式查看:
表格格式 快速理解计划节点和统计信息可下载的 XML 格式 结合使用 SQL Server Management Studio 进行进一步调查性能洞察收集的执行计划细节将帮助您:
找出顶部 SQL 查询所使用的计划比较同一查询的不同计划找出何时查询切换到新计划深入分析成本最高的计划具体操作符解决方案概述
在接下来的部分中,我们将演示如何连接到您的 RDS 数据库实例,准备您的数据库,并使用性能洞察仪表板分析 SQL Server 的执行计划。
前提条件
在开始之前,请确保您完成以下前提条件:
创建 RDS 数据库实例。启用性能洞察。配置性能洞察的访问策略。拥有一个 Amazon 弹性计算云Amazon EC2 Windows 实例,并已安装 SQL Server Management StudioSSMS。连接到 RDS 数据库实例并准备数据库
我们首先创建一个示例数据库和表格。完成以下步骤:
打开 SSMS。连接到 RDS for SQL Server 数据库实例。选择 新查询。输入以下查询并选择 执行:创建数据库CREATE DATABASE testDB GO 创建 Customers 表CREATE TABLE Customers ( CustomerID INT PRIMARY KEY CustomerName NVARCHAR(100))
向 Customers 表插入一万行DECLARE @CustomerCounter INT = 1WHILE @CustomerCounter lt= 10000BEGIN INSERT INTO Customers (CustomerID CustomerName) VALUES (@CustomerCounter Customer CAST(@CustomerCounter AS NVARCHAR(10))) SET @CustomerCounter = @CustomerCounter 1END
创建 Products 表CREATE TABLE Products ( ProductID INT PRIMARY KEY ProductName NVARCHAR(100) UnitPrice DECIMAL(10 2))
向 Products 表插入一万行DECLARE @ProductCounter INT = 1WHILE @ProductCounter lt= 10000BEGIN INSERT INTO Products (ProductID ProductName UnitPrice) VALUES (@ProductCounter Product CAST(@ProductCounter AS NVARCHAR(10)) RAND() 100) SET @ProductCounter = @ProductCounter 1END
创建 Orders 表CREATE TABLE Orders ( OrderID INT PRIMARY KEY CustomerID INT OrderDate DATE)
向 Orders 表插入一万行DECLARE @OrderCounter INT = 1WHILE @OrderCounter lt= 10000BEGIN INSERT INTO Orders (OrderID CustomerID OrderDate) VALUES (@OrderCounter (ABS(CHECKSUM(NEWID())) 1000000) 1 DATEADD(DAY (@OrderCounter 365) GETDATE())) SET @OrderCounter = @OrderCounter 1END
创建 OrderDetails 表CREATE TABLE OrderDetails ( OrderDetailID INT PRIMARY KEY OrderID INT ProductID INT Quantity INT)
使用以下语句启用 SHOWPLANXML:显示查询的 XML 执行计划 SET SHOWPLANXML ONGO
以下是用于演示的示例查询:
pioneer加速器下载安装查询 1 使用 Where 子句。
SELECT OrdersOrderID FROM Orders WHERE OrdersOrderDate BETWEEN 20230101 AND 20231231
查询 2 使用连接。
SELECT OrdersOrderID CustomersCustomerName SUM(OrderDetailsQuantity ProductsUnitPrice) AS TotalPriceFROM OrdersJOIN Customers ON OrdersCustomerID = CustomersCustomerIDJOIN OrderDetails ON OrdersOrderID = OrderDetailsOrderIDJOIN Products ON OrderDetailsProductID = ProductsProductIDWHERE OrdersOrderDate BETWEEN 20230101 AND 20231231GROUP BY OrdersOrderID CustomersCustomerNameHAVING SUM(OrderDetailsQuantity ProductsUnitPrice) gt 1000
使用性能洞察仪表板分析 SQL Server 查询执行计划
完成以下步骤以分析 SQL Server 查询执行计划:
在 Amazon RDS 控制台的导航窗格中,选择 性能洞察。选择一个 SQL Server DB 实例。性能洞察仪表板将显示该数据库实例的监控信息。
在 数据库负载 部分,选择 计划 下拉菜单,切换为 按切片。数据库负载图显示了您顶级 SQL 语句所使用的计划及其对数据库生成的负载。每个计划哈希值出现在颜色编码的方形图的右侧。每个哈希值唯一标识一个计划。
选择齿轮图标并选择您感兴趣的字段,例如 总耗时、处理的行/秒 和 计划计数。
在 顶级 SQL 部分,选择 SQL 文本 标签以显示完整的 SQL 语句。
选择 计划 标签以分析查询执行计划。
本文中的例子并非旨在深入比较执行计划,而是展示性能洞察仪表板在分析这些计划方面的能力。我们的展示故意简化,以突出其基本功能。
结论
监控是维护 SQL Server 数据库在 Amazon RDS 上的可靠性、可用性和性能的重要组成部分。数据库管理员DBA一直依赖分析 SQL Server 统计信息和查询执行计划来理解查询在数据库引擎中的处理方式。借助性能洞察仪表板展示 SQL Server 统计信息和执行计划,DBA 如今可以进一步微调 SQL Server 性能,以实现最佳的数据库操作并提升整体系统效率。本文展示了如何通过执行计划分析数据库负载及比较特定查询的不同计划。
要开始使用性能洞察,请参考 使用性能洞察监控数据库负载。
关于作者
Sudarshan Roy 是 Amazon 网络服务全球数据库服务组织WWSO的高级数据库专家云解决方案架构师。他领导大规模数据库迁移和现代化项目,为企业客户解决复杂的迁移挑战,将数据库工作负载迁移到 AWS 云上。
Sudhir Amin 是 Amazon 网络服务的高级解决方案架构师。他在纽约负责为不同产业客户提供架构指导和技术支持,加速他们的云迁移过程。他是台球、拳击和 UFC 等竞技运动的忠实粉丝,还喜欢去野生动物保护区旅行,近距离观察全球最壮丽的动物。