openGauss数据库实验教程 课件 第7-12章 表的创建与系统表实验 -并发控制与锁机制_第1页
已阅读1页,还剩173页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第七章表的创建与系统表实验探索openGauss数据库表的创建与系统表机制目录实验介绍1.实验步骤3.实验讨论与总结5.实验原理2.实验结果4.1.实验介绍了解实验的整体背景和探究方向实验背景与目标01通过研究CREATETABLE语句源代码,引出openGauss系统表机制。探索源代码02了解每创建表都会在系统表存信息的机制。引出系统表机制03以pg_class等三个系统表为切入点深入了解数据库。以系统表为牵引04借助源代码解析掌握关系表定义相关内容。深入了解关系表定义05熟悉CREATETABLE与三个系统表中元数据的关联。掌握系统表关联性06知晓与实验相关的结构体和系统表源代码内容。了解重要结构体代码明确实验开展的原因和期望达成的成果实验具体目的明确各项需掌握的技能和知识掌握元数据关联性掌握CREATETABLE与三个系统表元数据的关联关系。01掌握系统表关键操作学会三个系统表的关键属性、关联与查询操作。02了解相关源代码了解与实验相关的重要结构体和系统表源代码。03理解代码输出原理明白添加代码输出CREATETABLE相关系统的原理。04熟悉系统表作用熟悉系统表在数据库管理和维护中的重要作用。052.实验原理深入理解实验背后的理论基础系统表概念0102040305系统表是存储数据库元数据的特殊数据表。系统表定义包含表、索引等数据库对象的描述信息。存储元数据内容与系统函数配合实现数据库管理和维护。配合函数管理数据库各字段代表不同元数据信息,如relname存表名。系统表字段意义由系统进程维护,数据库启动时自动加载。系统表加载方式认识系统表的基本定义和作用系统表关联系统表间复杂关联openGauss系统表间存在复杂协作关系。主外键表示关联如pg_class和pg_attribute用主外键关联。与其他对象相互关联系统表与用户定义表等对象相互关联。维护数据库一致性数据库操作会使系统表记录更新或删除。关联关系重要性研究关联关系有助于理解数据库内部机制。了解系统表之间的复杂关联关系相关结构体熟悉与实验相关的关键结构体FormData_pg_class定义表级元数据,存表名、OID、存储类型等信息。FormData_pg_attribute定义列级元数据,含列名、数据类型、OID等。FormData_pg_type描述数据类型信息,如名称、大小、对齐方式等。TupleDesc描述关系表元数据,存储所有列的信息。RelationData存关系所有元数据,包括TupleDesc等信息。HeapTupleData表示数据库元组,是存储数据的主要结构。3.实验步骤详细展示实验的具体操作流程创建关系模式学习使用CREATETABLE创建表启动数据库服务器执行gs_ctl命令启动openGauss数据库服务器。连接数据库通过gsql客户端连接openGauss数据库。创建users表执行相应CREATETABLE语句创建users表。删除users表使用DROPTABLE语句删除已创建的users表。创建列存表用WITH指定ORIENTATION为COLUMN创建列存表。行存表创建默认或指定ORIENTATION为ROW创建行存表。Users表创建实例查询系统表掌握查询系统表获取信息的方法pg_class存数据库对象元数据,含oid等重要字段。系统表pg_class介绍01pg_attribute存表中列元数据,如attname等。系统表pg_attribute介绍02通过连接操作查看users表各列元数据信息。查看users表列信息03连接多表查看users表各列类型元数据信息。查看users表类型信息04查看users表对应组合类型(行类型)的类型信息。查看组合类型信息05验证pg_class和pg_type之间的一对一关系。查看pg_class和pg_type关系06查询系统表pg_class系统表的部分列可以看到,刚刚建立的users表对应的元数据位于pg_class系统表的第3行。查询系统表pg_attribute系统表的部分列查询系统表通过pg_attribute表和pg_class表连接操作,查看users表的各个属性列的几个元数据信息查询系统表pg_type系统表的部分列查询系统表通过pg_attribute、pg_class和pg_type表连接操作,查看users表的各个属性列的元数据信息及其对应的类型元数据信息浏览源代码了解重要结构体和系统表的相关代码RelationData及其指针RelationData存关系信息,Relation是其指针。FormData_pg_class及其指针FormData_pg_class存关系元数据,Form_pg_class是指针。tupleDesc及其指针tupleDesc存元组描述信息,TupleDesc是指针。NameData及其指针NameData存数据库对象名称,Name是指针。FormData_pg_attribute及其指针FormData_pg_attribute存列元数据,Form_pg_attribute是指针。HeapTupleData及其指针HeapTupleData表示一行数据,HeapTuple是指针。FormData_pg_type及其指针FormData_pg_type存数据类型元数据,Form_pg_type是指针。输出相关信息01添加代码位置在heap.cpp中heap_create_with_catalog函数末尾添加代码。02添加代码内容定义变量、循环处理,输出表和列的相关信息。03编译安装与测试编译添加代码,启动数据库,创建表查看输出结果。04调试错误方法若有问题,用单步调试方法排除添加代码的错误。05代码添加目的输出新建表的信息,便于了解表的结构和属性。学习添加代码输出CREATETABLE相关信息4.实验结果展示实验最终达成的成果实验成果展示按照实验步骤成功创建了users行存表和列存表。创建行存和列存表根据系统表属性绘制了pg_class等表的ER图。绘制系统表ER图查看添加代码输出,确认表及列信息正确。验证代码输出效果呈现实验各项任务的完成情况5.讨论与总结对实验进行回顾和反思实验总结与反思总结实验收获并思考改进方向实验收获掌握了系统表机制、查询方法和代码添加等知识。遇到的问题实验中可能遇到数据库崩溃、代码错误等问题。解决办法通过调试、查阅资料等方式解决遇到的问题。思考与讨论对系统表作用和代码输出原理等进行深入思考。谢谢观看第八章

