如何在ubuntu上进行postgresql性能测试
导读:在 Ubuntu 上进行 PostgreSQL 性能测试 一 环境准备与工具安装 安装 PostgreSQL 与客户端工具(含 pgbench): sudo apt update sudo apt install -y postgres...
在 Ubuntu 上进行 PostgreSQL 性能测试
一 环境准备与工具安装
- 安装 PostgreSQL 与客户端工具(含 pgbench):
- sudo apt update
- sudo apt install -y postgresql postgresql-contrib
- 确认服务运行与连通性:
- sudo systemctl status postgresql
- sudo -u postgres psql -c “select version(); ”
- 说明:pgbench 随 postgresql-contrib 提供,是官方内置的事务型基准工具,适合快速评估 TPS/延迟 与进行参数对比测试。
二 使用 pgbench 进行标准测试
- 初始化数据集(TPC-B 默认脚本,含 BEGIN/UPDATE/SELECT/INSERT/COMMIT 等 7 条语句):
- 创建测试库:createdb pgbench
- 生成数据:pgbench -i -s 10 pgbench
- 说明:比例因子 -s 10 约生成 1000 万行 pgbench_accounts(scale×100,000),可按机器内存适当增大,例如 -s 100 ≈ 1 亿行。
- 运行混合读写测试(示例:并发 32,持续 300 秒):
- pgbench -c 32 -j 4 -T 300 -M prepared -r pgbench
- 关键选项:-c 并发客户端,-j 工作线程,-T 持续时间(秒),-M prepared 使用预处理语句,-r 显示每条语句的延迟。
- pgbench -c 32 -j 4 -T 300 -M prepared -r pgbench
- 只读测试(仅 SELECT,评估点查/范围查能力):
- pgbench -c 32 -j 4 -T 300 -S pgbench
- 自定义脚本(贴近业务 SQL):
- 将业务事务写入脚本文件(如 bench.sql),执行:pgbench -c 16 -T 120 -f bench.sql mydb
- 结果解读要点:
- 关注输出中的 TPS(transactions per second)、平均延迟、标准差;TPS 越高越好,延迟越低且稳定越好。
- 若使用默认脚本,可用近似关系估算 QPS:QPS ≈ TPS × 每事务语句数(默认事务约含 8 条 SQL)。
三 进阶测试与工具
- 使用 sysbench 进行 OLTP 测试(可选):
- 安装:sudo apt install -y sysbench
- 准备数据(示例):sysbench oltp_read_write --db-driver=pgsql --tables=10 --table-size=100000 --pgsql-host=localhost --pgsql-port=5432 --pgsql-user=sbtest --pgsql-password=password --pgsql-db=sbtest prepare
- 运行测试:sysbench oltp_read_write --db-driver=pgsql --tables=10 --table-size=100000 --pgsql-host=localhost --pgsql-port=5432 --pgsql-user=sbtest --pgsql-password=password --pgsql-db=sbtest --threads=32 --time=300 run
- 其他工具与场景:
- JMeter + JDBC:适合混合读写、接口层压测与复杂业务流程编排。
- pgbench-tools:对 pgbench 结果做批量对比与可视化,便于参数调优回归。
四 测试设计与稳定性实践
- 明确目标与环境:定义是测最大吞吐、P95/P99 延迟,还是特定业务场景;测试环境尽量贴近生产(硬件、数据量、连接数、参数)。
- 数据集规模:确保数据集显著大于 shared_buffers,避免“全部命中内存”导致失真;必要时使用 -s 增大数据量。
- 预热与稳态:先跑一轮短预热(如 -T 60),再执行正式测试(如 -T 300–600),并多次运行取中位数。
- 连接与线程:并发 -c 逐步递增(如 8/16/32/64),线程数 -j 通常设为 CPU 核数或略低;观察 TPS 拐点与延迟劣化。
- 监控与归因:同步采集
- 系统:top/vmstat/iostat(CPU、内存、I/O 使用与饱和度)
- 数据库:开启 pg_stat_statements,关注慢查询、锁等待、检查点、WAL 写入
- 存储:关注 IOPS/吞吐/延迟 与 WAL、数据目录所在磁盘负载是否成为瓶颈
- 结果记录:每次测试记录 TPS、平均/分位延迟、CPU/IO、WAL/检查点统计,便于对比不同参数或硬件改动的影响。
五 常见注意事项
- 权限与安全:为压测用户授予必要权限,避免使用超级用户;在 .pgpass 或环境变量中管理口令,减少命令历史泄露。
- 清理与隔离:压测库与生产库隔离;测试后按需 DROP DATABASE 或 TRUNCATE 清理,避免影响业务。
- 日志与干扰:压测期间减少非必要日志与监控采集频率,避免额外 I/O 干扰;必要时将 WAL 与数据目录分别放置在不同磁盘以降低写放大争用。
- 连接限制:避免超过 max_connections;若需高并发,优先使用连接池(如 pgbouncer)或增加连接数并评估上下文切换成本。
- 统计重置:对比参数前后,重置或对比 pg_stat_statements 视图,确保评估口径一致。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 如何在ubuntu上进行postgresql性能测试
本文地址: https://pptw.com/jishu/786535.html
