暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PostgreSQL千万数据单机压测实验

原创 梧桐 2023-08-17
673

一、测试需求

结构化数据,大约每天3000万条数据,会频繁写入新信息,不存储特征值信息,可能存在查询全量历史结果。

二、需求分析

1、做单表写入测试,验证3000万条数据录入所需时时长。
2、建立索引,模拟人口信息表关多表关联查询,并验证当前数据库在此环境下可满足多少用户查询需求。

三、测试环境

硬件:普通笔记本电脑
测试软件:虚拟机、CentOS7.9 PostgreSQL14.9 pgbench

pgbench是PostgreSQL的压力和稳定性测试工具

四、测试过程

1、写入测试

1 登录数据库(略)
2 建表
  create table cam (  
  id int,    
  camid int,  
  personid int,  
  imgurl text,
  rectime timestamp
);  
复制
3 编辑写入数据语句
vi cam.sql insert into cam values(random()*10000, random()*10000, random()*10000, md5(random()::text), CURRENT_TIMESTAMP);
复制
4 压入数据执行
./pgbench -M prepared -n -r -P 1 -f ./cam.sql -c 50 -j 50 -T 1800
复制
5 查询
select pg_size_pretty(pg_relation_size('cam'));
复制

2、联合查询

1 建person表 ,用于联合查询
create table person ( id int, personid int, name text );
复制
2 模拟数据

​ 写person.sql

insert into person values (random()*10000,random()*10000,md5(random()::text));
复制

​ 执行person.sql

./pgbench -M prepared -n -r -P 1 -f ./person.sql -c 50 -j 50 -T 10
复制
3 建索引,支持较大数据量下的查询性能
CREATE INDEX pindex ON cam(personid);   
复制
4 查询语句写入sql.sql
select count(*) as abc from cam ,person where cam.personid = person.personid and ...
复制

(略,建议回归增加更多联合SQl语句);

5 压测,50并发
./pgbench -M prepared -n -r -P 1 -f ./sql.sql -c 50 -j 50 -T 300
复制

TPS:394

五、测试结论

入库时长:满足

TPS:17227,实测:3000万条数据耗时:29分钟,超出每天3000万录入预期;此外,产生数据量:2500MB,按此计算,保持一倍余量,年度最低硬盘容量应在2TB。

查询效率评估:满足

双表联合查询,其中一表数据3000万,建索引,50并发,TPS:394。可充分满足规模用户的查询应用。

最后修改时间:2023-08-23 23:44:45
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

目录
  • 一、测试需求
  • 二、需求分析
  • 三、测试环境
  • 四、测试过程
    • 1、写入测试
      • 1 登录数据库(略)
      • 2 建表
      • 3 编辑写入数据语句
      • 4 压入数据执行
      • 5 查询
    • 2、联合查询
      • 1 建person表 ,用于联合查询
      • 2 模拟数据
      • 3 建索引,支持较大数据量下的查询性能
      • 4 查询语句写入sql.sql
      • 5 压测,50并发
  • 五、测试结论
    • 入库时长:满足
    • 查询效率评估:满足