表的页面存储结构深入探究openGauss表存储奥秘目录实验介绍1.实验步骤3.实验讨论与总结5.实验原理2.实验结果4.1.实验介绍了解实验内容与基础准备实验内容实验核心要点表页面存储结构openGauss表数据按页面存储,每页含元数据与实际数据,实现高效存取数据存储方式表存储文件分多个页面,页面开头有PageHeaderData,主体存元组与对应结构体实验流程先介绍数据文件等结构,再通过pageinspect插件进行具体实验与分析示例数据库建立railway示例数据库,为后续实验提供数据基础页面存储优势这种存储方式是关系数据的高效物理存储方式,利于快速存储和读取知识理解掌握关键知识点理解openGauss数据文件如何组织,为表存储提供基础数据文件组织熟悉堆表存储方式,知晓元组无序存储的原理堆表存储结构清楚元组更新和删除的具体过程与状态变化元组更新删除理解关系表在数据库中的物理存储方式与特点物理存储结构技能掌握掌握使用pageinspect插件分析表的页面结构的方法插件分析结构掌握实验示例数据库railway的表模式相关信息数据库表模式了解railway数据库中外键约束与数据构成情况外键约束数据能运用插件对表页面结构进行深入分析页面结构分析2.实验原理剖析实验相关原理数据文件数据存储基础存储设备数据表物理存储在非易失性存储设备如磁盘、固态硬盘上数据文件组成数据表数据存于N个数据文件,每个文件由N个页面组成页面编号数据文件内页面从0开始按顺序编号,称为区块号文件增长若数据文件填满,会在末尾追加新空页增加文件长度页面默认大小数据文件内部页面默认大小为8192字节(8KB)数据文件示意openGauss数据文件示意图堆表存储01采用堆表存储,元组无序按“先来后到”存至页面空闲位行存储方式02页面分为页头、行指针数组、空闲空间、行数据四部分页面结构设计03元组指针从页头定长成员后插入,往页尾扩展元组指针扩展04页面中间空洞供后续插入元组和指针使用空闲空间利用05默认8KB页面设计,在多数场景获较好I/O性能与低开销I/O性能优势堆表存储详情堆表页面示意堆表页面示意图元组操作更新过程更新相当于插入新元组,原元组t_xmax变更新事务xid,t_ctid指新元组删除过程删除将元组t_xmax设删除事务xid,t_ctid指向自己数据特性tupledata由多列组成,有定长变长,不同对齐与策略,不存NULL值TOAST技术超2KB堆元组用TOAST存,原页仅存引用,控页大小提性能元组更新和删除示意元组更新过程示意图元组删除过程示意图插件与函数插件功能pageinspect插件提供对数据库页内容低级访问,助诊断与理解存储插件用途可用于检查表或索引页面内容,对调试存储层非常有用常用函数实验常用get_raw_page、page_header、heap_page_items函数函数作用这些函数可获取页面副本、页头信息及堆页面行指针等数据类型函数涉及bytea等数据类型,用于存储二进制数据等pageinspect插件及函数相关结构体关键结构体解析PageHeaderData表示数据页面页头,含lsn、checksum等元信息字段HeapPageHeaderData存储堆页页头信息,兼容PageHeaderData并含特有字段ItemIdData堆表数据结构,存元组信息,如偏移量、标志位等HeapTupleHeaderData表示元组头部,含事务ID、可见性等字段及NULLbitmap等结构体指针各结构体有对应指针定义,方便操作和访问结构体数据部分结构体示意行指针结构ItemIdData示意图元组头部组成示意图3.实验步骤详细实验操作流程插件安装登录用户以dblab用户登录云主机,准备进行插件安装进入目录进入opengauss-compile/openGauss-server目录下pageinspect目录查看文件查看pageinspect目录下文件内容,了解插件相关文件编译插件执行make命令编译插件,warning不影响安装安装插件执行makeinstall命令安装插件,完成插件部署pageinspect插件安装创建示例创建railway数据库,并连接以确保实验环境正确创建数据库按高铁售票场景创建用户、车站等6张关系表创建表向各表中插入示例数据,为后续实验提供数据基础插入数据为相关表添加外键等约束,保证数据完整性与关联性添加约束使用gsql连接数据库,确保能正常操作数据库数据库连接分析结构使用插件分析表结构创建新表创建与users表结构相同的users2表,用于分析查看页头通过page_header函数查看表页面页头结构信息查看元组利用heap_page_items函数查看页面中的元组数据查看原始数据执行相关语句查看页面原始数据,以16进制形式输出绘制结构图根据分析结果,绘制users表的页面结构示意图实验结果实验成果与要求插件安装01完成安装按照实验步骤完成pageinspect插件的安装操作02验证安装使用相应语句验证插件是否成功安装完成插件安装数据创建完成数据创建创建表在railway数据库中成功创建所需的关系表1插入数据向各表中插入示例数据,保证数据完整性2添加约束为相关表添加外键等约束,确保数据正确关联3页面分析分析结构根据users表分析例子,对orders表页面结构进行分析绘制结构图使用工具绘制orders表页面结构图分析过程详细阐述分析orders表页面的过程与发现分析orders表页面其他表分析对其他表进行分析调用函数对其他表调用page_header和heap_page_items函数01获取信息获取对应表的页头结构和元组数据描述02分析对比对不同表的分析结果进行对比,找出异同点03user表页面结构经分析,可以得到users表的页面结构图users表页面结构图讨论与总结实验问题与总结问题与总结反思实验过程与成果01问题解决办法描述实验中遇到的问题及解决方法02实验总结对实验整体进行总结,回顾所学知识和技能谢谢观看第九章openGauss

