抢鲜体验 PolarDB PG 15 开源版

unsetunsetPolarDB 商业版unsetunset

8 月,PolarDB PostgreSQL 版兼容 PostgreSQL 15 版本(商业版)正式发布上线。

alt

当前版本主要增强优化了以下方面:

  • 改进排序功能:改进内存和磁盘排序算法。
  • 增强SQL功能:支持SQL标准的MERGE命令。增加使用正则表达式的新函数,用于检查字符串。
  • 改进逻辑复制功能:支持复制2PC事务,发布内容可以使用WHERE进行过滤,支持一次性发布Schema下所有的表。
  • 优化数据库性能:降低内存占用。崩溃恢复加速等。

在社区PostgreSQL 15的基础上,PolarDB还支持一些独有的功能,例如Ganos时空引擎,全局执行计划缓存,GBK/GB18030字符集等。在PolarDB PostgreSQL版 15的第一个发布版本中支持以下插件:hll、hypopg、log_fdw、pase、pg_bigm、pg_cron、pg_jieba、pg_repack、pg_similarity、pgtap、pgvector、pldebugger、prefix、roaringbitmap、rum、varbitx、zhparser、ganos。

同时PolarDB进行了深入的性能优化,例如优化SIMD指令集和原子操作指令集的使用,并在事务处理等模块中使能。使用 PGO、BOLT、LTO、代码段大页等系统级优化手段。支持批量读取、扩展,优化IO性能,并进行了深入的参数调优,提供了极致性能。

详情参阅:

https://help.aliyun.com/zh/polardb/polardb-for-postgresql/polardb-postgresql-version-15-officially-released

unsetunsetPolarDB 开源版unsetunset

9 月初,开源 PolarDB PostgreSQL 15 兼容版本正式发布。

开源云原生数据库 PolarDB PostgreSQL 15 兼容版正式发布上线,该版本 100% 兼容开源 PostgreSQL 15。PolarDB 是阿里云自研云原生关系型数据库,基于共享存储的存算分离架构使其具备灵活弹性和高性价比的特性,在开源 PostgreSQL 很好的性能表现的基础上极大增强了可扩展性和弹性。

alt

开源代码仓库:

https://github.com/ApsaraDB/PolarDB-for-PostgreSQL/tree/POLARDB_15_STABLE

PolarDB PG 15 有诸多值得关注的特性,具体参阅:

开源云原生数据库 PolarDB PostgreSQL 15 兼容版本正式发布

unsetunset开源 PolarDB PG 15 编译安装unsetunset

依赖安装

服务器操作系统为:Rocky Linux 8.10 (Green Obsidian)

除一般 PG 所需依赖包之外,PolarDB PG 15 还需安装如下依赖。

dnf install readline-devel llvm-toolset cmake libuuid-devel perl-IPC-Run perl-Test-Simple

如缺失,可能会遇到如下报错。

  1. 报错: configure: error: library 'uuid' is required for E2FS UUID,需安装: libuuid-devel
  2. 报错: configure: error: library 'unwind' is required for backtrace support,需安装: libunwind-devel
  3. 报错: configure: error: Additional Perl modules are required to run TAP tests,需安装: perl-IPC-Run perl-Test-Simple

编译安装

开源代码中已提供编译脚本,直接运行即可。

[shawnyan@rl8 PolarDB-for-PostgreSQL-POLARDB_15_STABLE]$ ./build.sh
Begin stop and clean existing cluster, may raising errors, ignore them
Begin clean existing installation, may raising errors, ignore them
Begin configure, flag: --enable-depend --with-uuid=e2fs --disable-rpath --with-segsize=128 --enable-debug --enable-cassert --enable-tap-tests --enable-fault-injector --with-openssl --enable-nls --with-libxml --with-libxslt --with-icu --with-pam --with-gssapi --with-ldap --with-perl --with-python --with-tcl --with-llvm --with-lz4 --with-zstd --with-system-tzdata=/usr/share/zoneinfo --with-libunwind -q --prefix=/home/shawnyan/tmp_polardb_pg_15_base --with-pgport=55992
Begin compile and install PolarDB
Begin init PolarDB cluster
Begin initdb, flag: -k -A trust -D /home/shawnyan/tmp_polardb_pg_15_primary
Following command can be used to connect to PolarDB:
export PATH=/home/shawnyan/tmp_polardb_pg_15_base/bin:$PATH
psql -h127.0.0.1 -p55992 postgres #primary

