自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

yanzongshuai的专栏

专注于MySQL、MariaDB、Percona、PostgreSQL数据库及Aerospike等nosql数据库

原创 我的微信公众号二维码

2019-05-18 20:25:00 535 0

原创 Storage Developer Conference 2020总结

Storage Developer Conference 2020有两篇关于PM适配PG的议题。一篇是之前总结过的memhive,一篇为NVM WAL BUFFER。Memhive架构M...

2020-11-20 22:27:27 30 0

原创 通过Linux设备映射器使用持久内存设备

通过Linux设备映射器使用持久内存设备IO Alignment Considerations传统的存储设备例如HDD,SSD,nvme,SAN LUNS等以blocks为单位提供存储功...

2020-11-18 22:31:45 18 2

原创 pmdk如何在线动态扩展pool大小

一、问题由于通过pmdk库使用PM进行编程时,需要创建文件,然后将其映射到内存,这个文件大小是固定的。那么当这块PM内存块使用完后,需要重新映射。但是当前用户进程扩展后的大小对其他用户进...

2020-11-09 23:33:06 22 0

原创 持久内存+RDMA让远程数据不再远-总结

持久内存-RDMA让远程数据不再远第一届「中国云计算基础架构开发者大会」(以下简称 CID)将在 2020 年 10 月 25 日举办。会中看到有新硬件PM结合RDMA的议题,这是数据库...

2020-11-01 12:32:17 33 0

原创 基于PMEM的PG数据库Memhive白皮书

基于PMEM的PG数据库Memhive白皮书概要PG是一个广泛应用的开源数据库,从财务管理、地理信息、水务系统到气象服务等等。可部署在本地,也可以部署在云上。PG不仅在事务处理中有强大能...

2020-10-24 22:04:17 45 0

原创 PG13并行vacuum

PG13并行vacuumVacuum是PG的一个重要功能用于回收表和索引中的死记录。如果没有这个功能,PG就会持续膨胀。本文介绍VACUUM命令中的PARALLEL选项,该选项于PG13...

2020-10-03 13:55:33 40 0

原创 PG13 B-tree索引去重

PG13:btree索引去重正文PG13一个重要的特性就是Btree索引去重。使得物理文件大小更小,减小IO,帮助提升select性能。GIN索引,如果不同行的索引键相同,那么会存储一个...

2020-09-16 22:53:31 38 0

原创 持久内存指令(PMDK)简介

持久内存指令(PMDK)简介PMDK函数libpmem库主要特性是提供一种将脏数据刷写到持久内存的方法。常用的函数主要包括pmem_flush、pmem_drain、pmem_memcp...

2020-09-11 22:52:54 224 0

原创 有进步也更需要接着进步

2020-08-14 19:08:02 195 0

翻译 PG的密码安全

PostgreSQL错误日志文件中的密码大家都不希望在错误日志文件中出现用户密码。PG使用SQL查询管理用户账户,包括密码。如果启用log_statement,log_min_error...

2020-08-01 20:32:37 164 0

原创 PostgreSQL可拔插存储引擎表定义机制

Postgresql12开始支持可拔插存储引擎,即可拔插表访问方法。目前仅仅支持heap一种表访问方法。新增了pg_am和pg_proc系统表用于存储表访问方法的元数据。本文介绍创建表时...

2020-07-29 22:00:19 189 0

原创 pginspect几个函数

pageinspect作为插件,查看数据库中页内容。这个插件具有的函数功能:get_raw_pageget_raw_page(relname text, fork text, blkno...

2020-07-23 19:33:17 184 0

原创 Managing Non-Volatile Memory in Database Systems

Managing Non-Volatile Memory in Database Systems一、背景及动机1、几种场景的NVM存储方式NVM-DIRECT将nvm放到内存总线上,直...

2020-07-21 22:26:27 161 0

翻译 列存zedstore

邮件列表1、动机与目标1)列子集查询性能提升(减小IO)2)相对于heap表,减小磁盘占用空间。Tuple头更小,利用压缩数据3)表数据可以列式存储形式独立于表数据4)完全符合MVCC5...