嵌套循环连接算法实验理解与验证嵌套循环连接算法目录实验介绍1.实验步骤3.实验讨论与总结5.实验原理2.实验结果4.1.实验介绍了解实验的整体背景与挑战实验背景01实验出发点通过阅读和分析openGauss数据库服务器源代码,理解和验证嵌套循环连接算法实现机制。02实验内容涉及浏览函数代码、配置参数、添加代码输出调试和比较信息等操作。03实验复杂性实践内容关联细节众多,具有一定复杂性和挑战性,添加代码易引入错误。04调试方法在大型系统软件中,通过迭代步骤和系统性手段修正添加代码引入的错误。实验的出发点与内容实验目标各项具体的学习与实践目标掌握嵌套循环连接算法的基本原理,如两层循环实现表连接等。理解算法原理理解ExecNestLoop函数代码实现与嵌套循环连接算法的对应关系。掌握函数对应关系学会通过宏重定义方式输出ExecNestLoop函数调试信息。掌握调试信息输出能够在ExecNestLoop函数添加代码输出嵌套循环算法中字段值。掌握字段值输出明白通过EXPLAIN语句查看的查询执行计划含义。理解查询执行计划掌握通过优化器参数配置改变查询执行计划的方式。理解参数配置改变计划熟悉与本实验相关的结构体和源代码。了解相关结构体和源码2.实验原理深入探究实验背后的原理算法原理算法定义使用两层循环实现表连接操作,内层循环遍历次数取决于外层驱动结果集记录条数。复杂度分析复杂度为O(mn),行数少时效率高,行数多时效率降低。优点与缺点驱动结果集少且有索引时效率高,可快速返回结果;驱动结果集多时效率不高。适用场景适用于驱动表对应结果集记录数较少,且被驱动表连接列有索引的情况。教材参考可参考教材中15.3节“Nested-LoopJoins”详细了解算法。嵌套循环连接算法的核心要点代码定位确定算法源代码的位置嵌套循环算法源代码位于文件src/gausskernel/runtime/executor/nodeNestloop.cpp。代码文件实现该算法的函数为ExecNestLoop。函数名称参数为结构体NestLoopState指针,返回值为结构体TupleTableSlot指针。函数参数与返回值主要代码流程如图9.1所示,需对照分析理解实现原理。代码流程相关结构体和函数认识实验涉及的重要元素openGauss执行器专用元组存储数据结构,可统一表示各种元组。TupleTableSlot1保存嵌套循环连接操作信息,作为ExecNestLoop函数参数传递。NestLoopState2openGauss继承PostgreSQL的链表数据结构,用于存储和访问元素。List和ListCell3用于参数传递的抽象数据类型,可表示任何有效SQL类型的数值。Datum4存储当前查询执行计划状态信息,形成计划状态树。PlanState5保存表达式内存上下文的数据结构,存放参数和内存上下文。ExprContext6嵌套循环算子初始化函数,初始化PlanState结构。ExecInitNestLoop73.实验步骤详细展示实验的操作流程源代码定位确定算法代码的位置在openGauss中定位到实现嵌套循环算法的源代码文件。确定文件找到实现该算法的函数ExecNestLoop。确定函数仔细阅读函数源代码,与流程图9.1对照分析其实现原理。对照分析源代码定位openGauss中的嵌套循环算法源代码的主要流程图连接数据库登录主机以dblab用户登录主机,使用gsql连接railway数据库。删除表删除railway数据库中之前实验创建的所有表。创建表创建users表和orders表,并添加外键约束。插入数据向users表和orders表中插入测试数据。测试查询执行查询语句查看users表和orders表的数据。准备实验所需的数据库环境执行查询语句查看users表和orders表的数据连接数据库:准备查询数据输出调试信息尝试输出函数的调试信息在nodeNestloop.cpp开头添加代码,重定义ENL1_printf宏。宏重定义停止openGauss服务,为后续编译和安装做准备。停止服务对openGauss进行编译和安装操作。编译安装启动openGauss服务,恢复数据库运行。启动服务使用gsql再次连接railway数据库。连接数据库执行users表与orders表的连接查询。执行查询执行EXPLAIN语句查看查询执行计划。查看计划输出调试信息添加ENL1_printf宏定义以输出ExecNestLoop函数调试信息输出比较信息输出嵌套循环算法的比较信息添加代码在ExecNestLoop函数中添加代码,输出内外层表连接字段值。停止服务停止openGauss数据库服务器。编译安装重新编译并安装openGauss。连接数据库使用gsql连接数据库服务器。重新设置参数重新设置优化器参数,禁止使用特定扫描方式。再次查询再次执行连接查询,查看输出信息。配置不同参数配置不同的优化器参数,对比查询执行计划差异。观察输出仔细观察不同参数配置下的输出信息,验证嵌套循环算法原理。输出比较信息使用了NestedLoop连接算法的查询执行计划输出比较信息输出嵌套循环算法的比较信息的代码添加位置输出比较信息该查询按照嵌套循环算法的流程进行连接属性值的比较4.实验结果呈现实验的最终成果输出调试与比较信息完成实验要求的信息输出输出调试信息按照实验步骤完成操作,输出ExecNestLoop函数中的调试信息。01输出比较信息完成步骤后,输出嵌套循环算法中连接属性值的比较信息。025.讨论与总结对实验进行回顾与思考问题与思考分析实验中的问题并总结解释在配置参数前后连接属性值比较信息行数从3行变为9行的原因。比较信息行数差异原因谢谢观看第十章

