自定义博客皮肤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数据库

  • 博客(420)
  • 论坛 (3)
  • 问答 (1)
  • 收藏
  • 关注

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

2019-05-18 20:25:00 535

原创 Storage Developer Conference 2020总结

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

2020-11-20 22:27:27 31

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

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

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

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

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

2020-11-09 23:33:06 22

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

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

2020-11-01 12:32:17 34

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

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

2020-10-24 22:04:17 45

原创 PG13并行vacuum

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

2020-10-03 13:55:33 41

原创 PG13 B-tree索引去重

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

2020-09-16 22:53:31 35

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

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

2020-09-11 22:52:54 220

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

2020-08-14 19:08:02 195

翻译 PG的密码安全

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

2020-08-01 20:32:37 164

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

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

2020-07-29 22:00:19 192

原创 pginspect几个函数

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

2020-07-23 19:33:17 184

原创 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

翻译 列存zedstore

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

2020-06-27 20:51:10 175

原创 PostgreSQL文件扩展机制

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

2020-06-10 22:57:49 197

原创 同步复制注意点

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

2020-06-07 18:22:44 158

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

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

2020-06-05 22:32:21 1043

原创 PMDK vs mmap/memcpy

PMDK进行创建文件时调用函数pmem_map_file,而这个函数底层调用mmap,那么这个PMDK和操作系统函数调用有何不同呢?内容Libpmem的pmem_map_file()支持2M/1G(大页大小)对齐方式,这样能够减少页故障频率。另外,pmem_memcpy_nodrain()通过单指令、多数据指令(SIMD)、NT存储指令(MOVNT)拷贝数据。这样的话,通过libpmem的API函数比mmap()、memcpy()快。Linux4.5及更高版本支持MAP_SYNC和MAP...

2020-05-29 21:04:58 220

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

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

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

原创 WAL文件回收

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

2020-04-25 19:35:19 157

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

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

2020-04-25 16:47:04 298

翻译 持久内存编程

持久内存编程2013年6月我写了关于非易失性内存(NVM)的未来接口。其中描述了SNIA NVM Programming technical work group(TWG)正在开发的NVM编程模型。在过去的四年里,规范已经发布,正如预测的那样,编程模型已成为大量后续工作的重点。该编程模型,在规范中描述为NVM.PM.FILE,可以将PM当做文件被操作系统映射到内存。本文,介绍持久内存编程模型如...

2020-04-05 15:43:26 224

原创 PostgreSQL VACUUM可见性

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

2020-03-27 22:43:05 170

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

2020-03-21 19:21:18 197

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

Aerospike 4.5:PM和压缩正文Aerospike企业版4.5是第一个商用的支持Intel® Optane™ DC持久内存(基于Intel的3DXPoint)的数据库。Aerospike open database架构意思是:原生支持各种企业应用环境,支持Java, .NET, Node.js, Python, Go等编程语言。和简单将PM映射到内存以存储内存数据结构不同,A...

2020-03-20 22:06:11 138

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

1、知识准备1)Tuple格式头HeapTupleHeaderDatatypedef struct HeapTupleFields{ TransactionId t_xmin; /* inserting xact ID */ TransactionId t_xmax; /* deleting or locking xact ID */ union{ ...

2020-03-12 21:40:42 419

翻译 PostgreSQL 13:索引并行vacuum

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

2020-03-06 21:21:30 554

原创 PostgreSQL DDL操作解析

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

2020-02-25 19:25:44 479

原创 PostgreSQL的insert解析
原力计划

其insert由函数heapam_tuple_insert完成。1、首先需要从slot中取出tuple值,HeapTupleTableSlot.tuple2、从relation中得到该记录即将插入表的OID:relation->rd_id,然后slot->tts_tableOid和tuple->t_tableOid更新为该OID3、调用heap_insert将tu...

2020-02-24 22:11:39 753

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

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

2020-02-24 20:53:52 275

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

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

2020-02-23 21:23:31 525

原创 PostgreSQL表扫描方法解析

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

2020-02-21 20:55:17 914

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

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

2020-02-21 11:53:32 248

原创 PostgreSQL的heapgetpage函数解析

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

2020-02-20 22:14:41 403

原创 PostgreSQL TID及tuple slot

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

2020-02-19 21:36:23 457

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

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

2020-02-16 16:38:30 278

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

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

2020-02-15 22:02:28 281

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

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

2020-02-13 14:28:42 338

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

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

2020-02-10 17:01:41 296

空空如也

yzs87的留言板

发表于 2020-01-02 最后回复 2020-01-02

写博客能不能添加个撤销键

发表于 2018-01-04 最后回复 2018-01-06

innodb插入意向锁如何使用

发表于 2015-06-07 最后回复 2015-06-07

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

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