数据库
文章平均质量分 58
那海蓝蓝
这个作者很懒,什么都没留下…
展开
-
DTCC2021--数据异常系统化研究
本文系统地研究了数据库的数据异常及其对应的隔离级别,通过形式化的定义,总结和规范了数据异常的类型。基于形式化的解释,解释了不同数据异常之间的本质区别。同时,本文还通过偏序关系对数据异常进行分类,并阐述了数据异常与隔离级别之间的关系。另外,本文深入总结了前人在数据异常领域的研究工作,文献充实。文章具有极高的学术水平,作者分享了其在事务并发控制中数据异常和隔离级别上的深刻认知,另外作者也提供相应的开源工具用来检测数据异常,是一篇对事务并发控制方向非常有影响力的论文原创 2023-10-18 16:58:27 · 186 阅读 · 0 评论 -
PostgreSQL的数据存储(一)---概述
1 存储层概述PG存储层的实现,主要分为三部分:存储层和数据库系统的关系,参加下表(行数从上到下,是用户访问数据库的过程和数据库管理系统的各模块间的关系层次):层次层次名称代码说明用原创 2011-09-08 19:42:59 · 2041 阅读 · 0 评论 -
PostgreSQL的数据存储(三)---数据缓存去和数据存储层的接口
2.2 良好的接口层抽象通过研究f_smgr数据结构,我们可以清晰分解出如下IO函数需要的操作:接口名称接口下层函数功能smgr_initmdinit初始化一些系统需要的状态等,原创 2011-09-08 19:45:50 · 1363 阅读 · 0 评论 -
PostgreSQL的数据存储(五)---数据存储
4 数据存储在存储层,需要考虑对象规模如何存储等问题。有的数据项小,但有的数据项大;如何在一个页面存储不下时,如何跨页存储?一条数据超过一个存储页面,如何存储?一个文件,超出操作系统的文件大小限制,如何存储?物理IO,如何能均衡分布?PG采用TOAS原创 2011-09-08 19:48:12 · 1726 阅读 · 0 评论 -
PostgreSQL的数据存储(十)---数据存储
4.2.3 大数据量的处理方式—文件分割pg_class.,系统表,用以存储表、视图、序列等的定义信息。每个表等的定义,都以元组的形式,存储于pg_class系统表中。但是,每个表,都对应一个独立的外存文件,这个文件的名称,以该对象的“filenode”号命原创 2011-09-09 08:21:11 · 1243 阅读 · 0 评论 -
PostgreSQL的数据存储(九)---数据存储
4.2.2 表数据页的存储数据格式数据的存储格式,包括系统表的数据存储、日志文件的数据存储、用户表数据的格式存储、用户创建的数据对象定义的存储等。其中,一些数据对象的创建,方式有些差别,如序列(sequence)和视图,其创建就是一个定义,不涉及数据;而用户原创 2011-09-08 19:59:23 · 1664 阅读 · 1 评论 -
PostgreSQL的数据存储(四)---虚拟文件管理
3 虚拟文件管理PG的本项功能称为:a cache of 'virtual' file descriptors (VFDs)操作系统,对于资源的分配,存在限制,比如,一个进程,可以拥有多少子线程、可以同时打开多少个文件、可以使用的堆栈大小是多少等等。原创 2011-09-08 19:46:56 · 1220 阅读 · 0 评论 -
PostgreSQL的数据存储(七)---数据存储
4.1.3 用户自定义relation的存储形式分类 在catalog.c中有如下信息:const char *forkNames[] = { "main",原创 2011-09-08 19:50:15 · 1153 阅读 · 0 评论 -
PostgreSQL的数据存储(八)---数据存储
4.2 数据的内部格式4.2.1 页的存储数据结构在操作系统层面,数据存储,只是一些二进制信息,这个层次,是不知道文件内容的含义的。文件的逻辑含义,取决于应用层面。数据库系统的文件组织,也如此。在外存存储,以二进制格式存放,读写文件,以块(8k原创 2011-09-08 19:58:06 · 1286 阅读 · 0 评论 -
PostgreSQL的数据存储(二)---数据缓存去和数据存储层的接口
2 数据缓冲区和数据存储层之间的接口2.1 存储访问接口层位于buffer下层的代码,是数据存储层,但数据缓冲区和数据存储层之间,有一个接口存在,位于src/backend/storage/smgr;这一接口,规定了数据缓冲区和数据存储层之间如何原创 2011-09-08 19:44:55 · 1493 阅读 · 0 评论 -
PostgreSQL的数据存储(十一)---数据存储
4.3 微对象存储方式与tuple的结构所谓微对象存储,指的是不同数据类型对应的数据存储。上节存储单位是tuple,讲述了tuple的存储方式。本节深入tuple内部,看看不同数据类型是如何存储的。4.3.1 Tuple的数据结构Tuple范围多原创 2011-09-10 21:34:23 · 1356 阅读 · 0 评论 -
PostgreSQL的数据存储(十二)---数据存储
4.3.2 Tuple是否可以跨页面PostgreSQL uses a fixed page size (commonly 8 kB), and does not allow tuples to span multiple pages. Therefore, it原创 2011-09-13 08:36:12 · 1394 阅读 · 0 评论 -
数据库查询中的表连接
1 概述数据库中的表,是一个二维对象,由行和列构成;列是表的元数据,行是表的数据;所以,表与表之间做连接操作,无非是表的行和列与其他表的行和列之间的关系。数据库中常有交叉连接、内连接、外连接、半连接、反半连接、自然连接等概念,这些连接方式,代表了不同的含义原创 2011-09-12 21:17:36 · 3927 阅读 · 0 评论 -
PostgreSQL的数据存储(十三)---数据存储
4.4 SQL操作对页面的影响4.4.1 DML操作对于页面存储格式的影响页面从一个新的状态,到放入数据,数据经过DML操作,页面的数据发生变化,在结果vacuum清理数据后,页面数据又变为一个整齐状态。如下从四个角度来说DML操作对于数据页面的影响。原创 2011-09-14 08:34:35 · 2002 阅读 · 0 评论 -
PostgreSQL的数据存储(十四)---数据存储
4.4.2 Vacuum操作对页面的影响对于页面来讲,vacuum操作,无非是清理不再有用的元组(元组可见性),尽量让页面恢复到初始或不断插入数据时的页面的状态(目的是:元组相邻,保持尽可能多的空闲页面大小)。4.5 索引数据的内部格式索引的元原创 2011-09-15 08:10:01 · 879 阅读 · 0 评论 -
PostgreSQL的数据存储(十五)---数据存储
4.7 大对象存储从用户可操作的角度看,PG提供了一套函数接口,用以操作大对象。如:lo_create、lo_open、lo_write、lo_close等。大对象的存储,可以从lo_write函数中得知如下信息:1. 大对象,会被拆分为一个原创 2011-09-16 08:46:36 · 955 阅读 · 0 评论 -
PostgreSQL的数据存储(十六)---数据存储
5 并发访问与存储关系数据库系统需要支持并发访问。并发访问,要访问数据,而数据存在与buf中,所以,对于buf的读写,就需要有并发访问控制。PG通过锁和缓存页面标志(pin和reference)来控制并发访问。这样的方式,出于逻辑IO层。尽管物理IO位于b原创 2011-09-19 08:23:54 · 1017 阅读 · 0 评论 -
PostgreSQL的数据存储(十七)---数据存储的知识扩展
7 扩展话题7.1 列存储在本篇文章中,数据的存储格式,从数据页(buf页)到元组(tuple)到列信息的组织方式(微对象),历经一个从大到小的变迁。从物理存储的角度看,存储数据的基本单位是页(8k);从逻辑存储的角度看,存储数据的基本单位,是原创 2011-09-20 08:34:01 · 2665 阅读 · 0 评论 -
PostgreSQL的数据存储(十八)---数据存储的优化
8 PostgreSQL的存储层优化数据存储层,处于数据库管理系统的最底层,直接和物理IO打交道;数据库系统的性能,瓶颈出现在IO的概率较多。做性能优化,在数据存储层上下功夫,也是最容易出效果之处。 8.1 存储层结构存储层只有在数据文件作原创 2011-09-21 08:32:29 · 2229 阅读 · 0 评论 -
PostgreSQL的数据存储---目录
【一】1 存储层概述【二】2 数据缓冲区和数据存储层之间的接口 2.1 存储访问接口层 【三】2.2 良好的接口层抽象【四】3 虚拟文件管理【五】4 数据存储 4.1 数据的外存形式 4.1.1 外存文原创 2011-09-21 08:44:12 · 4903 阅读 · 0 评论 -
深入理解缓冲区(一)
1 什么是缓冲区百度上讲:http://baike.baidu.com/view/266782.htm[1]缓冲器为暂时置放输出或输入资料的内存。 缓冲器内资料自储存设备(如硬盘)来,放置在缓冲器中,须待机送至CPU或其他运算设备。缓冲区(b原创 2011-09-22 16:48:11 · 1984 阅读 · 1 评论 -
深入理解缓冲区(二)
2.3 缓存与池的关系池,停水曰池。——《广韵》。所以,池,能蓄积物。引申后,池能蓄积线程,则称之为线程池;池能蓄积进程则称之为进程池。另外常见的还有数据库连接池、IIS6.0中的地址池、内存池[1]等等。其中,内存池的概念,类似缓冲区。我这里讨论的原创 2011-09-23 18:01:05 · 750 阅读 · 0 评论 -
深入理解缓冲区(三)
3 缓存的作用和常见场景3.1 缓存的作用缓存,可以把常用的一些“对象”(暂且称为对象)蓄积起来,供使用,这样,将减少被缓存对象的生成、销毁等时间,如果对象被反复使用,且其生成、销毁需要花费时间,则缓存这样对象对于时间的节省可能很有效。缓原创 2011-09-26 08:50:14 · 677 阅读 · 0 评论 -
深入理解缓冲区(五)
4.1 PostgreSQL数据缓冲区管理4.1.1 PG缓冲区源码--文件介绍位置:src/backend/storage/buffer/文件名称功能buf_init.cBuf初始化原创 2011-09-28 08:34:22 · 861 阅读 · 0 评论 -
深入理解缓冲区(四)
4 数据库中的缓冲区在一个DBMS系统中,缓冲区经常被使用,用以提高系统的性能。如,PostgreSQL的“src\backend\utils\cache”下,就有如下文件:文件名称功能attoptca原创 2011-09-27 08:28:48 · 776 阅读 · 0 评论 -
深入理解缓冲区(六)
4.1.3.2 从buf分配看buf的使用BufferAlloc函数,当有buf可以被分配时,从缓冲区拿出“空闲”(有个freelist结构)的缓存块进行分配,如果缓冲区已经满,则根据缓存淘汰算法,对缓存中的被选中的脏页进行刷出,然后分配给提出需求者。原创 2011-09-29 08:37:09 · 771 阅读 · 0 评论 -
深入理解缓冲区(七)
4.1.4 Buf结构缓冲区:一块地址连续的空间,分为几种类型的缓冲区(元信息块、数据缓冲区块、其他信息块)数据缓冲区块:地址连续的、多个缓存块的组合。内存中真正的数据存放区。缓冲区的组成之一。缓存块:最小的缓存数据块的缓存单位。被数据缓存块包含。4原创 2011-09-30 08:26:22 · 778 阅读 · 0 评论 -
深入理解缓冲区(八)
4.1.4.2 Buf的元信息结构Buf的元信息数据块的结构信息如下,描述了每一个缓存块的使用情况:typedef struct sbufdesc{ BufferTag tag; /* ID原创 2011-10-08 08:28:22 · 843 阅读 · 0 评论 -
深入理解缓冲区(十二)
4.1.6 并行计算对buf置换的影响并行计算对buf置换的影响,是指在多用户状态下,对buf中的缓存块同时读写时缓冲区的调度、处理、需要考虑的问题等等。 假设,A、B是三名仓库管理员,各管着100个仓库,每个仓库装入、取出哪个货主的货物,由管理员负责管原创 2011-10-17 08:25:16 · 822 阅读 · 0 评论 -
深入理解缓冲区(九)
4.1.4.3 内外存地址是如何映射的1 缓存对应的内外存的映射关系:typedef struct buftag{ RelFileNode rnode; /* physical relation ident原创 2011-10-09 08:33:38 · 859 阅读 · 0 评论 -
深入理解缓冲区(十四)
4.2.2 日志缓存的管理方式日志缓存的管理,主要依赖于如下结构:typedef struct XLogCtlData{ /* Protected by WALInsertLock: */ XLogCtlInsert In原创 2011-10-19 08:40:24 · 1134 阅读 · 0 评论 -
深入理解缓冲区(十三)
4.2 PostgreSQL日志缓冲区管理前述介绍的buf,是一种双向的缓存,即“向外存发出读请求à读入数据到缓冲区”和“缓冲区中的数据被更新à写出到外存”。在PostgreSQL系统中,还存在一种单向缓存,是REDO日志的缓存,此种缓存,是系统启动时读日志文件原创 2011-10-18 08:37:23 · 1268 阅读 · 0 评论 -
深入理解缓冲区(十)
4.1.4.3 Buf的主体结构形式上是“char *”,本质上是内存开辟出的一块地址连续的区域。关键问题是:数据库如何使用这块区域(缓冲区调度算法)。4.1.4.4 Buf的置换调度策略管理相关数据结构第一个相关结构:Sh原创 2011-10-10 08:41:33 · 996 阅读 · 0 评论 -
深入理解缓冲区(十一)
4.1.6 Buf置换管理算法Clock sweep算法总结如下:1. PG维护一个“freelist”,将空闲的块,置于其上,当有空闲块时,直接从空闲块中取;当有块不再使用,可以归入到空闲块中。2. 当空闲块已经用完,则原创 2011-10-11 08:49:52 · 1184 阅读 · 0 评论 -
深入理解缓冲区(十五)
4.2.3 双向缓存和单向缓存的比较 REDO缓存和REDO日志文件,前者是固定大小的区域,后者是一个线性的文件序列,如何使得固定区域和线性文件对应,是REDO缓存要解决的问题。这点,笔者在上一节进行了描述。 对于数据库的数据缓存,其缓存和外存的数据文件的对应关系,是少对多、一个对一个的关系;而日志缓存和日志文件的对应关系,是少对多、单个对线性序列的关系。要仔细体原创 2011-10-20 09:33:04 · 835 阅读 · 0 评论 -
深入理解缓冲区(十六)
4.3 PostgreSQL数据缓存区改进对于数据库的数据缓存区,PG采取的是在一块连续的数据块对应的内存中,进行局部缓存块的淘汰。当这样的缓冲区被分配好后,则不可再发生动态调整。PG的分配内存的整体方式,是把所有需要内存的都统一求出大小,在系统初始启动过程中,一次从内存中申请出硕大的一块区域,然后在这个区域上,划分出不同的小区域,为不同的内存需求者使用。这样,严重制约了内存动态原创 2011-10-21 08:30:55 · 738 阅读 · 0 评论 -
深入理解缓冲区(十七)
4.3.2 从buf与IO看改进---异步IO 与IO相关的操作,如上图所示。其中,分为两种方式的读写:逻辑IO和物理IO。逻辑IO,是数据据访问层向缓存区读写数据的操作,请求数据,称为逻辑读;写入数据,称为逻辑写。物理IO,是数据缓冲区向外存读写数据的操作,请求数据,称为物理读;写入数据,称为物理写。物理层的读写,是通过smgr接口进行的。调用序列如下:原创 2011-10-24 08:40:37 · 709 阅读 · 0 评论 -
深入理解缓冲区(十八)
4.3.3 从buf淘汰方式看改进---freelist在“4.1.4.5 Buf置换管理算法”中,我们描述了buf调度算法。PG首先是从freelist中取出空余的优先供缓存请求使用。如果freelist空,才去真正淘汰缓存块。所以,一个思路是:尽可能增加freelist中的成员,使得淘汰减少,是否物理IO也可以减少呢?先看PG对于freelist的操作方式:1.原创 2011-10-25 08:39:53 · 880 阅读 · 0 评论 -
多进程与多线程(十二)
3.1.1 PostgreSQL基本架构如图1-PostgreSQL基本结构图,PostgreSQL数据库服务器由几个主进程组成:1. postmaster进程是一个主管进程,它生成其他进程并监听用户连接。 2. 用户进程(比如psql,或用户应用程序通过JDBC等接口)用来处理交互式SQL查询。postmaster生成一个或多个名为pos原创 2011-11-14 08:37:41 · 904 阅读 · 0 评论 -
多进程与多线程(十三)
3.1.2 如何知道PostgreSQL是多进程结构从代码的角度看,我们可从函数“internal_forkexec”来了解系统结构。“internal_forkexec”这个函数的功能是创建子进程,PG根据操作系统差异分别定义了这个函数的实现(CreateProcess或fork),从而实现操作数据库系统层面的无差异化处理。PG的进程主要分为两类,一是系统自身使用的功能进程(原创 2011-11-15 16:16:29 · 773 阅读 · 0 评论