索引的构建与使用深入理解索引构建与系统开销目录实验介绍1.实验步骤3.实验讨论与总结5.实验原理2.实验结果4.1.实验介绍了解实验的整体背景与内容实验简介实验基本情况01实验目标理解与验证索引构建流程、使用方法与系统开销,增强调试能力02实验内容涉及B+树索引实现、查询计划关联、系统表信息等,内容综合03实验难点代码添加错误需迭代排错,增强系统软件调试能力实验目标明确实验要达成的各项成果理解原理掌握索引结构、B+树索引及查询执行计划关联的原理掌握方法学会用CREATEINDEX语句构建索引及添加代码输出信息了解信息熟悉索引相关系统表、函数与结构体的源代码信息2.实验原理剖析实验背后的技术原理索引结构索引定义加速大规模数据查找的数据结构,建立快速键值对检索索引原理对数据表列建立有序结构,通过键值定位记录索引优势加速数据检索,优化复杂查询如范围查询和排序查询索引代价增加存储空间、写入时间和维护复杂性,可能影响查询效率认识索引及其相关概念B+树索引探究B+树索引的特点与树结构多叉树结构,非叶子存关键字和指针,叶子存数据记录B+树特点01易实现,查询效率高,减少磁盘读写操作B+树优势02有元、根、分支和叶节点页面,各页作用不同openGaussB+树结构03先排序索引元组项,再依次写入叶节点页面B+树索引构建04B+树索引结构示例B+树索引结构示例图openGauss中的B+树索引结构openGauss中B+树索引结构示意图btree索引的节点页面组织btree索引节点页面组织示意图CREATEINDEX语句掌握创建索引的SQL语句创建原则仅在经常查询、连接条件等字段上创建索引语法格式包含UNIQUE、CONCURRENTLY等多项参数参数说明解释UNIQUE、USINGmethod等参数的作用和含义索引相关函数与结构体了解索引构建涉及的函数与结构体从standard_ProcessUtility到_bt_buildadd的函数调用步骤函数调用流程如DefineIndex、index_create、btbuild等关键函数重要函数如IndexBuildResult、BTPageState等结构体的信息相关结构体各函数在索引构建中的具体操作和流程函数具体操作btree索引的节点页面结构btree索引节点页面结构示例图实验步骤详细展示实验的操作流程构建btree索引在表中构建btree索引并分析启动数据库,删除旧表,创建users表及函数实验准备向users表插入随机生成的100行元组数据插入查询指定姓名元组,分析查询执行计划查询分析在u_name列创建btree索引,再次分析查询计划索引创建索引相关的系统表查看与索引相关的系统表信息查看索引和表在pg_class中的对应行信息查看pg_class查看索引和表对应的磁盘文件及占用页面情况查看磁盘文件获取索引键包含的表属性在pg_attribute中的信息查看pg_attribute了解索引在pg_index表中的相关信息查看pg_index查看索引对其他对象的依赖信息查看pg_depend获取openGauss支持的索引访问方法信息查看pg_am索引的作用与开销分析索引在不同规模数据下的作用与开销不同规模数据测试在100、1000、100000行元组表上创建索引并查询查询计划对比对比不同规模下使用索引和不使用索引的查询计划空间开销分析查看索引和表的空间大小,计算索引占比添加代码分析btree索引构建过程添加代码位置在btbuild_internal等函数中添加输出信息的代码编译安装停止数据库,编译安装修改后的代码构建索引输出信息启动数据库,构建索引并查看gsql输出的相关信息通过添加代码分析索引构建添加代码示例在nb_tree.cpp文件添加代码示例添加代码示例在nb_sort.cpp添加代码示例添加代码示例在nb_sort.cpp添加代码示例使用pageinspect插件分析索引页面确保pageinspect插件已成功安装插件安装重新创建表并插入1000行随机元组,构建索引数据准备使用bt_metap、bt_page_stats、bt_page_items函数分析函数使用借助插件分析索引页面详情实验结果展示实验的最终结果结果查看按要求查看实验各环节的结果步骤1结果完成实验步骤1,思考指定输出结果的原因01步骤2结果完成步骤2,查看对应的输出结果02步骤3结果完成步骤3,查看输出结果03步骤4结果完成步骤4,查看创建索引的gsql输出04步骤5结果完成步骤5,查看使用插件分析的输出结果05讨论与总结对实验进行总结与讨论问题与总结反思实验过程与成果01问题解决办法描述实验中遇到的问题及解决方法02实验总结对实验整体进行总结,回顾所学知识和技能谢谢观看openGauss数据库日志与恢复实验深入理解日志与恢复机制目录实验介绍1.实验步骤3.实验讨论与总结5.实验原理2.实验结果4.1.实验介绍了解实验背景与挑战实验背景实验目的与挑战O1打通原理与实现鸿沟通过openGauss源代码分析与验证日志与恢复相关原理与机制。O2分析验证原理机制涉及WAL日志、XLOG记录、写入过程、检查点、恢复、备份与PITR恢复等。O3实验具有挑战性实践内容含较多源代码阅读与分析,涉及底层系统机制。理解原理掌握日志相关原理理解WAL日志工作原理知晓WAL日志如何保障数据库在故障时数据不丢失。1理解XLOG日志组织清楚XLOG日志记录的组织结构和数据存储方式。2理解日志写入过程明白日志从产生到写入WAL段文件的整个流程。3理解检查点机制了解检查点何时触发、如何执行及作用。4理解原理在没有WAL日志的数据库中插入数据理解原理在有WAL日志的数据库中插入数据理解原理使用WAL日志的数据库恢复理解原理在带有全页写功能的WAL日志机制下插入数据理解原理在带有全页写功能的WAL日志机制下进行故障恢复理解原理WAL日志文件的命名编码方式掌握方法学会备份与恢复操作熟练运用物理备份和WAL日志进行PITR恢复。掌握备份与PITR恢复01熟悉与实验相关的函数功能和结构体定义。了解相关函数与结构体022.实验原理剖析日志与恢复核心原理WAL日志文件探究WAL日志的作用与命名无WAL日志插入操作无WAL时系统崩溃会导致插入数据丢失,存在数据风险。插入操作与数据库恢复引入WAL日志可保障故障时数据恢复,有REDO日志特性。全页写机制解决部分写问题,每个检查点后首变页面写全页镜像。WAL日志文件命名文件名由时间线id、逻辑id和逻辑段号组成,有计算公式。文件内部结构内部有页面,头数据有不同结构体,XLOG记录在页面中。XLOG日志记录分析XLOG记录的结构与类型包含总长度、事务ID、指针、标志位、资源管理器和CRC校验。通用头部分数据部分有头部分和数据部分,头部分含多种结构体和数据头。不同类型XLOG记录备份块、非备份块和检查点记录有不同的结构和数据组成。XLOG日志记录

