博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
测试系统磁盘预读对PostgreSQL性能的影响
阅读量:5897 次
发布时间:2019-06-19

本文共 668 字,大约阅读时间需要 2 分钟。

  hot3.png

上次去杭州,德哥跟我谈起批量写入性能很低的问题。这跟PG设计有关,每次I/O都以块为单位,批量写入时需要新空间同样一次扩展一个块。最近一直在考虑怎样改进,个人觉得读取有类似问题,对于BAS_BULKREAD(缓存访问策略之一)方式一次读入一个块肯定不如一次读入多个块,至少可以省下一些磁盘寻道与回转(见机械磁盘原理)时间。很久以前使用Oracle,它有一次读入多少个数据块的设置,现在这个参数应该还在。缓存写出的改写非常复杂,它也绕不开块批量读入这个问题。出于这几点考虑,我想当然的认为既然对读取同样有效,首先实现单次读取多个块。

在我设想的方案确定之后,我觉得如果改写PG内核有作用的话,利用系统API也一样有效,并且非常容易实现。虽然它的缺点是不易受数据库引擎控制,但是作为验证是否有效是足够的。

用pgbench准备了10亿条数据,100多G,利用 posix_fadvise 函数预读预读8个块,测试后却发现毫无影响,时间是一致的。我猜想是不是块数太少,于是改成预读128个块,结果同样。(很抱歉,我没有记录下具体测试数据)

因为我对Linux的文件系统处理一无所知,无法确定到底怎么回事,有以下几个猜测:

1、Linux本身有自动预读?这个可能性很小,查阅了一点资料,也没有得到证实;
2、我测试用单进程,整台机器的所有资源被它占用大半,磁盘请求几乎不间断的涌向磁盘控制器,其实跟块连续读是一样的?这个等有时间再做一次多个表并发测试。

转载于:https://my.oschina.net/quanzl/blog/177161

你可能感兴趣的文章
下拉框左右选择
查看>>
runtime
查看>>
cursor: mutex X等待事件
查看>>
如何模仿人的学习模式来教计算机程序解数学题?
查看>>
小蚂蚁学习数据结构(35)——直接插入排序
查看>>
java 自定义类的加载器
查看>>
博客门户分享代码
查看>>
启动Tomcat时 is not a readable directory
查看>>
TypeScript基础入门之Javascript文件类型检查(一)
查看>>
MongoDB 日期查询与mongodump 按日期范围导出数据
查看>>
oracle的查询结果按照in条件顺序输出
查看>>
ubuntu 12.04 安装和使用aircrack-ng 教程
查看>>
CentOS 6.4下PXE+Kickstart无人值守安装操作系统
查看>>
Spring Boot 教程系列学习
查看>>
PHP 打印函数之 print print_r
查看>>
学生信息管理系统分析和感想
查看>>
如何在ASP.NET中生成HTML5离线Web应用
查看>>
阿里云里Centos 7 PHP7环境配置 LNMP
查看>>
年卡在手,城墙我走: 记葡萄城控件团队建设
查看>>
__set魔术方法可不可以加private属性
查看>>