使用 HammerDB 为 Aurora PostgreSQL 设置 Babelfish 进行性能测试

作者:亚历克斯·扎雷宁| 2023 年

在这篇博客文章中,我将详细介绍如何使用 HammerDB 性能工具设置 Babelfish for Aurora PostgreSQL 进行性能分析。

1。简介

无论是迁移到 亚马逊云科技 的组成部分,还是优化 亚马逊云科技 上已有的工作负载,客户都在寻找实现 SQL Server 工作负载现代化的选项。一个有吸引力的现代化选择是将这些工作负载迁移到开源平台,例如Babelfish,以避免昂贵的微软许可证、供应商锁定期和审计。

适用于 Aurora PostgreSQL 的 Babelfish 是亚马逊 Aurora PostgreSQL 兼容版的一项功能,它使 Aurora 能够理解为微软 SQL Server 编写的应用程序中的命令。通过允许 Aurora PostgreSQL 理解 微软 T-SQL 并使用 SQL Server 的专有 表格数据流 (TDS) 协议进行通信,Babelfish 加快了兼容工作负载从 SQL Server 迁移到开源数据库平台的速度并降低了迁移风险。只需进行少量更改或不做任何更改,您就可以针对从 SQL Server 迁移的 Babelfish 数据库运行为 SQL Server 开发的应用程序。

随着 Babelfish 的成熟,提供更多的特性和功能,越来越多的 SQL Server 工作负载可以迁移到 Babelfish。因此,许多 亚马逊云科技 客户 计划或正在将 其 SQL Server 工作负载迁移到 Babelfish 也就不足为奇了。 Babelfish Compass 工具 有助于评估您的数据库与 Babelfish 的兼容性并确定迁移路径。

除了 Babelfish 兼容性 之外 ,客户还有兴趣了解他们可以期望从 Babelfish 获得什么样的性能。HammerDB 是全球最受欢迎的数据库的 领先基准测试和负载测试软件 ,支持甲骨文、微软 SQL Server、IBM Db2、MySQL、MariaDB 和 PostgreSQL。虽然 HammerDB 不直接支持 Babelfish,但我们可以使用 HammerDB SQL Server 配置对 Babelfish 进行基准测试。

这篇博客文章重点介绍了在 Babelfish 中使用 HammerDB 时遇到的问题,并展示了如何克服这些问题以成功使用 HammerDB 实现 Babelfish 性能测试。

2。先决条件

你需要一个 带有 亚马逊虚拟私有云 (亚马逊 VPC) 的 亚马逊云科技 账户 ,你可以使用它进行 Babelfish 性能测试。要推动 Babelfish 的 HammerDB 性能测试,你需要一台运行 HammerDB 的负载生成机器。你可以在 Windows 或 Linux 计算机上部署 HammerDB。本指南重点介绍使用 亚马逊弹性计算云 (亚马逊 EC2) Windows 实例 来推动性能测试。但是,以下大多数配置步骤同样适用于使用 Linux 计算机进行性能测试。

首先,你需要在负载生成实例 上安装 HammerDB 工具 版本 4.4 HammerDB 文档详细介绍了在 Windows 或 Linux 上安装 HammerDB。 在最新版本的 HammerDB 中, ostat 支付 存储过程已更改为使用 “SELECT 50%” 条款,而 Babelfish 尚 不支持 该条款。我已经向 HammerDB 项目报告了 相应的问题 。在 HammerDB 团队解决此问题或 Babelfish 支持此条款之前,请使用 H ammerDB 版本 4.4 在 Babelfish 上实施性能测试。

要运行性能测试,你需要一个 Babelfish for Aurora PostgreSQL 数据库集群,你可以创建以下 亚马逊云科技 文档。 Aurora PostgreSQL 版本 13.4 及更高版本为 Aurora PostgreSQL 支持 Babelfis我建议为你的测试集群选择支持的最新版本的 Aurora PostgreSQL。