XLOG记录的数据结构日志写入过程了解日志写入的关键步骤01执行INSERT语句会调用一系列函数完成日志写入。函数调用流程02事务提交、终止,WAL缓冲区满,写线程周期性写入。引起写入的操作03周期性检查WAL缓冲区,避免XLOG记录大量集中写入。WalWriter线程作用日志写入过程XLOG记录写入过程检查点机制掌握检查点的触发与执行超时间、超大小、fast关闭、手动命令会触发检查点。触发检查点的情形存储重做点、写检查点记录、刷新共享缓冲区、更新控制文件。检查点执行流程含检查点基本信息,损坏则无法得知恢复起点。pg_control文件作用XLOG记录写入过程检查点机制数据库恢复读取控制文件,获取重做点,按顺序重做XLOG记录。启动恢复过程保证非备份块重做顺序正确,避免数据不一致。LSN比较原因备份块重做操作幂等,可重做任意多次。备份块重做特点明确数据库恢复的方式与比较数据库恢复过程数据库恢复数据库恢复示例数据库恢复数据库备份与PITR恢复01物理备份快但文件大,逻辑备份便于跨平台但速度慢。物理备份与逻辑备份02PITR恢复原理结合物理备份和归档日志,重做XLOG记录恢复数据库。03需全量数据文件和WAL日志,按步骤替换、删除、配置恢复。恢复前提与流程认识备份类型与PITR恢复原理3.实验步骤详细展示实验操作流程查看WAL日志文件获取WAL日志相关信息查看默认日志大小了解WAL日志的默认存储空间大小。查看当前日志LSN获取当前日志的唯一标识符LSN值。查看当前日志文件名确定当前正在使用的WAL日志文件名。查看日志名与LSN偏移量知晓日志名和LSN在WAL段文件中的字节位置。查看日志文件目录找到存储WAL日志文件的目录路径。验证数据库恢复immediate关闭模式验证用immediate模式关闭数据库,重启后数据可恢复。fast关闭模式验证用fast模式关闭数据库,未提交事务会被回滚。查看pg_control文件通过命令查看控制文件内容,了解数据库状态。验证不同关闭模式的恢复情况分析代码深入探究数据库恢复代码关注StartupXLOG函数及其调用的相关函数。恢复过程关键函数资源管理器表实现类似C++多态性,处理不同XLOG记录。资源管理器表不同表修改语句对应不同XLOG处理函数,如INSERT调用heap_redo。重做函数调用添加代码输出数据库恢复过程信息注释条件编译注释掉WAL_DEBUG条件编译,打开函数xlog_outrec。修改StartupXLOG代码注释部分代码,输出重做每条XLOG记录的信息。编译安装与启动确保数据库停止,执行编译安装后启动数据库。查看日志输出查看pg_log目录下最新日志文件,分析输出信息。代码添加位置添加代码代码添加位置添加代码验证备份与PITR恢复数据库备份用gs_basebackup脚本备份数据库,获取全量数据文件。插入测试数据在备份后插入测试数据,创建还原点并拷贝WAL日志。PITR恢复操作按步骤清空、替换文件,配置恢复点并启动数据库验证。实践数据库备份与PITR恢复4.实验结果呈现实验的最终成果查看输出查看各实验步骤的输出结果完成11.4.1、11.4.2节输出查看查看WAL日志和验证数据库恢复的输出信息。完成11.4.3节调用图绘制StartupXLOG函数涉及到的函数调用图。完成11.4.4节日志输出查看添加代码后数据库恢复过程的日志输出。完成11.4.5节输出查看验证备份与PITR恢复的数据库表情况。5.讨论与总结总结实验并思考问题实验总结总结实验收获与不足通过实验深入理解了日志与恢复机制,掌握了相关操作方法。实验收获实验中可能遇到代码理解困难、操作出错等问题。存在问题后续可加强代码学习,优化实验步骤,提高实验效率。改进方向谢谢观看第十二章

