|
上个周末在自己电脑上做实验时,当时有些累了。就打算放松一下大脑,偶尔看到了彭冲老师的公众号的技术文章,有一篇名为《PG 18beta1 真正的AIO来了 | 感慨&环境准备》。另外一位大佬德哥,最近在其公众号不断发布PG18新版本的技术特性。彭冲老师和德哥是PG数据库的大佬,在业界久负盛名。
当时出于好奇,就在自己的实验机下载编译安装,本以为安装一个压缩包而已不会太难,却意外地失败了。失败的原因是,我换了CENTOS7系统、ORACLE LINUX 8.9系统、CENTOS STREAM 10均无法YUM安装liburing-devel。这个PRM包是编译安装PG18必须的,否则无法使用异步IO(简称AIO)的功能。
如果说CENTOS 7由于版本太老,找不到liburing-devel包,这个我信。CENTOS STREAM 10这是最新的CENTOS系统,竟然YUM安装时也找不到。又仔细看了彭冲老师的文章,作者使用的操作系统是openEuler 22.03环境。我检查了一下自己的电脑,里面有openEuler 22.04的安装ISO,我想04比03版本更新一些,应该是有liburing-devel包吧,结果由于还是失败。无奈之下,我去官网下载最新的openEuler 22.03 ISO。
在自己的VM实验机上,我分配80G磁盘,8G内存给虚拟机环境,接着开始了安装openEuler 22.03之路。由于我是最小化安装,安装过程持续了大约30分钟。安装操作系统后,界面如下所示
[root@localhost ~]# cat /etc/os-release
NAME="openEuler"
VERSION="22.03 (LTS-SP4)"
ID="openEuler"
VERSION_ID="22.03"
PRETTY_NAME="openEuler 22.03 (LTS-SP4)"
ANSI_COLOR="0;31"
[root@localhost ~]# ldd --version
ldd (GNU libc) 2.34
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.
[root@localhost ~]# uname -r
5.10.0-216.0.0.115.oe2203sp4.x86_64
AIO的主要功能参数:io_method
在18里AIO功能主要通过io_method参数控制,该参数有三种选项值:
io_method=sync
与17行为一致,读操作使用posix_fadvise() 系统调用进行预取。
io_method=worker
默认行为:使用io worker进程来实现AIO。
io_method = io_uring
基于os kernel 5.1及以上的内核实现。
我的操作系统内核版本是符合要求的。
这次yum install liburing-devel,确实可以安装liburing-devel包了。
接着按大佬的文章要求,创建好安装目录和数据目录,并且分配好属主和权限。
mkdir -p /opt/pg/18
mkdir -p /opt/pg/pgdata1800
chown postgres:postgres /opt/pg/18 /opt/pg/pgdata1800
chmod 700 /opt/pg/pgdata1800
./configure '--prefix=/opt/pg/18' '--without-icu' '--with-liburing'
在编译过程中,系统第一次提示没有bison包,于是yum install -y bison。
第二次编译时,提醒没有flex包,于是yum install -y flex。
第三次编译时,提醒没有zlib包,于时yum install zlib-devel -y。
第四次编译时,系统没有报错缺少包,这次成功了。后面继续make && make install,这次确实成功编译安装了。初始化数据库,启动数据库,界面如下:
postgres=# select version();
version
-------------------------------------------------------------------------------------
PostgreSQL 18beta1 on x86_64-pc-linux-gnu, compiled by gcc_old (GCC) 10.3.1, 64-bit
(1 row)
postgres=# select setting from pg_config where name='CONFIGURE';
setting
---------------------------------------------------------------------------
'--prefix=/opt/pg/18' '--without-icu' '--with-liburing' '--without-zlib'
(1 row)
总结:作为PG数据库初学者,在搭建一些学习环境时,还是要多看看大佬的技术文章,特别是要关注文章中提醒的一些技术细节。遇到暂时无法解决的问题时,多向大佬请教,多到论坛发贴子,不要轻易放弃未解决的技术问题。
合作电话:010-64087828
社区邮箱:greatsql@greatdb.com