![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
崩溃恢复
文章平均质量分 89
Hehuyi_In
这个作者很懒,什么都没留下…
展开
-
MySQL从库1236报错Client requested master to start replication from position > file size
主库断电后主从同步断了?原创 2024-04-30 18:18:16 · 2550 阅读 · 1 评论 -
PostgreSQL unloged表测试及记录
不写WAL日志,因此性能优于普通表从库查询unloged表会报错非crash安全:数据库crash或以immediate方式关闭,unloged表数据会被自动清空原创 2023-09-14 19:56:09 · 2439 阅读 · 1 评论 -
postgresql源码学习(42)—— 崩溃恢复④ - 日志应用
确定日志来源之后,就可以开始应用WAL日志。在Rmgr中,每种类型的WAL日志都有startup,redo,cleanup等函数,其中最重要的就是redo函数。以最常见的insert为例,假如每个事务执行了插入并提交,此时数据还在buffer没有落盘,恰逢数据库宕机。在db下次启动时,就会读取到XLOG_HEAP_INSERT类型的WAL记录(对应Rmgr类型为RM_HEAP_ID),因此会进入heap_redo函数(在heapam.c文件)。原创 2022-08-24 00:00:47 · 1434 阅读 · 0 评论 -
postgresql源码学习(41)—— 崩溃恢复③ - 日志来源
pg会根据当前状态确定初始日志源,当日志源读取发生错误,或者状态发生改变时,会切换到其他日志源。这个功能对应函数是 WaitForWALToBecomeAvailable(在xlog.c文件)前篇中获取到了恢复起点,即开始回放日志的位置,后面我们就可以开始读取并应用日志了。不过在此之前还有一个问题,从哪里获取WAL日志呢?用于在不同时段,从不同的日志源获取WAL日志。,对于不同的用途,也有不同的日志来源。技术内幕:事务处理深度探索》第4章。崩溃恢复、从库日志应用、)表示待应用日志的来源,原创 2022-08-23 23:41:41 · 1566 阅读 · 0 评论 -
postgresql源码学习(40)—— 崩溃恢复② - 恢复起点
从if (InRecovery) 部分开始,真正开始日志应用。首先会更新控制文件,说明当前进入了Recovery模式,并将读到的检查点信息也保存到控制文件。如果有backup_label文件,但又无法获取到检查点或者redo点信息,数据库启动会报错。通常,崩溃恢复的起点是最近一次检查点,这个位置保存在控制文件中。在之前创建检查点的函数中我们也看到,每次检查点创建时都会刷新控制文件中的信息。文件,如果该文件存在,则优先从该文件获取检查点信息,作为故障恢复起点。技术内幕:事务处理深度探索》第。原创 2022-08-20 00:21:46 · 1353 阅读 · 0 评论 -
postgresql源码学习(39)—— 崩溃恢复① - Startup进程的三大作用
如果数据库宕机或者服务器故障,缓存中的脏页可能尚未被刷入磁盘,磁盘中的数据处于不一致状态。在数据库重新启动时,需要借助WAL日志将数据库恢复到一致的状态。崩溃恢复的核心进程是Startup进程,核心函数是StartupXLOG函数,它在pg启动时就会被调用,读取配置信息,应用WAL日志。下一篇,我们正式学习StartupXLOG函数,看不同场景下如何进行日志应用。《PostgreSQL技术内幕:事务处理深度探索》第4章。大功能——崩溃恢复、从库日志应用、(基于时间点的恢复)。日志应用都是分不开的。...原创 2022-08-14 12:18:17 · 1984 阅读 · 0 评论 -
postgresql源码学习(34)—— 事务日志⑩ - 全页写机制
前几天看了阿里云关于全页写的直播,打算重新再整理下关于全页写的内容。原创 2022-07-30 18:01:53 · 1949 阅读 · 0 评论 -
postgresql源码学习(31)—— 检查点③ - 入口函数CheckpointerMain
CheckpointerMain函数是checkpointer进程的主入口函数。第一部分主要是些准备工作:下面这段很重要 Checkpointer进程的主流程是一个无条件的for循环,在未触发checkpoint时一直在WaitLatch中sleep,也就是在epoll_wait中观察list链表,查看是否有事件句柄已经就绪(某个条件触发checkpoint)。如果已经存在就绪事件,则通过SetLatch中write pipe的方式唤醒,执行checkpoint。.........原创 2022-07-11 22:45:59 · 2048 阅读 · 4 评论 -
postgresql源码学习(29)—— 检查点① - 基础知识与结构体
因此,我们需要这样一个时间点这个时间点,就是检查点。就是前面提到的那几点,后面我们会再具体看是怎么实现的检查点XLog记录的结构体,我们暂时只会用到第一个变量,因此这里只记第一个。 这个redo变量就是redopoint,所谓的故障恢复起点。 redopoint的特性是在它之前所有XLOG对应的数据都已经落盘。那么与其去找redopoint不如构建redopoint。怎么构建呢? 当前日志写入的位置为Insert->CurrBytePos,那么只要在这个时候将数据页原创 2022-07-10 20:42:42 · 2249 阅读 · 2 评论 -
sqlserver 数据库状态转换图
状态的转换数据库有很多状态。他们是如何在这些状态之间进行切换的呢?下面这个图非常清晰的标示了各个状态的切换。ONLINE (在线)数据库可正常运行RESTORING (正在还原)数据库正在还原,当我们还原数据库使用NORECOVERY 模式时,数据库就会变成该状态RECOVERING (正在恢复)数据库启动,数据库创建,ALTER ONLINE,RESTORE W...原创 2019-05-06 16:53:51 · 2012 阅读 · 0 评论 -
pg 崩溃恢复篇(三)—— 走近XLOG记录
一、 XLOG记录的内部结构XLOG记录由通用头部分XLogRecord+数据部分组成而数据部分又有自己的头部分和数据部分1. XLOG记录通用头部所有XLOG记录都有一个的通用头部分,由结构体XLogRecord定义。9.5及之后定义如下typedef struct XLogRecord{ uint32 xl_tot_len; /* 记录总长度 */ Tr......转载 2019-11-12 23:40:43 · 2525 阅读 · 0 评论 -
pg 崩溃恢复篇(四)—— 检查点进程与崩溃恢复
一、 检查点进程在pg中,当下列情形之一发生时,checkpointer进程会启动执行检查点:自上次检查点执行时间已超过checkpoint_timeout设置(默认300秒)。 在9.5之前,自上一次检查点以来使用的WAL文件数量,超过了checkpoint_segments设置(默认为3)。 9.5开始为pg_xlog中WAL文件总大小超过max_wal_size设置(默认1GB,......转载 2019-11-13 19:30:57 · 3255 阅读 · 3 评论 -
pg 崩溃恢复篇(二)—— WAL文件结构及管理
第二篇我们来看WAL文件逻辑、物理结构以及管理方法一、 事务日志和WAL文件在逻辑上,pg用一个地址空间长度为8B的虚拟文件表示事务日志(最大可达16EB)。在物理上,pg中的事务日志默认切分为16 MB的文件,每个文件称为WAL段。pg 11开始,使用initdb命令初始化时可以使用–wal-segsize选项配置WAL段文件的大小。WAL文件名由24个十六进制数组成,命名规...原创 2019-11-13 16:46:48 · 4131 阅读 · 0 评论 -
pg 崩溃恢复篇(一)—— WAL的作用与全页写机制
WAL(Write Ahead Log)机制最初在7.1版中实现,以减轻服务器崩溃的影响。它也是基于时间点恢复(PITR)和流复制(SR)实现的基础。WAL机制非常复杂,在第一篇中,我们只看看为什么需要WAL,它有什么作用,又会有什么不足。一、没有WAL的插入操作要看为什么需要有WAL,那就先看看如果没有会怎么样。假设我们TABLE_A中插入一些数据,这些数据没有使用WAL功能...原创 2019-11-12 15:21:44 · 4401 阅读 · 0 评论