postgresql实战—基准测试
基准测试最关键的衡量指标:吞吐量(Throughput)响应时间(RT)或延迟(Latency)和并发量
吞吐量衡量数据库的单位时间内的事务处理能力,常用单位TPS(每秒事务数)
响应时间或延迟,描述操作过程里用来响应服务的时间,根据不同的应用可以使用分钟秒毫秒和微妙作为单位。还会根据响应时间的最大值最小值以及平均值做分组统计
并发量是指同时工作的连接数
面对一个复杂的系统,在测试之前先明确测试的目标。在一次测试中不可能将系统的各方面都测试得很清楚,每个测试尽量目标单一,测试方法简单。例新增加了一个索引,需要测试这个索引对性能的影响,那我们的测试只针对这一个查询,关注索引调整前后这个查询的响应时间和吞吐量的变化,但如果同时还做了很多其他可能影响的测试结果的变更,就可能无法得出明确的测试结果。测试过程应该尽量持续一段时间,如果测试时间太短,则可能因为没有缓冲而得不到准确的测试结果。在测试过程中应该尽量接近真实的应用场景,并且应该尽可能的多收集系统状态,例如参数配置、C P U使用率、IO、网络流量统计等。即使这些数据目前可能不需要,但也应该保留下来,避免测试结果缺乏依据
每轮测试结束后,都应该详细记录当时的配置和结果,并尽量将这些信息保存为容易使用脚步或工具分析的格式
psql自带运行基准测试的简单程序pgbench。pgbench是一个类TPC-B的基准测试工具,可以执行内置的测试脚本,也可以自定义脚本文件
transaction type:行记录本次测试所使用的测试类型
scaling factor记录pgbench在初始化时设置的数据量的比例因子
query model是测试时指定的查询类型,包括simple查询协议、extended查询协议或prepared查询协议
number of clients是测试时指定的客户端数量
number of threads是测试时指定的每个客户端的线程数
number of transactions per client是测试时指定的每个客户端运行的事务数
number of transactions actually processed是测试结束时实际完成的事务数和计划完成的事务数,计划完成的事务数只是客户端数量乘以每个客户端事务数的值。如果测试成功结束,实际完成的事务数应该和计划完成的事务数相等,如果有事务执行失败,则只会显示实际完成的事务数
latency average是测试过程中的平均响应时间
最后两行TPS的值分别是包含和不包含建立连接开销的TPS值
pgbench的内嵌脚本需要4张表:pgbench_branchs,pgbench_tellers,pgbench_accounts和pgbench_history。
使用pgbench初始化测试数据,pgbench会自动去创建这些表并生成测试数据