查看版本

安装完成后,已自动运行单实例节点,可连接到 PolarDB 查看基础信息。

psql (PostgreSQL 15.8-ShawnYan (PolarDB 15.8.2.0 build unknown debug) on x86_64-linux-gnu)
Type "help" for help.

postgres=# select version();
                                       version
-------------------------------------------------------------------------------------
 PostgreSQL 15.8-ShawnYan (PolarDB 15.8.2.0 build unknown debug) on x86_64-linux-gnu
(1 row)

postgres=# \l
                                                   List of databases
     Name      |  Owner   | Encoding |   Collate   |    Ctype    | ICU Locale | Locale Provider |   Access privileges
---------------+----------+----------+-------------+-------------+------------+-----------------+-----------------------
 polardb_admin | shawnyan | UTF8     | en_US.UTF-8 | en_US.UTF-8 |            | libc            | =T/shawnyan          +
               |          |          |             |             |            |                 | shawnyan=CTc/shawnyan
 postgres      | shawnyan | UTF8     | en_US.UTF-8 | en_US.UTF-8 |            | libc            |
 template0     | shawnyan | UTF8     | en_US.UTF-8 | en_US.UTF-8 |            | libc            | =c/shawnyan          +
               |          |          |             |             |            |                 | shawnyan=CTc/shawnyan
 template1     | shawnyan | UTF8     | en_US.UTF-8 | en_US.UTF-8 |            | libc            | =c/shawnyan          +
               |          |          |             |             |            |                 | shawnyan=CTc/shawnyan
(4 rows)

unsetunset也值得关注的改动 -- pg_walinspectunsetunset

在诸多变更中,有一项也值得关注:

  • 增加内置扩展 pg_walinspect ,允许您直接从 SQL 接口检查 WAL 日志文件内容。

pg_walinspect

pg_walinspect 模块提供了一系列 SQL 函数,允许用户探究 Write-Ahead Log(WAL)中的内容。这个模块的出现改变了之前只能通过外部工具查看 WAL 日志信息的做法,比如 pg_waldump,使得在数据库内部直接查看 WAL 日志成为可能,从而提高了操作性和便利性。

该模块的所有功能将使用当前服务器的时间线ID提供WAL信息。此模块的所有函数都将尝试查找位于给定或之后的第一个有效 WAL 记录,in_lsn如果start_lsn没有这样的记录可用,则会发出错误。同样,end_lsn必须可用,如果它位于记录中间,则整个记录必须可用。

默认情况下,这些功能的使用仅限于超级用户和角色成员 pg_read_server_files。超级用户可以使用 GRANT 向其他人授予访问权限。

通过执行下面命令,用户可以激活这个扩展。

postgres=# CREATE EXTENSION pg_walinspect;
CREATE EXTENSION
postgres=# \dx pg_walinspect
                                  List of installed extensions
     Name      | Version | Schema |                         Description
---------------+---------+--------+-------------------------------------------------------------
 pg_walinspect | 1.0     | public | functions to inspect contents of PostgreSQL Write-Ahead Log
(1 row)

pg_walinspect 模块提供的功能包括:

  • pg_get_wal_record_info(pg_lsn)

获取给定 LSN 的 WAL 记录信息。

  • pg_get_wal_records_info(pg_lsn,pg_lsn)

获取 start_lsn 和 end_lsn 之间的所有有效 WAL 记录的信息。每个 WAL 记录返回一行。

  • pg_get_wal_records_info_till_end_of_wal(pg_lsn)

此函数与 pg_get_wal_records_info() 相同,不同之处在于它获取从 start_lsn 到 WAL 结束的所有有效 WAL 记录的信息。

  • pg_get_wal_stats(pg_lsn,pg_lsn,boolean)