3。在 Babelfish 上构建 HammerDB OLTP 数据库

要使用 HammerDB 进行性能基准测试,必须先构建测试数据库。HammerDB 支持用于性能 测试的 OLTP 分析 工作负载。在这篇博客文章中,我将重点介绍 OLTP 工作负载,因为它的使用范围更广。

HammerDB 支持在多个平台上构建 OLTP 测试数据库。由于 Babelfish 与 SQL Server 兼容,因此在使用 HammerDB 生成测试数据库时,我 选择了 SQL Server 作为构建的目标平台。HammerDB 遵循一 组构建选项来构建测试数据库。 图 1 显示了一组示例编译选项。

Setting HammerDB Schema Build options图 1。设置 HammerDB 架构构建选项。

对于 SQL Server 字段,您将使用 Babelfish 数据库集群 的 写入器终端节点 SQL 服务器端口 是 MS SQL 服务器的默认 1433 端口。HammerDB 默认为 SQL Server 的 ODBC 驱动程序 18,但你可以 输入测试 Windows 实例上可用的 驱动程序

对于 SQL Server 用户 ID SQL 服务器用户密码 字段,使用 您在为 Aurora PostgreSQL 数据库集群 创建 Babelfish 时指定的 用户 ID 密码

TPROC-C SQL Server 数据库 字段中,输入你的 Babelfish 集群数据库名称。虽然 HammerDB 可以创建测试架构并将其填充到现有的空 SQL Server 数据库中,但使用 Babelfish,如果你选择现有数据库,HammerDB 数据库的加载将失败! 因此,重要的是让 HammerDB 创建数据库,而不是在现有数据库中生成架构。

仓库 数量字段 定义测试数据库的大小,每个仓库使用大约 100 MB 的数据库空间。 虚拟用户构建架构的价值越大 ,构建的速度就越快,因为虚拟用户将并行构建仓库。指定等于或小于目标仓库数量的虚拟用户数量。如图 1 所示,构建 10 个仓库的数据库可能需要 10 到 15 分钟,具体取决于您的测试驱动程序实例和托管 Babelfish 数据库的 Aurora for PostgreSQL 集群实例的大小。

如果您计划构建一个大型测试数据库,那么只要运行 HammerDB 的测试驱动程序实例可以支持那么多的并发用户并且 Babelfish 数据库集群使用足够大的主机,那么指定大量虚拟用户将非常有益。 例如,为了使用 500 个虚拟用户创建包含 75,000 个仓库的测试数据库,如图 2 所示,我使用了 d b.r6i.32xlarge 实例为 PostgreSQL 数据库集群配置了 Aurora,并在 HammerDB 主机上使用了通用型 m6i.12xl arge 实例。 尽管如此,建立和填充这个数据库还是花了几天时间。

HammerDB Schema Build options for a large database图 2。适用于大型数据库的 HammerDB 架构构建选项。

值得注意的是,当其余虚拟用户完成数据库的构建和填充后,HammerDB 虚拟用户 #1 将继续创建索引和存储过程,如图 3 所示,对于大型测试数据库来说,这也可能需要很长时间。

Virtual user #1 continues working after other users finished图 3。虚拟用户 #1 在其他用户完成后 继续工作

4。HammerDB OLTP 数据库的生成后配置

在生成过程结束时,当所有工作用户成功终止时,虚拟用户 #1 将因错误而终止,如图 4 所示。

User #1 terminates with the error图 4。用户 #1 因错误而终止

在分析了构建日志之后,我发现这个错误与创建 dbo.sp_upd stats 过程有关。之所以出现此错误,是因为 Babelfish 目前不支持 以 “dbo” 形式执行的限定符, 如图 5 所示:

CREATE   PROCEDURE dbo.sp_updstats
with execute as 'dbo'
as exec sp_updatestats

图 5。创建过程脚本失败

