语句回放
构建测试工作负载的一种方法是记录针对源服务器执行的语句,然后将其回放到测试系统中。为此目的,有一些工具与 PostgreSQL 兼容。
tsung
项目主页:http://tsung.erlang-projects.org/
Tsung 实现了一个多线程模型,该模型跟踪每个查询所属的事务,并以与原始事务相同的并发性运行它们。
Tsung 还带有一个记录器,它是一个 PostgreSQL 代理。你可以将其连接到你的服务器,将你的客户端连接到它,并让它一次记录一个会话。然后在配置中,你可以选择要混合的每个会话的数量。
请注意,Tsung 并不是真正为了回放日志而设计的。它是为人工工作负载生成而设计的,因此它对可以回放的会话数量非常有限......不超过 200 个左右。根据你的实际工作负载,这可能是一个无法克服的障碍。
Tsung 加载测试 Postgresql 服务器教程
playr
项目主页:http://github.com/myYearbook/playr
Playr 被设计用来识别 myYearbook.com 的高容量数据库在软件或硬件升级后可能出现的潜在问题,它能够测试整个应用程序,并为管理员提供一份报告,详细说明 Postgres 配置与生产工作负载之间的性能和错误相关差异。这听起来不错,但它是如何工作的?Playr 通过捕获你的生产数据库工作负载、分析它并将它处理成一组二进制捕获文件来工作。一旦工作负载捕获和处理完成,就可以使用一个或多个驱动系统执行回放。通过使用二进制捕获文件,Playr 能够精确地重现生产工作负载;所有并发性、时间和提交顺序都与生产环境相同。
Playr 不是为低于日志文件最初采集的机器的硬件而设计的。它不是传统意义上的基准测试应用程序。如果新硬件无法跟上时间,Playr 将放弃其压力测试并让你知道它落后了。
pgreplay
项目主页:http://pgreplay.projects.postgresql.org/
pgreplay 读取 PostgreSQL 日志文件(*不是* WAL 文件),提取 SQL 语句,并以相同的顺序和相对时间针对 PostgreSQL 数据库集群执行它们。这使得从生产服务器捕获驱动它的数据变得简单。pgreplay 是单线程的,但使用异步查询处理,因此可以同时处理多个连接。pgreplay 将使用与原始运行相同的连接数量,并保留查询顺序和时间。如果语句的执行落后于计划,则会发出警告消息,表明服务器无法及时处理负载。目的是尽可能精确地回放真实世界的数据库工作负载。
特性
- 应该在 PostgreSQL 支持的任何平台上编译和运行
- 可以以不同的速度回放工作负载
- 可以解析 "stderr" 和 "csvlog" 日志文件
- 可以将工作负载保存到 "回放文件" 中以供重复使用
限制
- 未记录的语句,例如 COPY,将不会被回放。
pgreplay-go
项目主页:https://github.com/gocardless/pgreplay-go/
此工具是对现有 pgreplay 项目的不同看法。pgreplay 将在尊重相对时间顺序的同时回放 Postgres 日志文件,而 pgreplay-go 则以与最初发送到数据库的语句大致相同的速率回放语句。
特性
- 提供 Prometheus 指标