东莞seo建站咨询企业设计公司

web/2025/9/27 3:25:40/文章来源:
东莞seo建站咨询,企业设计公司,简单网页模板图片,西宁微网站建设文章目录 0.简介1.PG日志介绍2.事务日志介绍3.WAL分析3.1 WAL概述3.2 WAL设计考虑3.2.1 存储格式3.2.2 实现方式3.2.3 数据完整性校验3.3 check ponit 4.事务提交日志#xff08;CLOG#xff09;4.1 clog存储使用介绍4.2 slru缓冲池并发控制 0.简介 本文将延续上一篇文章内容… 文章目录 0.简介1.PG日志介绍2.事务日志介绍3.WAL分析3.1 WAL概述3.2 WAL设计考虑3.2.1 存储格式3.2.2 实现方式3.2.3 数据完整性校验3.3 check ponit 4.事务提交日志CLOG4.1 clog存储使用介绍4.2 slru缓冲池并发控制 0.简介 本文将延续上一篇文章内容上一篇介绍了PG事务涉及到的模块本文介绍日志模块主要介绍PG包含的日志分类和WAL日志、CLOG的详细介绍。 1.PG日志介绍 在PG中日志包含三种 1pg_log:数据库运行日志一般用于记录数据库服务状态、sql执行情况和一些错误信息警告信息。 2pg_xlog:WALWrite Ahead Log即预写日志记录事务日志信息。 3pg_clog:事务提交日志记录事务的元数据。 2.事务日志介绍 常见的事务日志分为两类即Redo Log和Undo Log其区别如下 1)Redo Log:记录修改前的值Replay时用旧值覆盖当前值用于回滚。 2)Undo Log:记录修改后的值Replay时用新值覆盖当前值用于重做。 事务日志需要在数据真正修改发生之前来做记录且Replay操作需要保证幂等性对于PG来说回滚并不涉及到Undo日志而是用MVCC来处理在下一篇会介绍PG的MVCC实现。 3.WAL分析 3.1 WAL概述 如果每次的数据修改都直接去写表文件那么更新的代价是比较大的需要去做硬盘随机写入且修改可能是没有顺序的多次随机寻址和更新页面信息所以一般会引入Buffer Pool将数据写入内存但是面临的问题就是如果在没有刷盘前发生系统故障就会造成数据丢失所以需要日志记录相较于直接更行表文件WAL Log代价更小。 写入顺序为先写入WAL Log,在更新内存。在这种情况下断电或系统故障都能准确恢复数据。 另外现在WAL Log还可以用来做主从同步数据备份等。 3.2 WAL设计考虑 对于WAL的设计下面将介绍一般考虑的点和PG对应的实现 3.2.1 存储格式 数据库中的数据一般分为元数据和数据元数据和数据可以分开存储也可以一起存储如下图 对于PG其WAL被分为多个文件被称为WAL segment file每个文件最大是16M。其命名规则是24个字符被分为三部分TimeLineID、逻辑文件ID、物理文件ID。每个八位取值都是0x00000000到0xFFFFFFFF实际上物理文件id到不了0xFFFFFFFF。 寻址规则是32bit的逻辑文件id8bit的物理文件id16M的24bit地址组成一共64bit地址。 其内部层级如下 文件中包含N个大小为8K的page其中有两种page header一种是XLogLongPageHeaderData另一种是XLogPageHeaderData除了第一个page header是XLogLongPageHeaderData其余都是XLogPageHeaderData。 typedef struct XLogPageHeaderData {uint16 xlp_magic; /* magic value for correctness checks */uint16 xlp_info; /* flag bits, see below */TimeLineID xlp_tli; /* TimeLineID of first record on page */XLogRecPtr xlp_pageaddr; /* XLOG address of this page *//** When there is not enough space on current page for whole record, we* continue on the next page. xlp_rem_len is the number of bytes* remaining from a previous page; it tracks xl_tot_len in the initial* header. Note that the continuation data isnt necessarily aligned.*/uint32 xlp_rem_len; /* total len of remaining data for record */ } XLogPageHeaderData;typedef struct XLogLongPageHeaderData {XLogPageHeaderData std; /* standard header fields */uint64 xlp_sysid; /* system identifier from pg_control */uint32 xlp_seg_size; /* just as a cross-check */uint32 xlp_xlog_blcksz; /* just as a cross-check */ } XLogLongPageHeaderData;可以看到XLogLongPageHeaderData成员除了XLogPageHeaderData还有三个成员。xlp_sysid对应的是pg_control中的system identifier而剩下的xlp_seg_size和xlp_xlog_blcksz为固定大小分别为segment文件的大小16M和page的大小8K。 在一个page中page header之后是N个XLog record。XLog record的布局和结构体信息如下 /** The overall layout of an XLOG record is:* Fixed-size header (XLogRecord struct)* XLogRecordBlockHeader struct* XLogRecordBlockHeader struct* ...* XLogRecordDataHeader[Short|Long] struct* block data* block data* ...* main data*/ typedef struct XLogRecord {uint32 xl_tot_len; /* total len of entire record */TransactionId xl_xid; /* xact id */XLogRecPtr xl_prev; /* ptr to previous record in log */uint8 xl_info; /* flag bits, see below */RmgrId xl_rmid; /* resource manager for this record *//* 2 bytes of padding here, initialize to zero */pg_crc32c xl_crc; /* CRC for this record *//* XLogRecordBlockHeaders and XLogRecordDataHeader follow, no padding */} XLogRecord;typedef struct XLogRecordBlockHeader {uint8 id; /* block reference ID */uint8 fork_flags; /* fork within the relation, and flags */uint16 data_length; /* number of payload bytes (not including page* image) *//* If BKPBLOCK_HAS_IMAGE, an XLogRecordBlockImageHeader struct follows *//* If BKPBLOCK_SAME_REL is not set, a RelFileLocator follows *//* BlockNumber follows */ } XLogRecordBlockHeader;typedef struct XLogRecordDataHeaderShort {uint8 id; /* XLR_BLOCK_ID_DATA_SHORT */uint8 data_length; /* number of payload bytes */ } XLogRecordDataHeaderShort;typedef struct XLogRecordDataHeaderLong {uint8 id; /* XLR_BLOCK_ID_DATA_LONG *//* followed by uint32 data_length, unaligned */ } XLogRecordDataHeaderLong;3.2.2 实现方式 实现方式分为Undo和Redo方式对于PG来说记录的是Redo日志。 3.2.3 数据完整性校验 对应数据完整性的校验使用的是循环校验码的方式这种方式可以有两种实现方式一种是对整个日志块进行校验优势的话就是速度快缺点有一个记录损坏的话恢复代价大要整块处理另外一种是分段校验对于校验速度比第一种稍慢但出问题更容易找到出问题的小段来进行恢复对于PG来说可以看到每个XLog Record都有自己的循环校验码。 3.3 check ponit 对于WAL文件和WAL buffer在执行的过程中数据量一直在增加如果数量过多会影响系统性能PG清理机制依赖于checkpoint其主要作用就是脏数据的写回xlog的回收和更新Redo point恢复启动的起点等信息到pg_control文件中。 4.事务提交日志CLOG 4.1 clog存储使用介绍 CLOG日志记录的是事务的状态在内存中是由使用SLRU作为淘汰算法的缓冲池进行缓存由CLOG日志管理器来进行管理。 在PG事务模块一共定义了事务的四种状态 #define TRANSACTION_STATUS_IN_PROGRESS 0x00 //事务正在运行中 #define TRANSACTION_STATUS_COMMITTED 0x01 //事务已提交 #define TRANSACTION_STATUS_ABORTED 0x02 //事务被终止 #define TRANSACTION_STATUS_SUB_COMMITTED 0x03 //事务的子事务已提交可以看到事务的状态只有四种使用2byte就可以记录一个事务状态一个page(8k)可以记录32k个日志记录。其存储文件以4位的16进制数字命名位于PGDATA/pg_act目录下内部内容如下 /* We need two bits per xact, so four xacts fit in a byte --*/ #define CLOG_BITS_P ER_XACT 2 ---个事务占用2个bit位 #define CLOG_XACTS_PER_BYTE 4 --一个字节可以存放4个事务状态 #define CLOG_XACTS_PER_PAGE (BLCKSZ * CLOG_XACTS_PER_BYTE)--一个页块可以存放多少个事务状态 #define CLOG_XACT_BITMASK ((1 CLOG_BITS_PER_XACT) - 1)#define TransactionIdToPage(xid) ((xid) / (TransactionId) CLOG_XACTS_PER_PAGE) --事务存放在第几页 #define TransactionIdToPgIndex(xid) ((xid) % (TransactionId) CLOG_XACTS_PER_PAGE) --页内的偏移量 #define TransactionIdToByte(xid) (TransactionIdToPgIndex(xid) / CLOG_XACTS_PER_BYTE) --页内的第几个字节 #define TransactionIdToBIndex(xid) ((xid) % (TransactionId) CLOG_XACTS_PER_BYTE) --字节内的偏移量可以看到有一个事务id之后可以计算得到页页内偏移页内字节和字节内偏移量从而找到事务状态。4.2 slru缓冲池并发控制 因为slru最近最少使用的概念是比较容易理解的下面主要描述PG在slru的缓冲池上实现并发控制的方式。 对于SLRU缓冲池PG使用了两种锁来进行并发控制。 1)ControlLock整个缓冲区的控制锁(读写锁。 2) buffer_locks每个缓冲区页面锁读写锁。 一次读取到slru的流程 获取ControlLock的全局锁-》挑选出替换的缓存更新缓存的状态为正在读-》获取缓存的写锁-》释放ControlLock的全局锁因为刷新磁盘的时间会很长这里释放全局锁提高并发性能-》从文件中读取数据到缓存-》重新获取ControlLock全局锁因为接下来要修改缓存的状态-》设置缓存的状态为有效状态-》释放ControlLock全局锁-》释放缓存的写锁并且设置缓存为最近访问。 可以看到PG采用了分页控制的方式提高了并发操作的性能。

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

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