2020-06-27 20:51:10 176 0

原创 PostgreSQL文件扩展机制

扩展的底层函数为mdextend。先通过_mdfd_getseg获取指定页号的段文件描述符,然后根据页号计算出偏移,向该偏移出写入一页:大部分情况写入一页0来进行扩展。 ...

2020-06-10 22:57:49 196 0

原创 同步复制注意点

同步复制情况下,先刷写日志,然后记录clog并持久化,最后才等待备机接收日志后返回的ACK,如果备机有问题的话或复制链路异常,日志传输失败,此时用户客户端的commit会挂...

2020-06-07 18:22:44 158 0

原创 PostgreSQL异常重启postmaster.pid处理

本文介绍启动时pid文件即锁文件的处理。若异常宕机,导致pid文件残留,那么重启时会自动将这个文件删除吗?main>PostmasterMain->CreateDataDir...

2020-06-05 22:32:21 1037 0

原创 PMDK vs mmap/memcpy

PMDK进行创建文件时调用函数pmem_map_file,而这个函数底层调用mmap,那么这个PMDK和操作系统函数调用有何不同呢? 内容 Libpmem的pmem_map_file()支持2M/1G(大页大小)对齐方式,这样能够减少页故障频率。另外,pmem_memcpy_nodrain()...

2020-05-29 21:04:58 220 0

翻译 非易失性内存技术及数据库

非易失性内存技术及数据库 内容 “2013年开始这个项目的研究,当时不确定非易失性内存技术是否可商用。2019年Intel商用了NVM产品,NVM对下一代数据库系统的影响吸引了广大研究者”--Joy Arulraj和Andrew Pavlo。 采访了《非易失性内存数据库管理系统》的作者:Jo...

2020-05-17 18:56:44 509 1

原创 WAL文件回收

checkpoint执行大致分为四步:1)刷写脏页,即将整个share buffer的所有脏页都刷盘;2)生成checkpoint wal记录,并插入WAL BUFFER;3)将checkpoint前的所有wal全部刷盘;4)回收WAL文件。这里主要介绍回收文件时需要注意的一点。尤其是磁盘空间比较...

2020-04-25 19:35:19 157 0

翻译 非易失性数据库系统存储与恢复方法

非易失性数据库系统存储与恢复方法 摘要 非易失性内存的出现从根本上改变了数据库管理系统的内存和持久存储的架构。这些新型NVM设备具有堪比DRAM的速度,但是写到NVM设备后这些数据就具备了持久性。因为现现有的数据库管理系统基于内存是易失的这样的条件下,所以并不能充分利用这项技术。通过NVM,传...

2020-04-25 16:47:04 298 0

翻译 持久内存编程

持久内存编程 2013年6月我写了关于非易失性内存(NVM)的未来接口。其中描述了SNIA NVM Programming technical work group(TWG)正在开发的NVM编程模型。在过去的四年里,规范已经发布,正如预测的那样,编程模型已成为大量后续工作的重点。该编程模型,在规...

2020-04-05 15:43:26 227 0

原创 PostgreSQL VACUUM可见性

分两种情况,一是XMIN事务未提交,一个是xmin事务已提交。 针对xmin未提交的事务,即当前的tuple刚insert还未提交: 1)元组不合法,即坏元组时,返回HEAPTUPLE_DEAD 2)该tuple是当前事务产生的:此时这个记录在这个事务未删除或只是被锁住或进行了delete但...

2020-03-27 22:43:05 170 0

原创 资讯-Aerospike 4.8进一步支持持久内存

2020-03-21 19:21:18 197 0

翻译 资讯--Aerospike 4.5支持持久内存

Aerospike 4.5:PM和压缩 正文 Aerospike企业版4.5是第一个商用的支持Intel® Optane™ DC持久内存(基于Intel的3DXPoint)的数据库。Aerospike open database架构意思是:原生支持各种企业应用环境,支持Java, .NET, ...

2020-03-20 22:06:11 138 0

原创 PostgreSQL MVCC可见性判断
原力计划