获取 start_lsn 和 end_lsn 之间所有有效 WAL 记录的统计信息。

  • pg_get_wal_stats_till_end_of_wal(pg_lsn,boolean)

此函数与 pg_get_wal_stats() 相同,不同之处在于它获取从 start_lsn 到 WAL 结束的所有有效 WAL 记录的统计信息。

pg_walinspect 模块的使用示例:

  • 创建测试表
postgres=# SELECT pg_current_wal_lsn();
 pg_current_wal_lsn
--------------------
 0/40C012A0
(1 row)

postgres=# create table t (id int, name varchar(10));
CREATE TABLE
postgres=# insert into t select 1,'S';
INSERT 0 1
postgres=# SELECT pg_current_wal_lsn();
 pg_current_wal_lsn
--------------------
 0/40C02680
(1 row)
  • 执行 pg_get_wal_records_info
postgres=# SELECT * FROM pg_get_wal_records_info('0/40C012A0','0/40C02680') where resource_manager not in ('Btree', 'Heap2');
 start_lsn  |  end_lsn   |  prev_lsn  | xid | resource_manager |  record_type  | record_length | main_data_length | fpi_length |
                  description                                                                                                                                                           |                  block_ref
------------+------------+------------+-----+------------------+---------------+---------------+------------------+------------+-----------------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------------------------------
 0/40C012A0 | 0/40C012D0 | 0/40C01268 |   0 | XLOG             | FPI_FOR_HINT  |            44 |                0 |          0 |
                                                                                                                                                                                        | blkref #0: rel 1663/5/2663 fork main blk 2
 0/40C012D0 | 0/40C01300 | 0/40C012A0 |   0 | XLOG             | FPI_FOR_HINT  |            44 |                0 |          0 |
                                                                                                                                                                                        | blkref #0: rel 1663/5/2704 fork main blk 2
 0/40C01300 | 0/40C01330 | 0/40C012D0 | 742 | Standby          | LOCK          |            42 |               16 |          0 | xid 742 db 5 rel 16396
                                                                                                                                                                                        |
 0/40C01330 | 0/40C01360 | 0/40C01300 | 742 | Storage          | CREATE        |            42 |               16 |          0 | file-dio:///home/shawnyan/tmp_polardb_pg_15_data/base/5/16396
                                                                                                                                                                                        |
 0/40C01360 | 0/40C01438 | 0/40C01330 | 742 | Heap             | INSERT        |           211 |                3 |          0 | off 14 flags 0x00
                                                                                                                                                                                        | blkref #0: rel 1663/5/1247 fork main blk 14
 0/40C015A0 | 0/40C015D0 | 0/40C01558 | 742 | XLOG             | FPI_FOR_HINT  |            44 |                0 |          0 |
                                                                                                                                                                                        | blkref #0: rel 1663/5/2704 fork main blk 4
 0/40C015D0 | 0/40C016A8 | 0/40C015A0 | 742 | Heap             | INSERT        |           211 |                3 |          0 | off 15 flags 0x00
                                                                                                                                                                                        | blkref #0: rel 1663/5/1247 fork main blk 14
 0/40C01810 | 0/40C018E0 | 0/40C017C8 | 742 | Heap             | INSERT        |           203 |                3 |          0 | off 3 flags 0x00
                                                                                                                                                                                        | blkref #0: rel 1663/5/1259 fork main blk 0
 0/40C01D98 | 0/40C01DC8 | 0/40C01BE0 | 742 | XLOG             | FPI_FOR_HINT  |            44 |                0 |          0 |
                                                                                                                                                                                        | blkref #0: rel 1663/5/1249 fork fsm blk 2
 0/40C01DC8 | 0/40C01DF8 | 0/40C01D98 |   0 | Standby          | LOCK          |            42 |               16 |          0 | xid 742 db 5 rel 16396
                                                                                                                                                                                        |
 0/40C01DF8 | 0/40C01E30 | 0/40C01DC8 |   0 | Standby          | RUNNING_XACTS |            54 |               28 |          0 | nextXid 743 latestCompletedXid 741 oldestRunningXid 742; 1 xacts: 742
                                                                                                                                                                                        |
 0/40C02460 | 0/40C02618 | 0/40C02418 | 742 | Transaction      | COMMIT        |           437 |              408 |          0 | 2024-09-05 20:32:49.189678+09; inval msgs: catcache 80 catcache 79 catcache 80 catcache 79 catcache 55 catcache 54 catcache 7 catcache 6
 catcache 7 catcache 6 catcache 7 catcache 6 catcache 7 catcache 6 catcache 7 catcache 6 catcache 7 catcache 6 catcache 7 catcache 6 catcache 7 catcache 6 snapshot 2608 relcache 16396 |
 0/40C02618 | 0/40C02658 | 0/40C02460 | 743 | Heap             | INSERT+INIT   |            61 |                3 |          0 | off 1 flags 0x00
                                                                                                                                                                                        | blkref #0: rel 1663/5/16396 fork main blk 0
 0/40C02658 | 0/40C02680 | 0/40C02618 | 743 | Transaction      | COMMIT        |            34 |                8 |          0 | 2024-09-05 20:32:53.92087+09
                                                                                                                                                                                        |
