搜索
首页数据库mysql教程PostgreSQL 9.1.2总控walsender.c源码分析

PostgreSQL9.1.2总控walsender.c源码分析,walsender.c程序中的函数都是为walsender进程发送WAL记录而准备的,包括了walsender进

一、程序涉及到的一些知识

1、主服务器是以连续的归档模式操作的,而备用服务器是以连续的恢复模式从主服务器的WAL文件中读取数据。

2、归档进程pgarch就是负责在重做日志文件切换后将已经写满的重做日志文件复制到归档日志文件中,以防止循环写入重做日志文件时将其覆盖。所以说,只有数据库运行在归档模式时,这个pgarch进程才会被启动。

3、日志传送是异步进行的。WAL记录的传送是在事务提交之后进行的。

4、辅助服务器可以通过TCP连接(所谓的流复制)从WAL归档或者主服务器的目录中读取WAL记录。

5、如果想用流复制,必须在主服务器中设置相应的权限,以使来自备用服务器的流复制连接得到许可。这个需要在pg_hba.conf文件中做相应的配置。本代码中的max_wal_senders变量也是在这个文件做配置的,以提供足够大的值来存储备用服务器的数量。

二、walsender.c主要函数功能详解

walsender.c程序中的函数都是为walsender进程发送WAL记录而准备的,包括了walsender进程的入口函数、初始化函数、读取WAL记录的XlogRead函数、XlogSend函数以及walsender进程处理相关的信号函数等。

1、walsender进程重要的数据结构

(1)、标记walsender进程的状态枚举

在walsender进程的生命周期中,进程存在四个状态,即:启动状态、备份状态、获取异常状态以及终止状态。其定义如下所示: 

[cpp]

下面就walsender进程的四个状态以及何时处于一种特定的状态进行说明:

①、在刚刚创建的时候是处在启动状态;

②、在日志的发送过程中,一直都是处在备份的状态;

③、如果walsender进程在休眠的时候接收到一些异常信号的时,walsender进程的状态标记为catchup态,标记出进程在和 walreceiver通信的过程中出现一些不可以处理的异常,比如:walreceiver进程请求的文件不存在、walsender进程和walreceiver进程的通信链接断开等等。

④、walsender进程在休眠的时候接收到一些异常信号的时候,会由catchup态转换为终止态,在这个状态的时候,进程一般需要处理相关的异常处理,比如发送出一些留在缓冲区中尚未发送出去的WAL日志文件、进程退出等。

(2)、存储每一个walsender进程的信息数据结构

在postgreSQL数据库系统中,可能存在多个walsender进程用来为walreceiver进程发送请求的WAL记录,如果不对每个walsender进程加以标记,整个系统将会很混乱,这个用来存储walsender进程信息的数据结构定义在src\include\replication\walsender.h文件中。其结构如下所示:

[cpp]

在WalSnd结构体中,定义了存储walsender进程的ID号,在系统中每一个进程的ID号是不一样的,这样用进程号来标记共享内存中的WalSnd结构,将会带来很大的方便。在WalSnd结构体中定义的内容分别简述如下:

①、pid:存储walsender进程的ID号;

②、state:存储walsender进程的状态,,其状态含义在上面陈述过;

③、write、flush以及apply:分别记录辅助服务器中xlog被写、刷新和应用的位置,如果辅助服务器还没有为它们赋值,则它们是无效的;

④、mutex:互斥信号量,是int类型的,用来控制一些临界资源,使得临界资源一次只能被一个进程所读、写等操作;

⑤、latch:用来保护③中的三个变量,其作用相当于一把锁;

⑥、sync_standby_priority:辅助服务器的优先级顺序,为0则表示没有被排列,被同步复制锁SyncRepLock保护。

linux

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
MySQL和PostgreSQL:在Web开发中的最佳实践MySQL和PostgreSQL:在Web开发中的最佳实践Jul 14, 2023 pm 02:34 PM

MySQL和PostgreSQL:在Web开发中的最佳实践引言:在现代的Web开发领域中,数据库是必不可少的组成部分。在选择数据库时,常见的选择是MySQL和PostgreSQL。本文将介绍在Web开发中使用MySQL和PostgreSQL的最佳实践,并提供一些代码示例。一、适用场景MySQL适用于大多数Web应用程序,特别是那些需要高性能、可扩展性和易于使

