`

一个简单PGSQL调优的例子

 
阅读更多

         这几天,在写一个关于PGSQL性能的测试报告。

        今天找了台顶配的R720做测试。R720配置如下:E5-2650 v2两颗,128G内存,磁盘为两块SATA盘做RAID0 拼出来的一个T的磁盘。

        之前同事在上面测试mysql的QPS大概是20W多,具体不详。

        本着简单试试的想法,源码编译安装了pgsql,pgsql的配置如下:

         

max_connections = 512
shared_buffers = 30720MB
maintenance_work_mem = 512MB
vacuum_cost_delay = 10
vacuum_cost_limit = 10000               # 1-10000 credits
bgwriter_delay = 10ms                   # 10-10000ms between rounds
bgwriter_lru_maxpages = 1000            # 0-1000 max buffers written/round
wal_level = hot_standby 
wal_writer_delay = 10ms         # 1-10000 milliseconds
checkpoint_segments = 256               # in logfile segments, min 1, 16MB each
checkpoint_timeout = 10min              # range 30s-1 

   基本上都是经验值。shared_buffer设置主要是根据建议设置为内存的20%上下

 

   然后使用pgbenc生成了大概60个G的数据,其中最大的pgbench_acount 表中会有4亿条数据:

pgbench -i -s 4000

   测试QPS时,按照如下方式直接运行pgbench。

pgbench -S -M prepared -c N -j N -T 60 postgres

其中:-S选项指定只执行select,也就是只执行

SELECT abalance FROM pgbench_accounts WHERE aid = $1

 这样的SQL,pebench_acounts是刚才提到的那张大表,对应一个星形模型中的那个大表,里面有4亿条数据,表的主键是aid这个字段,查询的参数是随机生成的;-M prepared是使用预编译的方式执行SQL,避免重复解析SQL;N是连接数和模拟的客户端,在这里是每个客户端使用一个连接; -T 60指定连续执行60秒。

       在启动数据库之后,先用上面的命令运行了300秒,来预热数据。然后再进行实际的测试。

      在测试中,发现N在增大到128之后,增大N无法明显获得更大的QPS,如是将N设置为128。但是跑出来的结果让人感觉还行,快20W了:



 

查看了磁盘的IO,发现不断的有读的请求,于是直接查看数据数据库的block命中率,发现命中率不高,不到90%:

 感觉主要是没有缓存住所有热数据,有潜力可挖,于是试着将shared_buffer调整到了50G继续测试,QPS到了26W,而命中率也到了96%。但是,发现IO还是偶尔会达到10M/s。

  于是,将shared_buffer调整到了60G,这基本上应该能缓存住所有的数据了。结果TPS到了34W多,命中率也到了快100%:


     如果没有发生checkpoint,实际测试中可以达到35W多的QPS,这里就不贴了。

    明显,这个已经是最理想的情况了。数据都在shared buffer里面了。如果还要进一步的提高QPS,则需要更多更强的CPU了。当然,继续调高shared buffer也没有必要了,因为实际的数据就只有60G了。

   另外,拿着update和insert操作测试过,数据不是很理想,主要是因为瓶颈在IO能力上,毕竟SATA盘距离实际使用的SSD还是有不小距离的,这里就不贴了。
 

 

 

 

  • 大小: 13.9 KB
  • 大小: 12 KB
  • 大小: 21.4 KB
分享到:
评论

相关推荐

    PGSQL电子书

    《PGSQL电子书》是一份宝贵的资源,专为那些对PostgreSQL数据库系统感兴趣的人们提供。这份资料在介绍PostgreSQL时,很可能包含了从基础到高级的全面内容,旨在帮助读者深入理解和掌握这一开源关系型数据库管理系统...

    使用Druid数据连接池连接PostgreSQL简单例子

    本教程将详细介绍如何在Java项目中使用Druid数据连接池连接PostgreSQL数据库,以实现一个简单的测试环境。 首先,我们需要了解Druid数据连接池的基本概念。Druid提供了一种高效、灵活的数据库连接管理方式,它可以...

    PostgreSQL11.2-CN-v1.1等.zip

    版本11.2是PostgreSQL的一个重要更新,引入了许多新特性和性能优化,旨在提升数据库的管理和开发体验。这份"PostgreSQL11.2-CN-v1.1"中文手册,正是为了帮助中国用户更好地理解和使用这个数据库系统。 手册包含了...

    postgresql数据库源码包

    - **创建数据库集群**:使用`initdb`命令创建一个新的PostgreSQL数据库集群,这是存储数据库的物理结构。 - **启动与停止服务**:使用`pg_ctl`命令启动或停止PostgreSQL服务器。在系统服务管理器(如Systemd或SysV...

    博客:有关数据库,业务的所有信息(大多数用于PostgreSQL)

    4. 其他数据库系统:MongoDB是非关系型数据库的一个例子,适用于处理大量半结构化数据。Oracle是企业级数据库的代表,提供了全面的企业级功能。Greenplum和GPDB(Greenplum Database)是基于MPP架构的并行数据库,...

Global site tag (gtag.js) - Google Analytics