(14 rows)
  • 执行 pg_get_wal_stats
postgres=# SELECT * FROM pg_get_wal_stats('0/40C012A0','0/40C02680') where record_size != 0;
 resource_manager/record_type | count | count_percentage | record_size | record_size_percentage | fpi_size | fpi_size_percentage | combined_size | combined_size_percentage
------------------------------+-------+------------------+-------------+------------------------+----------+---------------------+---------------+--------------------------
 XLOG                         |     4 |                8 |         176 |     3.5284683239775463 |        0 |                   0 |           176 |       3.5284683239775463
 Transaction                  |     2 |                4 |         471 |      9.442662389735364 |        0 |                   0 |           471 |        9.442662389735364
 Storage                      |     1 |                2 |          42 |     0.8420208500400962 |        0 |                   0 |            42 |       0.8420208500400962
 Standby                      |     3 |                6 |         138 |     2.7666399358460305 |        0 |                   0 |           138 |       2.7666399358460305
 Heap2                        |     7 |               14 |        1515 |       30.3728949478749 |        0 |                   0 |          1515 |         30.3728949478749
 Heap                         |     4 |                8 |         686 |     13.753007217321572 |        0 |                   0 |           686 |       13.753007217321572
 Btree                        |    29 |               58 |        1960 |      39.29430633520449 |        0 |                   0 |          1960 |        39.29430633520449
(7 rows)

unsetunset引用说明unsetunset

[1] https://openpolardb.com/document?type=PolarDB-X [2] https://www.postgresql.org/docs/15/pgwalinspect.html

unsetunset新书推荐unsetunset

推荐两本新书:

《DBA实战手记》(薛晓刚)

本书是一本指导DBA进行数据库开发和运维的实用手册,本书共9章,包括漫谈数据库、如何提升数据库性能、如何运维好数据库、如何进行数据库设计、如何做好数据库之间的数据同步、认识HTAP技术、认识数据库的功能原理、认识数据库中的数学(逻辑与算法),以及DBA的日常:数据库管理及开发的最佳实践。

内容特色:

  1. 精彩的实战案例。本书为数据库实践经验集,将为广大数据库从业人员带来巨大的帮助和启发,也为企业的信息化和智能化建设提供坚实的技术支持。

  2. 丰富的扩展阅读。本书附录:DBA杂谈,分享了包括DBA的职业规划等的六个话题。并以在线的扩展阅读方式呈现类型数据库的应用场景等实践案例。

  3. 全彩印刷,提供优质阅读体验。

薛老师及其团队奉献给广大同仁的数据库实践经验集《DBA实战手记》一经出版便收到了广泛好评,盖国强、白鳝(徐戟)、贺仁龙为这本书倾情作序,周正中(德哥)、侯圣文、耿航、吴洋鼎力推荐。

《快速掌握PostgreSQL版本新特性》(彭冲)

本书对PostgreSQL的7个大版本:从PostgreSQL 10到PostgreSQL 16,根据公开的新特性实验手册、新特性相关的文章、邮件列表、社区核心提交者相关的博客,以及官方Release Notes等素材进行精加工,并从主要性能、可靠性、运维管理、开发易用性、系统层5个方面进行介绍。