1、知识准备 1)Tuple格式头HeapTupleHeaderData typedef struct HeapTupleFields{ TransactionId t_xmin; /* inserting xact ID */ TransactionId t_xmax; /...

2020-03-12 21:40:42 417 0

翻译 PostgreSQL 13:索引并行vacuum

原文https://blog.dbi-services.com/postgresql-13-parallel-vacuum-for-indexes/正文PostgreSQL的MVCC机制...

2020-03-06 21:21:30 552 0

原创 PostgreSQL DDL操作解析

本文介绍PG DDL操作上层接口。1、DDL操作的入口函数是ExecModifyTable,insert、delete、update都会进入这个函数,如果为insert,执行ExecPr...

2020-02-25 19:25:44 479 0

原创 PostgreSQL的insert解析
原力计划

其insert由函数heapam_tuple_insert完成。 1、首先需要从slot中取出tuple值,HeapTupleTableSlot.tuple 2、从relation中得到该记录即将插入表的OID:relation->rd_id,然后slot->tts_table...

2020-02-24 22:11:39 751 0

原创 PostgreSQL如何在页面内找一个free slot

本文介绍向业内插入一条记录时,如何找一个空闲的空间进行插入。PageAddItemExtended1、计算出pd_linp数组的最大值后新增一个后的个数:limit=[pg_lower-...

2020-02-24 20:53:52 277 0

原创 PostgreSQL通过索引获取heap tuple解析

本文介绍通过索引扫描获取heap tuple的TID后,如何通过TID获取heap tuple。一、先介绍两个数据结构关系二、接着介绍获取记录流程1、通过索引扫描后,得到索引记录(key...

2020-02-23 21:23:31 525 0

原创 PostgreSQL表扫描方法解析

本文介绍PG的表扫描方法原理。 全表扫描函数在heap handler API接口函数为heap_getnextslot函数。该函数从磁盘读取数据页到内存并遍历页内记录,将其存储到slot中返回用户。这个函数一次只获取一个记录,倒到上次ExecutePlan函数中循环调用ExecProcNode...

2020-02-21 20:55:17 912 0

原创 表扫描描述符及扫描方向

1、表扫描函数的参数传递通过TableScanDescData,函数内层将扫描到的记录存储到HeapScanDesc.rs_ctup中,然后将该成员内容传递给slot中。2、内部处理时会...

2020-02-21 11:53:32 248 0

原创 PostgreSQL的heapgetpage函数解析

本文介绍heapgetpage函数的流程,这个函数的功能是从磁盘中读取一个页到内存,并将可见的记录的记录号,即第几个记录,保存到扫描描述符的rs_vistuples数组中。1、heapg...

2020-02-20 22:14:41 403 0

原创 PostgreSQL TID及tuple slot

1)postgresql默认存储的是堆表,数据按行存储在heap page中。行记录除了存储字段的值外还会存储对应的ctid即行号,表示在哪个页第几个记录。2)进行select的时候也可...

2020-02-19 21:36:23 457 0

原创 非易失性WAL buffer实现解析(六)

本文接上文接着介绍PreallocNonVolatileXlogBuffer的实现。1)需要将NVM WAL BUFFER初始化LSN到ControlFile->discarded...

2020-02-16 16:38:30 278 0

原创 非易失性WAL buffer实现解析(五)

本文接着介绍非易失性WAL buffer对StartupXLOG流程的改造。1)StartupXLO流程中,当WAL日志回放完退出回放循环后,对其进行改造2)ControlFile-&g...

2020-02-15 22:02:28 281 0

原创 PostgreSQL 13将支持在psql中显示事务状态

PostgreSQL13版本中的psql将可以显示当前连接中一个事务是否阻塞。添加%x到默认的宏定义PROMPT1和PROMPT2中。可以通过%d跟踪当前连接是否阻塞,添加默认值不需...

2020-02-13 14:28:42 339 0

原创 非易失性WAL buffer实现解析(四)

本文接着介绍checkpoint对WAL BUFFER的改造。改造函数CreateCheckPoint函数。1)checkpoint刷完脏页(会先将脏页的WAL刷入介质),并将check...

2020-02-10 17:01:41 299 0

提示
确定要删除当前文章?
取消 删除