修复很简单——使用 SSMS(或其他与 SQL Server 兼容的工具)连接到新的 Babelfish 数据库,然后使用图 6 所示的脚本创建过程 dbo.sp_upd stats:

CREATE   PROCEDURE dbo.sp_updstats
as exec sp_updatestats

图 6。更改了 sp_updstats HammerDB 存储过程的 脚本。

HammerDB 计算每分钟 新订单数 (NOPM) 的系统独立性能指标和数据库特定的每分钟 交易量 (TPM) 指标。从 HammerDB 4.0 开始,NOPM 是推荐的指标。

HammerDB 根据系统视图 sys.dm_os_performance_ counters 来计算 TPM,而 Babelfish 没有提供这种视图。 因此,为了让 HammerDB 成功运行,我使用 PostgreSQL 语义在 P l/pg SQL 中创建了这个系统视图的限定版本。要实现此视图,请 使用 您选择的 PostgreSQL 客户端 连接到您的 Babelfish 数据库 ,然后运行图 7 中提供的脚本。 DBeaver 是我喜欢的客户端,因为它是一个提供便捷的 GUI 界面的通用数据库工具。

-- DDL for sys.dm_os_performance_counters view
-----------------------------------------------------
--CREATE OR REPLACE VIEW sys.dm_os_performance_counters
AS
SELECT 'SQLServer:SQL Statistics'::text        AS object_name,
       'Batch Requests/sec'::text              AS counter_name,
       272696576                               AS cntr_type,
       sum (pg_stat_database.xact_commit 
          + pg_stat_database.xact_rollback)::integer 
                                               AS cntr_value
FROM 	pg_stat_database
WHERE 	pg_stat_database.datname = 'babelfish_db'::name;
--------------------------------------------------------------
-- To Enable access from TDS-SQL side execute following commands:
--------------------------------------------------------------
ALTER VIEW sys.dm_os_performance_counters OWNER TO master_dbo;
GRANT SELECT ON sys.dm_os_performance_counters TO PUBLIC;

图 7。sys.dm_os-performance_counters 限定视图脚本

通过这些细微的更改,Babelfish 数据库已准备好进行 HammerDB 性能基准测试。

5。正在对 Babelfish 进行 HammerDB 性能测试

要运行 HammerDB 性能测试,必须先配置 驱动程序脚本选项 。 我通过图 8 所示的 GUI 屏幕配置了这些选项。此屏幕中的某些字段与我在图 1 中介绍并在第 3 节中讨论的架构构建选项类似。现在,让我们重点关注驱动程序脚本的特定选项。

Screenshot of Setting Driver Script options图 8。设置驱动程序脚本选项。

选择 “ 定时驱动程序脚本 ” 选项适用于运行一系列可重复的测试。另一种选择是运行手动基准测试来验证安装和配置。在 “加速时间 分钟数 ” 字段中,您可以指定开始测试之前的加速分钟数。这应包括为测试创建所有虚拟用户所需的时间,以及为测试预热数据库所需的时间。最好从高处出错,因为如果你没有提供足够的时间来创建所有虚拟用户和预热数据库(预加载缓冲区、优化查询计划等),你可能会得到错误的基准测试结果。

对于 “测试时长 分钟数 ” 字段,可以安全地使用 5 ,但也可以尝试使用更高的数字。为确保更多的 I/O 活动,请选择 “ 使用所有仓库 ” 选项。

要确定系统的最佳性能,请 增加 运行工作负载的虚拟用户数量 ,直到 NOPM 结果稳定下来。由于性能数字随着虚拟用户数量的增加而缓慢变化,因此一般建议是增加虚拟用户的数量,以便以几何级数进行后续测试。为了实现统计一致性,请重复每次测试几次。我通常会以相对较多的虚拟用户开始测试系列,然后忽略这个结果,让数据库可以选择在实际测试之前进行预热。这导致需要运行相当多的测试。为了自动运行多项测试,HammerDB 提供了 自动驾驶 功能。