推荐理由:

  1. 素材丰富。本书吸取了大量国内外资料,我们不断学习这些新特性,就如农民伯伯烧荒播种,为日后的故障案例分析打下基础。

  2. 特性关联。PG数据库里的一些新特性,有来自其他数据库的应用场景,也有同步实现其他接口协议的功能,还有各版本不断演进的特性。本书对有关联的一些特性,将其前幕背景进行了铺垫及关联陈述。

  3. 先知后验。大家看到的一些新特性文章可能基于某个dev开发快照版本,亦或是beta测试版本,而版本正式发布时,某些特性可能会有变化。本书新特性的示例代码均以正式版为基准,先知而后验,对一些功能进行了修订。

获取方式:

  1. 通过PGFans问答社区积分兑换。https://www.modb.pro/point/mall
  2. 通过PGFans问答社区积分兑换。https://pgfans.cn/shop
  3. 网购。

本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/419730.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

全能型 AI 的崛起:未来的市场宠儿还是昙花一现?

近日,OpenAI 宣布将在秋季推出代号为“草莓”的新一代 AI 模型。这款 AI 被描述为全能型,从处理复杂的数学问题到应对主观性强的营销策略,它的能力可以覆盖多个领域。听起来像是科技界的“万能钥匙”,无论面对什么问题&#xff0c…

等保2.0测评之Nginx 中间件

前期调研 nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器,一般主要功能会有两种,一种作为一个HTTP服务器进行网站的发布处理,另外一种nginx可以作为反向代理进行负载均衡的实现。所以这里填主要功能的时候就要分清。 查看N…

深入了解以太坊

1. 以太坊编程语言和操作码 以太坊中智能合约的代码以高级语言编写,如 Serpent、LLL、Solidity 或 Viper,并可转换为 EVM 可以理解的字节码,以便执行。 Solidity 是为以太坊开发的高级语言之一,它具有类似 JavaScript 的语法,可以…

骨传导耳机哪个牌子最好?精选五款热门不踩雷品牌分享

每个人对耳机要求不同、使用场景不同,适合的耳机自然也不同,但是骨传导耳机不用入耳的佩戴方式更加安全、舒适和卫生,还能听到周围的环境声,因此被更多的运动爱好者所喜爱,今天我将我这么多年运动使用体验感较好的几款…

哥伦比亚TV:重塑影视娱乐版图,开启全球文化共鸣之旅

在瞬息万变的媒体景观中,哥伦比亚TV以其卓越的洞察力、不懈的创新精神以及对全球文化深刻的理解,正逐步重塑影视娱乐行业的版图,开启了一场前所未有的全球文化共鸣之旅。这家充满活力的影视平台,正通过一系列精心策划的举措,将影视作品打造成为连接不同国家和地区观众的桥梁,促…

业务协同平台--简介

一、使用场景 1.多个系统统一在业务协同平台定义协同策略,由业务协同平台代替人工完成一系列的单据录入 2.同时业务协同平台将执行任务推送给pda、pad等执行终端,通知各人员、设备进行作业执行 3.作业过程中,可设置完成时间预…

日本“大米荒”持续!政府再次拒绝投放储备米

KlipC报道:日本多地从7月开始出现“大米荒”,有部分新米上市,但是许多超市的大米仍然存在断购或限购的情况,并且部分新米价格上涨至去年同期的两倍。大阪府官员再次呼吁日本中央政府尽快投放储备米以缓解供应紧张,但遭…

MacBook真的不能打游戏吗?Mac打游戏会损坏电脑吗?苹果电脑怎么玩游戏

MacBook从来都是高端的代名词,超强的性能搭配顶尖的系统,不光处理大型文件时举重若轻,长期使用也不会有明显卡顿。但很多人在需要MacBook一流的生产力同时,也希望能在空闲时体验游戏的乐趣。在大多人的印象里,Mac电脑对…

Sora原理详解

