生成用于测试的真实查询工作负载涉及模仿真实世界使用模式的技术。主要方法包括从生产日志中抽样查询、平衡简单和复杂的查询、调整并发级别以及引入参数的可变性。这些方法有助于模拟系统在典型或高峰条件下的行为,确保测试反映实际的性能挑战。
从日志中抽样查询是一项基础技术。生产日志包含真实的用户查询,可以对其进行过滤、匿名化并在测试中重放。例如,一个电子商务平台可能会从其日志中提取搜索、产品详情和结账查询的子集。为了确保覆盖范围,使用分层抽样来包含频繁查询(例如,“SELECT product WHERE price < $50”)和罕见但关键的查询(例如,用于分析的多表连接)。用于 MySQL 的 pt-query-digest
等工具或自定义脚本可以解析日志并提取查询。如果日志不可用,使用模板生成合成查询(例如,带有随机值的参数化查询)可以近似真实行为。
平衡查询复杂性和并发性同样重要。将简单查询(快速读取或更新)与资源密集型操作(大型连接、聚合)混合在一起,以测试系统如何处理不同的负载。例如,社交媒体应用程序可能会将个人资料查看请求(简单)与热门话题分析(复杂)相结合。并发级别(即同时查询的数量)应反映真实的流量模式,例如高峰时段的峰值。像 Apache JMeter 或 sysbench
这样的工具可以模拟并发用户。例如,将 JMeter 配置为在 5 分钟内从 10 个用户增加到 100 个用户,以测试扩展。此外,更改参数(例如,用户 ID、日期范围)以防止缓存扭曲结果并暴露边缘情况。
最后,引入时间可变性和故障注入。实际的工作负载并非完全统一:在查询之间添加随机延迟以模仿用户的“思考时间”,或者在非高峰时段安排批处理作业。例如,在测试工具中模拟用户会话之间 100 毫秒到 2 秒的延迟。故障注入(例如,网络延迟、失败的事务)可以验证错误处理。将这些技术结合起来,可以创建一个细致的工作负载,从而发现性能瓶颈、查询优化器问题和资源争用,确保测试与实际系统需求保持一致。