并发控制与锁机制openGauss数据库事务处理关键部分探究目录实验介绍1.实验步骤3.实验讨论与总结5.实验原理2.实验结果4.1.实验介绍了解实验背景、目的及原理实验背景实验开展的缘由是openGauss数据库实现事务ACID特性的重要部分,保障数据操作正确性并发控制与锁机制重要性目前数据库原理教学中,该模块缺乏有效的实践教学方式教学实践缺乏手段并发控制与锁机制涉及大量复杂代码,增加了教学实践难度代码复杂原因借助openGauss开源代码,进行原理实践并减小代码复杂影响实验目标实验目的要达成的目标理解事务处理原理深入理解openGauss事务处理的基本概念和运行机制了解事务实现机制掌握openGauss事务处理模块的具体实现方式理解锁机制原理清晰认识openGauss锁机制的工作原理和作用了解锁实现过程知晓openGauss锁机制的若干实现步骤和流程掌握四种锁复现方法学会复现Share、AccessShare、RowExclusive、AccessExclusive锁了解相关函数与结构体熟悉与实验相关的函数和结构体的源代码2.实验原理深入探究实验相关原理openGauss事务处理剖析事务处理相关内容事务概念事务是数据库操作执行单位,需满足ACID属性,保障数据操作正确事务处理模块总体结构包含事务管理器、日志管理器等多个部分,协同完成事务处理事务并发控制分层分为上层事务块和底层事务,分层设计便于处理业务语句事务状态机处理过程以SQL语句为例,展示事务状态机在BEGIN、SELECT、END中运转事务状态转换相关函数介绍事务处理、执行、上层状态机控制函数,用于事务状态转换事务ID分配openGauss为事务分配唯一xid,采用uint64单调递增序列CLOG和CSNLOGCLOG记录事务提交状态,CSNLOG记录事务提交序列号,采用SLRU机制总体架构openGauss事务处理模块总体架构事务块状态机转换openGauss事务块状态机转换openGauss锁机制自旋锁用原子指令实现,加锁时间短,无死锁检测,消耗CPU轻量级锁用原子操作等实现,有共享和排他锁,有死锁检测机制常规锁用哈希表实现,支持多种锁模式,有等待队列和死锁检测死锁检测机制包括LWLock和常规锁死锁检测,采用不同方式解决死锁问题无锁原子操作封装原子操作,取代自旋锁,实现简单变量原子更新解读锁机制相关知识t_c结构体队列t_c结构体队列关系图关键数据结构及函数认识重要的数据结构和函数SnapshotData结构体表示事务处理时的快照,用于记录事务相关信息HeapTupleSatisfiesMVCC函数用于一般读事务的快照扫描,基于CSN进行判断LWLock结构体轻量级锁,包含状态位、等待链表等信息与锁相关结构体和宏定义包括LOCKMODE、LockMethod等定义,用于锁的管理获取锁的相关函数如LockAcquire等函数,用于获取锁资源3.实验步骤详细展示实验操作步骤查看锁信息获取表锁相关信息创建表创建users表,包

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论