这几天,在写一个关于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还是有不小距离的,这里就不贴了。
相关推荐
4.2 参数调优:通过对PGSQL配置参数的调整,可以优化内存使用、并发连接数、日志记录等,提高数据库整体性能。 4.3 监控与诊断:使用PGSQL提供的监控工具,如pg_stat_activity,可以实时查看数据库状态,及时发现...
### PGSQL统计一个数据库所有数据库空字段的函数 在PostgreSQL(简称PGSQL)中,有时我们需要统计数据库中所有表的空字段数量。这在数据分析、数据清洗等场景下非常有用。下面详细介绍如何创建并使用一个自定义函数...
在Linux环境下,特别是CentOS操作系统中,PHP是用于开发Web应用程序的常用脚本语言,而PostgreSQL(简称pgsql)则是一种强大的开源关系型数据库系统。为了使PHP能够与PostgreSQL数据库进行交互,需要安装和配置PHP的...
pgsql.zip 是一个包含 PostgreSQL 数据库相关资源的压缩文件。PostgreSQL,通常简称为 Postgres,是一种开源的对象关系型数据库管理系统(ORDBMS),以其强大的功能、高度的稳定性以及丰富的数据类型而闻名。以下是...
在使用PostgreSQL(pgsql)数据库时,MyBatis是一个非常流行的持久层框架,它提供了将SQL查询映射到Java对象的灵活方式。本篇文章将详细探讨如何在pgsql环境中利用MyBatis来生成实体类,从而简化开发过程。 首先,...
pgsql驱动jar包,jdk 本身没有提供访问数据库的能力,它只是提供了一些接口,具体功能由各个数据库的的驱动jar包来实现,举个例子,Connection 它只是一个接口,具体的实现由具体的数据库的的驱动jar包实现,你可以在...
总的来说,pgsql连接工具6.8版的pgAdmin4是一个强大而易用的工具,对于任何需要管理和维护PostgreSQL数据库的人来说,它都是不可或缺的。通过其直观的GUI,用户可以轻松地执行各种数据库操作,提高工作效率,同时...
在SQL的世界里,`pgsql`通常指的是PostgreSQL,一个强大的开源关系型数据库系统。当我们谈论“pgsql拼接”时,我们实际上是在讨论如何在PostgreSQL中进行字符串连接操作。这通常涉及到将多个字符串或者数据库查询...
Nacos-PgSQL是Nacos的一个定制版,它扩展了对PostgreSQL数据库的支持。在原生的Nacos中,数据库连接配置位于`conf/application.properties`或`conf/bootstrap.properties`文件中,通常会看到像`spring.datasource....
pgsql数据库jdbc驱动jar包
对于“pgsql绿色版本安装”这个问题,我们可以理解为用户正在尝试安装一个免安装、便携式的pgsql版本,但遇到了困难。 在安装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\...
“pggis”是PostGIS的缩写,它是一个空间数据库扩展,为PostgreSQL增加了对地理数据的支持。PostGIS使得PostgreSQL能够处理地理对象,如点、线、多边形等,并执行空间分析和地理操作。这对于地理信息系统(GIS)和...
PostGIS不仅仅是一个简单的数据导入工具,它还提供了大量的空间函数和操作,例如: - **几何对象操作**:可以创建、修改和比较几何对象,如计算两点间的距离、判断覆盖关系等。 - **空间查询**:支持基于空间位置的...
在IT行业中,数据库管理是至关重要的,而PostgreSQL(简称PGSql)...对于任何涉及PGSql数据库的项目,这样的工具都是一个宝贵的资产。通过理解其工作原理和文件结构,我们可以更好地利用它来优化我们的数据库管理实践。
`PostgreSQL`,又称为`pgsql`,是一个高级的关系型数据库,具有强大的ACID(原子性、一致性、隔离性、持久性)支持和丰富的数据类型。它支持JSON、XML、数组等多种非传统数据类型,适合复杂的数据存储需求。使用自动...
osm2pgsql是一个用于将OpenStreetMap(OSM)数据导入到PostgreSQL数据库的工具,它是OSM数据处理生态中的重要组成部分。OSM是一种开源的地理信息系统,允许用户自由地创建、编辑和分享地理数据。PostgreSQL则是一个...
首先,要连接到PGSQL数据库,我们需要使用一个支持.NET的PGSQL驱动,如Npgsql。Npgsql是.NET社区广泛使用的开源库,它提供了全面的API来与PostgreSQL进行交互。安装Npgsql可以通过NuGet包管理器进行,命令为`Install...
标题“osm2pgsql.rar”指的是一个用于在Windows操作系统中将OpenStreetMap(OSM)数据导入PostgreSQL数据库的工具包。osm2pgsql是这个工具的名称,它是一个开源软件,广泛应用于地理信息系统(GIS)领域。这个压缩包...