相关文章

高端品牌型网站建设顶尖网站设计公司

java springboot word文档转pdf 1、环境2、依赖3、代码 1、环境 1、java、springboot 2、maven或者gradle 3、办公软件(自己电脑上的wps或者office等,如果部署到服务器上也要安装,linux、Mac 都有,自己安装) 可能会遇…

建站宝盒全能版重庆标本制作

连接别人:vim /etc/ssh/ssh_config 被连接: vim /etc/ssh/sshd_config 端口重启生效: /etc/init.d/sshd restart 转载于:https://www.cnblogs.com/gered/p/10871335.html

校园网站建设年度工作计划mq网站开发

用户在确认订单页面,可以针对收货地址做如下操作: 1. 查询用户的所有收货地址列表 2. 新增收货地址 3. 删除收货地址 4. 修改收货地址 5. 设置默认地址步骤1:创建对应用户地址BO public class AddressBO {private String addressId;private…

北京网站建设一条龙中山有哪些网站建立公司

数字、布尔值和字符串是构建数据结构的原子。不过,许多类型的信息需要不止一个原子。对象允许我们对值(包括其他对象)进行分组,从而构建更复杂的结构。到目前为止,我们所构建的程序都受到限制,因为它们只能…

.net 创建网站项目美食网站建设设计方案

文章目录 Linux第2课Windows下的环境配置-虚拟机安装一、VMware虚拟机的安装(一)安装VMware(二)启动电脑本地的VMware相关服务 二、VirtualBox安装 Linux第2课Windows下的环境配置-虚拟机安装 本节课程提供了两种虚拟机的安装方法…

工信部的网站备案信息图书馆网站建设与评价研究

线程和进程的区别 进程和线程的区别线程的优点 进程和线程的区别 1. 进程是系统进行资源分配和调度的一个独立单位,线程是程序执行的最小单位. 2. 进程有自己的内存地址空间,线程只独享指令流执行的必要资源,如寄存器和栈. 3. 由于同一进程的各线程共享内存和文件资源,可以不通…

霸县网站建设赞友商城电商平台排名第几

目录 一、Sticky分区分配策略原理二、Sticky分区分配策略 示例需求三、Sticky分区分配策略代码案例3.1、创建带有7个分区的sevenTopic主题3.2、创建三个消费者 组成 消费者组3.3、创建生产者3.4、测试3.5、Sticky分区分配策略代码案例说明 四、Sticky分区分配再平衡案例4.1、停…

口碑好的丹徒网站建设哪个网站找做软件下载

转载自 Java中的ThreadPoolExecutor类在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了&…

网站建设与管理教学视频下载手机网站如何制作免费

1.微服务架构模式方案 用Scale Cube方法设计应用架构,将应用服务按功能拆分成一组相互协作的服务。每个服务负责一组特定、相关的功能。每个服务可以有自己独立的数据库,从而保证与其他服务解耦。 1.1 聚合器微服务设计模式 聚合器调用多个服务实现应用程…

网站托管服务商长春880元网站建设

现在距离2024年第11届汉字小达人比赛还有六个多月的时间,如何利用这段时间有条不紊地备考呢?我的建议是两手准备:①把小学1-5年级的语文课本上的知识点熟悉,重点是字、词、成语、古诗。阅读理解不需要。②把历年真题刷刷熟&#x…

建站行业发展酷家乐个人免费版官网

1.背包问题 (1)01背包 从n个重量和价值分别为wi,vi的物品,从中选出不超过W的物品,每种物品仅有一件,求所有方案中V的最大值。 最朴素最简单也最费时的方法:O(2^n) int rec(int i,int j)//从第i个开始挑选总…

网站文字设计食品公司网站源码

这里写目录标题 C基础语法变量与运算条件判断循环结构 数组和字符串一维数组二维数组字符串处理 函数与算法函数定义常用算法 数据结构链表与顺序表栈和队列树 计算机基础硬件组成数据单位进制转换 C知识点总结,适合六年级刚学C的学生: C基础语法 变量与…

孝感做网站网站运营包括哪些

点开“虚拟机->设置->桥接模式(勾选复制物理网络连接状态)->确认” 点击“右上角扇形网络图标->Edit Connections->Wired->选中->Delete->Add->IPv4 Settings->Method(Manual)->Add->输入IP,子网掩码&am…

在哪个平台做网站好网页设计指什么

【写在前面】 飞腾开发者平台是基于飞腾自身强大的技术基础和开放能力,聚合行业内优秀资源而打造的。该平台覆盖了操作系统、算法、数据库、安全、平台工具、虚拟化、存储、网络、固件等多个前沿技术领域,包含了应用使能套件、软件仓库、软件支持、软件适…

互联网电商网站建设wordpress 百度搜索

数据表信息查看 1、维度查看: df.shape2、数据表基本信息(维度、列名称、数据格式、所占空间等): df.info()3、每一列数据的格式: df.dtypes4、某一列格式: df[B].dtype5、空值: df.isnul…

全国建设地产网站做网站注册商标

Runway Gen-2的官方网站提供了一种文本生成视频的工具。以下是对该工具的介绍: 文本生成视频:Runway Gen-2是一个创新的在线工具,可以将文本转化为视频。用户只需输入文本描述或句子,Runway Gen-2就能自动生成相应的视频内容。这…

网站被镜像怎么办宝应县天宇建设网站

一、为什么使用严格模式? 在普通的 JavaScript 中,写错变量名会创建新的全局变量, 在严格模式中,写错变量名会抛出错误来提醒开发者 二、声明严格模式 通过在脚本或函数的开头添加 “use strict”; 来声明严格模式。"use …

建立网站的文案怎么写西安金融网站建设

如果ifconfig只显示了lo, ifconfig -a 却正常显示ens33。那么可以按照如下的操作: service network-manager stop rm /var/lib/NetworkManager/NetworkManager.state service network-manager start 即可恢复网络连接

网站建设中怎么编辑图片做网站php与python

​ 本周安全态势综述 OSCS 社区共收录安全漏洞 3 个,公开漏洞值得关注的是 VMware Aria Operations SSH 身份验证绕过漏洞( CVE-2023-34039 )、Apache Airflow Spark Provider 反序列化漏洞( CVE-2023-40195 )。 针对 NPM 仓库,共监测到 324 个不同版本…

工程设计东莞网站建设技术支持网站的统计 怎么做

目录 前言初始化数据库Docker 部署 xxl-job下载镜像创建容器并运行访问调度中心 SpringBoot 整合 xxl-jobpom.xmlapplication.ymlXxlJobConfig.java执行器注册查看 定时任务测试添加测试任务配置定时任务测试结果 结语附录xxl-job 官方文档xxl-job 源码测试项目源码 前言 xxl-…