MySQL和PostgreSQL:性能对比与优化技巧MySQL和PostgreSQL:性能对比与优化技巧Jul 13, 2023 pm 03:33 PM

MySQL和PostgreSQL:性能对比与优化技巧在开发web应用程序时,数据库是不可或缺的组成部分。而在选择数据库管理系统时,MySQL和PostgreSQL是两个常见的选择。他们都是开源的关系型数据库管理系统(RDBMS),但在性能和优化方面有一些不同之处。本文将比较MySQL和PostgreSQL的性能,并提供一些优化技巧。性能对比在比较两个数据库管

MySQL和PostgreSQL:数据安全与备份策略MySQL和PostgreSQL:数据安全与备份策略Jul 13, 2023 pm 03:31 PM

MySQL和PostgreSQL:数据安全与备份策略引言:在现代社会中,数据成为了企业和个人生活中不可或缺的一部分。对于数据库管理系统来说,数据安全与备份策略是至关重要的,既能保护数据免受丢失或损坏,也能确保恢复数据的可靠性和完整性。本文将重点讨论MySQL和PostgreSQL两种主流关系型数据库系统的数据安全性和备份策略。一、数据安全性方面:(一)用户权

在Go语言中使用PostgreSQL:完整指南在Go语言中使用PostgreSQL:完整指南Jun 18, 2023 am 09:28 AM

Go语言是一种快速、高效的编程语言,适合构建Web服务和后端应用程序。而PostgreSQL是一个开源的关系型数据库管理系统,承诺提供更高的可靠性、可扩展性和数据安全性。在本文中,我们将深入探讨如何在Go语言中使用PostgreSQL,并提供一些实用的代码示例和技巧。安装和设置PostgreSQL首先,我们需要安装和设置PostgreSQL。可以在官方网

如何在PHP编程中使用PostgreSQL数据库?如何在PHP编程中使用PostgreSQL数据库?Jun 12, 2023 am 09:27 AM

随着数据库技术的发展,数据库管理系统也呈现出多种多样的选择,开发人员可以根据自己的需求和喜好选择最适合自己的数据库。而PostgreSQL作为一种先进的开源关系型数据库系统,越来越受到开发人员的关注和使用。那么,在PHP编程中如何使用PostgreSQL数据库呢?一、安装和配置PostgreSQL数据库在使用PostgreSQL之前,需要先安装和配置它。首先

学习Go语言中的数据库函数并实现PostgreSQL数据的增删改查操作学习Go语言中的数据库函数并实现PostgreSQL数据的增删改查操作Jul 31, 2023 pm 12:54 PM

学习Go语言中的数据库函数并实现PostgreSQL数据的增删改查操作在现代的软件开发中,数据库是不可或缺的一部分。Go语言作为一门强大的编程语言,提供了丰富的数据库操作函数和工具包,可以轻松地实现数据库的增删改查操作。本文将介绍如何学习Go语言中的数据库函数,并使用PostgreSQL数据库进行实际的操作。第一步:安装数据库驱动程序在Go语言中,每个数据库

PHP实现开源PostgreSQL关系型数据库PHP实现开源PostgreSQL关系型数据库Jun 18, 2023 am 08:40 AM

随着互联网的发展,数据量持续增长,数据管理的需求变得日益迫切。关系型数据库是数据管理的一种重要方式,而其中的PostgreSQL因其灵活性、可扩展性及安全性而备受欢迎。本文介绍了如何利用PHP语言实现一个开源的PostgreSQL关系型数据库,希望对有相应需求的开发者有所帮助。概述PostgreSQL是一种强大的关系型数据库系统,它是遵循SQL标准的且具有许

MySQL和PostgreSQL:如何优化数据库查询性能?MySQL和PostgreSQL:如何优化数据库查询性能?Jul 12, 2023 pm 03:15 PM

MySQL和PostgreSQL:如何优化数据库查询性能?概述:在开发应用程序时,数据库查询性能是一个重要的考虑因素。良好的查询性能可以提高应用程序的响应速度和用户体验。本文将介绍一些优化数据库查询性能的方法,重点涵盖MySQL和PostgreSQL两种常用数据库。数据库索引的优化:数据库索引是提高查询性能的重要因素。索引可以加快数据的查找速度,减少查询时扫

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前By尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SecLists

SecLists

SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),