HammerDB Autopilot options screen图 9。HammerDB 自动驾驶仪选项。

图 9 显示了自动驾驶仪配置示例。“虚拟用户序列中每次测试的 分钟数 ” 字段指定分配给运行每项测试的时间。HammerDB 客户端在为测试运行创建所有虚拟用户后开始计数,这是启动时间的一部分。因此,您可以选择一个小于加速和测试时间之和的数字;这可能会减少运行长测试序列所需的总时间。监控序列中的第一个测试;如果在开始下一次测试之前未提供结果,请增加此数字。 HammerDB 文档 提供了有关自动驾驶仪配置的更多详细信息。

6。确定您的 HammerDB 测试数据库的大小

与大多数其他数据库类似,Babelfish 的性能在很大程度上取决于测试数据库的大小。使用 HammerDB,数据库的大小取决于构建测试数据库时定义的仓库数量。 一般指导方针 是每个仓库允许大约 100MB。

假设你需要获取由 HammerDB 创建的示例 Babelfish 数据库的确切大小。在这种情况下,你可以使用图 10 中显示的脚本,这是我专门为解决这个问题而开发的。 要运行此脚本,请 使用 您选择的 PostgreSQL 客户端 连接到您的 Babelfish 数据库 ,因为此脚本是用 Pl/pgSQL 编写的。

SELECT
    schema_name,
    pg_size_pretty(sum(table_size)) AS GB_size,
    sum(table_size) as Byte_Size
FROM (
     SELECT
        pg_catalog.pg_namespace.nspname           AS schema_name,
        relname,
        pg_relation_size(pg_catalog.pg_class.oid) AS table_size
     FROM pg_catalog.pg_class
        JOIN pg_catalog.pg_namespace 
            ON relnamespace = pg_catalog.pg_namespace.oid
     ) t
WHERE  schema_name NOT LIKE 'pg_%’ 		AND schema_name NOT LIKE 'sys%’
AND 	schema_name NOT LIKE 'information_%’	AND schema_name NOT LIKE 'master_%'
AND 	schema_name NOT LIKE 'temp_%’		AND schema_name NOT LIKE 'msdb_%’
GROUP BY
	schema_name;

图 10。用于计算 Babelfish 测试数据库大小的脚本。

7。清理

如果您创建了第 2 节中定义的先决条件,请在性能测试结束时将其处置以避免额外费用。要删除 Babelfish 测试数据库,请删除 底层 Aurora fo r PostgreS QL 集群。 如果你不需要 HammerDB,你可以卸载 HammerDB。如果您不需要用于测试的 Windows EC2 实例,则可以 将其 终止

8。结论

在这篇博客文章中,我概述了有关如何使用行业标准的 HammerDB 性能工具构建示例 Babelfish 数据库以运行基准测试的步骤并提供了详细信息。我发现了构建测试数据库时可能出现的问题,并提供了解决这些问题的步骤和脚本。我讨论了使用 HammerDB 进行数据库性能测试的基础知识并概述了重要参数。

有了这些信息,你应该能够开始针对你的场景进行 Babelfish 性能测试,并对 Babelfish 产品充满信心,从而促进你从 MS SQL Server 迁移到兼容开源的 Babelfish for Aurora PostgreSQL 平台。

使用本文中概述的方法,我们进行了多次 Babelfish 性能测试,并在博客文章 Babelfish 中发布了结果,以获取 Aurora Post greSQL 性能测试结果。


亚马逊云科技 可以帮助您评估贵公司如何充分利用云计算。加入数百万信任我们在云端迁移和现代化他们最重要的应用程序的 亚马逊云科技 客户的行列。要了解有关对 Windows 服务器或 SQL Server 进行现代化的更多信息,请访问 亚马逊云科技 上的 Windows 立即联系我们 ,开始您的现代化之旅。