重磅推荐专栏: 《大模型AIGC》 《课程大纲》 《知识星球》 本专栏致力于探索和讨论当今最前沿的技术趋势和应用领域,包括但不限于ChatGPT和Stable Diffusion等。我们将深入研究大型模型的开发和应用,以及与之相关的人工智能生成内容(AIGC)技术。通过深入的技术解析和实践经…

深入解读Docker核心原理:Namespace资源隔离机制详解

在容器技术中,资源隔离 是容器化能够实现轻量级虚拟化的关键技术之一。通过资源隔离,容器可以拥有自己的独立环境,确保容器之间互不干扰,从而实现应用的安全和稳定。Docker作为主流的容器平台,其核心的资源隔离机制依赖…

【LabVIEW学习篇 - 21】:DLL与API的调用

文章目录 DLL与API调用DLLAPIDLL的调用 DLL与API调用 LabVIEW虽然已经足够强大,但不同的语言在不同领域都有着自己的优势,为了强强联合,LabVIEW提供了强大的外部程序接口能力,包括DLL、CIN(C语言接口)、ActiveX、.NET、MATLAB等等…

JavaEE:多线程进阶(线程安全的集合类)

文章目录 线程安全的集合类多线程环境使用ArrayList多线程环境使用队列多线程环境使用哈希表HashtableConcurrentHashMap 线程安全的集合类 之前学习的集合类大部分都不是线程安全的. 比如ArrayList,Queue,HashMap等等,这都是线程不安全的. Vector,Stack,Hashtable,这些集合类…

asynMotorController控制器类

电机控制器的基类,实际的电机控制器从这个类派生 asynMotorController.h头文件 /* asynMotorController.h* 这个文件为asynMotorController定义了基类。* 真实电机控制器从这个类派生。它派生字PortDriver.*/ #ifndef asynMotorController_H #define asynMotorCont…

【初识Linux】Linux下基本指令

01. ls 指令 语法: ls [选项][目录或文件] 功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。 常用选项: -a 列出目录下的所有文件,包括以 . 开头的隐含文件。 -…

Linux实用操作

简介:个人学习分享,如有错误,欢迎批评指正。 一、常用快捷键 ctrl c 强制停止 Linux某些程序的运行,如果想要强制停止它,可以使用快捷键ctrl c 命令输入错误,也可以通过快捷键ctrl c,退出当…

基于vue框架的车辆信息检索系统的设计与实现6eph8(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能:车辆信息,事故登记,维修记录,用户,汽车类型,保养记录,违章信息,年检记录 开题报告内容 基于Vue框架的车辆信息检索系统的设计与实现开题报告 一、项目背景与意义 随着汽车市场的不断扩大和车辆保有量的急剧增加,车辆信息的…

【无人机设计与控制】 四轴飞行器的位移控制

摘要 本文介绍了一种四轴飞行器的位移控制方法,并通过Simulink模型进行仿真和验证。该方法通过PID控制器对飞行器的位移进行精确调节,以实现飞行器在三维空间中的稳定定位和路径跟踪。通过参数调节,能够适应不同的飞行任务需求,确…

梨花声音研修院退费配音市场现状分析

配音市场近年来显示出强劲的增长势头,涵盖了影视作品、广告、游戏、动画、电子书、企业宣传片等多个领域。随着全球化进程的加速和数字媒体的快速发展,配音需求不断增加,市场前景广阔。本文将详细探讨配音市场的现状,从市场规模、…

java中实现缓存的几种方式

一、通过HashMap实现缓存 这种方式可以简单实现本地缓存&#xff0c;但是实际开发中不推荐使用&#xff0c;下面我们来实现一下这种方式。 首先创建一个管理缓存的类 public class LocalCache {public static ConcurrentMap<String,String> cache new ConcurrentHashM…

SQL插入、更新和删除数据

SQL插入、更新和删除数据 一、直接向表插入数据 1.1、插入完整的行 这里所说的完整行指的是包含表内所有字段的数据行&#xff1b;假设表中有n个字段&#xff0c;则插入完整行的语法&#xff1a; INSERT INTO 表名或视图名 VALUES(字段1的值,字段2的值,字段3的值,...,字段n的…