`

一个简单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数据库引擎

    4.2 参数调优:通过对PGSQL配置参数的调整,可以优化内存使用、并发连接数、日志记录等,提高数据库整体性能。 4.3 监控与诊断:使用PGSQL提供的监控工具,如pg_stat_activity,可以实时查看数据库状态,及时发现...

    PGSQL统计一个数据库所有数据库空字段的函数

    ### PGSQL统计一个数据库所有数据库空字段的函数 在PostgreSQL(简称PGSQL)中,有时我们需要统计数据库中所有表的空字段数量。这在数据分析、数据清洗等场景下非常有用。下面详细介绍如何创建并使用一个自定义函数...

    centos下php安装pgsql和pdo_pgsql扩展,这是另一种方法,很简便,用.so文件来安装

    在Linux环境下,特别是CentOS操作系统中,PHP是用于开发Web应用程序的常用脚本语言,而PostgreSQL(简称pgsql)则是一种强大的开源关系型数据库系统。为了使PHP能够与PostgreSQL数据库进行交互,需要安装和配置PHP的...

    pgsql.zip 下载下载

    pgsql.zip 是一个包含 PostgreSQL 数据库相关资源的压缩文件。PostgreSQL,通常简称为 Postgres,是一种开源的对象关系型数据库管理系统(ORDBMS),以其强大的功能、高度的稳定性以及丰富的数据类型而闻名。以下是...

    pgsql中使用mybatis生成实体类

    在使用PostgreSQL(pgsql)数据库时,MyBatis是一个非常流行的持久层框架,它提供了将SQL查询映射到Java对象的灵活方式。本篇文章将详细探讨如何在pgsql环境中利用MyBatis来生成实体类,从而简化开发过程。 首先,...

    pgsql驱动jar包

    pgsql驱动jar包,jdk 本身没有提供访问数据库的能力,它只是提供了一些接口,具体功能由各个数据库的的驱动jar包来实现,举个例子,Connection 它只是一个接口,具体的实现由具体的数据库的的驱动jar包实现,你可以在...

    pgsql连接工具,版本6.8

    总的来说,pgsql连接工具6.8版的pgAdmin4是一个强大而易用的工具,对于任何需要管理和维护PostgreSQL数据库的人来说,它都是不可或缺的。通过其直观的GUI,用户可以轻松地执行各种数据库操作,提高工作效率,同时...

    pgsql拼接pgsql拼接pgsql拼接

    在SQL的世界里,`pgsql`通常指的是PostgreSQL,一个强大的开源关系型数据库系统。当我们谈论“pgsql拼接”时,我们实际上是在讨论如何在PostgreSQL中进行字符串连接操作。这通常涉及到将多个字符串或者数据库查询...

    nacos 链接postgregreSql版本nacos-pgsql

    Nacos-PgSQL是Nacos的一个定制版,它扩展了对PostgreSQL数据库的支持。在原生的Nacos中,数据库连接配置位于`conf/application.properties`或`conf/bootstrap.properties`文件中,通常会看到像`spring.datasource....

    pgsql数据库jdbc驱动jar包

    pgsql数据库jdbc驱动jar包

    pgsql安装,绿色

    对于“pgsql绿色版本安装”这个问题,我们可以理解为用户正在尝试安装一个免安装、便携式的pgsql版本,但遇到了困难。 在安装pgsql时,可能会遇到多种问题,例如依赖库缺失、环境变量配置不正确、端口冲突或权限...

    thinkphp+pgsql

    下面是一个简单的示例代码: ```php // .\thinkphp\library\think\db\connector\Pgsql.php namespace think\db\connector; use think\db\exception\PDOException; use think\db\exception\DbException; use think\...

    pgsql12和pgsql9.6(包含对应版本的pggis)

    “pggis”是PostGIS的缩写,它是一个空间数据库扩展,为PostgreSQL增加了对地理数据的支持。PostGIS使得PostgreSQL能够处理地理对象,如点、线、多边形等,并执行空间分析和地理操作。这对于地理信息系统(GIS)和...

    postgis-shp2pgsql

    PostGIS不仅仅是一个简单的数据导入工具,它还提供了大量的空间函数和操作,例如: - **几何对象操作**:可以创建、修改和比较几何对象,如计算两点间的距离、判断覆盖关系等。 - **空间查询**:支持基于空间位置的...

    生成pgsql表结构程序

    在IT行业中,数据库管理是至关重要的,而PostgreSQL(简称PGSql)...对于任何涉及PGSql数据库的项目,这样的工具都是一个宝贵的资产。通过理解其工作原理和文件结构,我们可以更好地利用它来优化我们的数据库管理实践。

    mysql、pgsql自动生成数据库设计文档

    `PostgreSQL`,又称为`pgsql`,是一个高级的关系型数据库,具有强大的ACID(原子性、一致性、隔离性、持久性)支持和丰富的数据类型。它支持JSON、XML、数组等多种非传统数据类型,适合复杂的数据存储需求。使用自动...

    osm2pgsql(OSM数据导入到Postgres中工具)

    osm2pgsql是一个用于将OpenStreetMap(OSM)数据导入到PostgreSQL数据库的工具,它是OSM数据处理生态中的重要组成部分。OSM是一种开源的地理信息系统,允许用户自由地创建、编辑和分享地理数据。PostgreSQL则是一个...

    winform导出PGSQL表结构

    首先,要连接到PGSQL数据库,我们需要使用一个支持.NET的PGSQL驱动,如Npgsql。Npgsql是.NET社区广泛使用的开源库,它提供了全面的API来与PostgreSQL进行交互。安装Npgsql可以通过NuGet包管理器进行,命令为`Install...

    osm2pgsql.rar

    标题“osm2pgsql.rar”指的是一个用于在Windows操作系统中将OpenStreetMap(OSM)数据导入PostgreSQL数据库的工具包。osm2pgsql是这个工具的名称,它是一个开源软件,广泛应用于地理信息系统(GIS)领域。这个压缩包...

Global site tag (gtag.js) - Google Analytics