网站标签该站未曾设置keywords
网站描述该站未曾设置description
网站快照J e f f r e y s s p a c e 跳 至 正 文 J e f f r e y s s p a c e 首 页 A b o u t 隐 私 政 策 ← 早 期 文 章 H a p p y b i r t h d a y t o m e 发 表 于 2 0 2 5 年 8 月 1 4 日 由 g u j i n f e i M a y y o u r C P U l o a d b e l o w , y o u r n e t w o r k l a t e n c y b e z e r o , a n d y o u r h a p p i n e s s b u f f e r o v e r f l o w w i t h j o y . M a y a l l y o u r l i f e ’ s S E L E C T q u e r i e s r e t u r n o n l y g o o d r o w s , a n d y o u r J O I N s a l w a y s b r i n g t h e r i g h t p e o p l e t o g e t h e r . 发 表 在 生 活 日 常 | 留 下 评 论 性 能 调 试 — c p u 占 用 高 发 表 于 2 0 2 5 年 8 月 1 3 日 由 g u j i n f e i t o p t o p H p 只 显 示 指 定 进 程 的 所 有 线 程 , 并 实 时 显 示 它 们 的 C P U 、 内 存 等 使 用 情 况 。 p s t a c k p e r f p e r f t o p p 查 看 函 数 热 点 , 采 样 一 段 时 间 p e r f r e c o r d p g s l e e p 1 0 p e r f r e p o r t s t r a c e s t r a c e t t T p 火 焰 图 安 装 p e r f s u d o a p t g e t i n s t a l l l i n u x t o o l s c o m m o n l i n u x t o o l s $ ( u n a m e r ) 采 样 数 据 s u d o p e r f r e c o r d F 9 9 p g s l e e p 3 0 F 9 9 每 秒 采 样 9 9 次 p 针 对 指 定 进 程 g 采 集 调 用 栈 ( 火 焰 图 需 要 ) s l e e p 3 0 采 样 3 0 秒 生 成 调 用 栈 s u d o p e r f s c r i p t > o u t . p e r f 下 载 F l a m e G r a p h 工 具 g i t c l o n e h t t p s : / / g i t h u b . c o m / b r e n d a n g r e g g / F l a m e G r a p h . g i t c d F l a m e G r a p h 生 成 火 焰 图 . / s t a c k c o l l a p s e p e r f . p l . . / o u t . p e r f > o u t . f o l d e d . / f l a m e g r a p h . p l o u t . f o l d e d > f l a m e g r a p h . s v g 发 表 在 d e b u g | 留 下 评 论 B a c k g r o u n d W r i t i n g 发 表 于 2 0 2 5 年 8 月 5 日 由 g u j i n f e i 如 果 后 台 进 程 ( b a c k e n d ) 需 要 从 缓 冲 区 中 驱 逐 一 个 脏 页 ( d i r t y p a g e ) , 它 必 须 将 这 个 页 面 写 入 磁 盘 。 这 种 情 况 是 不 希 望 发 生 的 , 因 为 它 会 导 致 等 待 ( 例 如 I / O 阻 塞 ) — — 更 好 的 方 式 是 在 后 台 异 步 地 执 行 写 入 操 作 。 这 一 工 作 部 分 由 c h e c k p o i n t e r 进 程 完 成 , 但 这 仍 然 不 够 。 因 此 , P o s t g r e S Q L 还 引 入 了 另 一 个 名 为 b g w r i t e r ( 后 台 写 入 进 程 ) 的 进 程 , 专 门 用 于 后 台 写 盘 操 作 。 b g w r i t e r 和 驱 逐 ( e v i c t i o n ) 使 用 相 同 的 缓 冲 区 遍 历 算 法 , 但 有 两 个 关 键 区 别 : b g w r i t e r 使 用 自 己 独 立 的 时 钟 指 针 ( c l o c k h a n d ) , 该 指 针 从 不 会 落 后 于 驱 逐 的 指 针 , 通 常 还 会 超 过 它 ; 在 遍 历 缓 冲 区 时 , b g w r i t e r 不 会 降 低 页 面 的 u s a g e c o u n t ( 使 用 计 数 ) 。 当 一 个 缓 冲 页 未 被 固 定 ( u n p i n n e d ) 且 其 u s a g e c o u n t 为 0 时 , 如 果 它 是 脏 的 , b g w r i t e r 就 会 将 其 刷 新 到 磁 盘 。 换 句 话 说 , b g w r i t e r 在 驱 逐 操 作 发 生 之 前 运 行 , 主 动 地 将 那 些 很 可 能 即 将 被 驱 逐 的 页 面 提 前 写 入 磁 盘 。 这 样 做 的 好 处 是 : 被 选 中 驱 逐 的 缓 冲 页 很 可 能 已 经 是 干 净 的 ( c l e a n ) , 从 而 提 高 了 驱 逐 操 作 的 效 率 , 避 免 了 后 台 进 程 被 迫 同 步 写 盘 的 代 价 。 总 结 c h e c k p o i n t e r 是 “ 周 期 性 清 理 工 ” , 而 b g w r i t e r 是 “ 持 续 扫 地 工 ” 。 c h e c k p o i n t e r 负 责 最 终 的 数 据 落 盘 一 致 性 , 而 b g w r i t e r 提 前 清 理 “ 潜 在 垃 圾 ” , 让 后 台 线 程 少 “ 踩 雷 ” 。 二 者 配 合 , 保 障 了 P o s t g r e S Q L 的 高 并 发 性 能 和 写 入 平 滑 性 。 发 表 在 p o s t g r e s , 未 分 类 | 标 签 为 p o s t g r e s | 留 下 评 论 R e c o v e r y 发 表 于 2 0 2 5 年 8 月 4 日 由 g u j i n f e i 服 务 器 启 动 时 , 第 一 个 启 动 的 进 程 是 p o s t m a s t e r ( 新 版 本 为 p o s t g r e s ) 。 p o s t m a s t e r 接 着 会 生 成 s t a r t u p p r o c e s s ( 启 动 进 程 ) , s t a r t u p p r o c e s s 负 责 在 发 生 故 障 时 进 行 数 据 恢 复 。 s t a r t u p p r o c e s s 是 一 个 短 暂 的 、 一 次 性 的 进 程 , 它 的 主 要 职 责 是 在 数 据 库 启 动 时 执 行 崩 溃 恢 复 或 归 档 恢 复 。 它 完 成 它 的 工 作 后 , 就 会 退 出 。 p o s t g r e s @ l a v m b a r 1 g u v e d 6 : / r o o t $ p g _ c o n t r o l d a t a D / h o m e / p o s t g r e s / p g d a t a / | g r e p s t a t e D a t a b a s e c l u s t e r s t a t e : i n p r o d u c t i o n p o s t g r e s @ l a v m b a r 1 g u v e d 6 : / r o o t $ 一 个 正 常 停 止 的 服 务 器 会 处 于 “ 已 关 闭 ” ( s h u t d o w n ) 状 态 ; 而 一 个 未 运 行 的 服 务 器 却 显 示 为 “ 生 产 中 ” ( i n p r o d u c t i o n ) 状 态 , 则 表 明 发 生 了 故 障 。 在 这 种 情 况 下 , 启 动 进 程 ( s t a r t u p p r o c e s s ) 将 自 动 从 在 同 一 个 p g _ c o n t r o l 文 件 中 找 到 的 最 新 完 成 的 检 查 点 ( c h e c k p o i n t ) * * 的 起 始 L S N 处 开 始 进 行 恢 复 。 如 果 P G D A T A 目 录 中 包 含 与 备 份 相 关 的 b a c k u p _ l a b e l 文 件 , 则 起 始 L S N 位 置 会 从 该 文 件 中 获 取 。 在 启 动 过 程 中 , 系 统 会 从 指 定 位 置 开 始 , 逐 一 读 取 W A L ( W r i t e A h e a d L o g , 预 写 式 日 志 ) 条 目 。 如 果 数 据 页 的 L S N ( L o g S e q u e n c e N u m b e r , 日 志 序 列 号 ) 小 于 当 前 读 取 到 的 W A L 条 目 的 L S N , 系 统 会 将 该 W A L 条 目 应 用 到 数 据 页 上 。 如 果 数 据 页 的 L S N 已 经 大 于 W A L 条 目 的 L S N , 则 不 应 应 用 该 W A L 条 目 ; 事 实 上 , 也 绝 不 能 应 用 , 因 为 W A L 条 目 被 设 计 为 必 须 严 格 按 顺 序 重 放 。 然 而 , 有 些 W A L 条 目 是 F u l l P a g e I m a g e ( F P I ) 。 这 类 条 目 可 以 应 用 于 页 面 的 任 何 状 态 , 因 为 它 们 会 完 全 覆 盖 页 面 内 容 , 无 论 页 面 原 先 是 什 么 状 态 都 不 重 要 。 因 此 , 这 种 修 改 是 幂 等 的 ( i d e m p o t e n t ) — — 多 次 应 用 不 会 改 变 结 果 另 一 个 幂 等 操 作 的 例 子 是 注 册 事 务 状 态 的 变 更 : 每 个 事 务 的 状 态 在 C L O G ( 事 务 提 交 日 志 ) 中 是 通 过 设 置 特 定 位 来 表 示 的 , 这 种 设 置 不 依 赖 于 原 来 的 位 值 。 因 此 , 不 需 要 在 C L O G 页 面 中 记 录 最 近 变 更 的 L S N ( 日 志 序 列 号 ) , 因 为 日 志 重 放 时 只 要 设 置 一 次 这 些 位 就 够 了 , 重 复 设 置 也 不 会 有 副 作 用 最 后 , 系 统 会 执 行 一 次 c h e c k p o i n t ( 检 查 点 ) , 将 恢 复 后 的 所 有 修 改 持 久 化 到 磁 盘 , 此 时 启 动 进 程 ( s t a r t u p p r o c e s s ) 的 任 务 就 完 成 了 。 W A L 日 志 条 目 会 被 应 用 到 缓 冲 池 ( b u f f e r c a c h e ) 中 的 页 面 上 , 就 像 正 常 运 行 时 对 数 据 页 的 普 通 修 改 一 样 。 文 件 的 恢 复 也 遵 循 类 似 方 式 : 例 如 , 若 某 条 W A L 记 录 表 明 某 个 文 件 应 该 存 在 , 但 实 际 却 缺 失 , 系 统 就 会 重 新 创 建 这 个 文 件 。 一 旦 恢 复 完 成 , 所 有 u n l o g g e d r e l a t i o n s 会 被 它 们 对 应 的 初 始 化 副 本 ( i n i t f o r k ) 覆 盖 。 最 后 , 系 统 会 执 行 一 次 c h e c k p o i n t , 将 恢 复 后 的 所 有 修 改 持 久 化 到 磁 盘 , 此 时 启 动 进 程 ( s t a r t u p p r o c e s s ) 的 任 务 就 完 成 了 在 其 经 典 形 式 中 , 恢 复 过 程 包 含 两 个 阶 段 : r o l l f o r w a r d 阶 段 : 重 放 W A L 日 志 , 重 复 执 行 在 崩 溃 时 丢 失 的 操 作 ; r o l l b a c k 阶 段 : 服 务 器 中 止 那 些 在 故 障 发 生 时 尚 未 提 交 的 事 务 。 在 P o s t g r e S Q L 中 , 向 后 回 滚 是 不 需 要 的 。 恢 复 完 成 后 , C L O G ( 事 务 状 态 日 志 ) 中 对 未 完 成 事 务 既 没 有 提 交 ( c o m m i t ) 标 记 , 也 没 有 中 止 ( a b o r t ) 标 记 ( 这 在 技 术 上 表 示 该 事 务 处 于 活 动 状 态 ) , 但 因 为 可 以 确 定 该 事 务 已 经 不 再 运 行 , 所 以 系 统 会 将 其 视 为 已 中 止 ( a b o r t e d ) 。 我 们 可 以 通 过 强 制 服 务 器 以 “ 立 即 模 式 ” ( i m m e d i a t e m o d e ) 停 止 来 模 拟 故 障 : p o s t g r e s @ l a v m b a r 1 g u v e d 6 : / r o o t $ p g _ c t l s t o p m i m m e d i a t e w a i t i n g f o r s e r v e r t o s h u t d o w n . . . . d o n e s e r v e r s t o p p e d p o s t g r e s @ l a v m b a r 1 g u v e d 6 : / r o o t $ p g _ c o n t r o l d a t a D / h o m e / p o s t g r e s / p g d a t a / | g r e p s t a t e D a t a b a s e c l u s t e r s t a t e : i n p r o d u c t i o n 当 我 们 启 动 服 务 器 时 , 启 动 进 程 会 检 测 到 之 前 发 生 了 故 障 , 因 而 进 入 恢 复 模 式 : 2 0 2 5 0 8 0 4 1 0 : 2 3 : 3 1 . 8 6 0 C S T [ 4 8 7 4 1 4 ] L O G : s t a r t i n g P o s t g r e S Q L 1 9 d e v e l o n x 8 6 _ 6 4 p c l i n u x g n u , c o m p i l e d b y g c c ( U b u n t u 1 1 . 4 . 0 1 u b u n t u 1 ~ 2 2 . 0 4 ) 1 1 . 4 . 0 , 6 4 b i t 2 0 2 5 0 8 0 4 1 0 : 2 3 : 3 1 . 8 6 1 C S T [ 4 8 7 4 1 4 ] L O G : l i s t e n i n g o n I P v 4 a d d r e s s 1 2 7 . 0 . 0 . 1 , p o r t 5 4 3 2 2 0 2 5 0 8 0 4 1 0 : 2 3 : 3 1 . 8 7 8 C S T [ 4 8 7 4 1 4 ] L O G : l i s t e n i n g o n U n i x s o c k e t / t m p / . s . P G S Q L . 5 4 3 2 2 0 2 5 0 8 0 4 1 0 : 2 3 : 3 1 . 9 2 0 C S T [ 4 8 7 4 2 0 ] L O G : d a t a b a s e s y s t e m w a s i n t e r r u p t e d ; l a s t k n o w n u p a t 2 0 2 5 0 8 0 1 0 9 : 3 6 : 1 1 C S T 2 0 2 5 0 8 0 4 1 0 : 2 3 : 3 2 . 0 9 8 C S T [ 4 8 7 4 2 0 ] L O G : d a t a b a s e s y s t e m w a s n o t p r o p e r l y s h u t d o w n ; a u t o m a t i c r e c o v e r y i n p r o g r e s s 2 0 2 5 0 8 0 4 1 0 : 2 3 : 3 2 . 1 2 5 C S T [ 4 8 7 4 2 0 ] L O G : r e d o s t a r t s a t 0 / 0 1 B 7 5 1 6 8 2 0 2 5 0 8 0 4 1 0 : 2 3 : 3 2 . 1 2 5 C S T [ 4 8 7 4 2 0 ] L O G : i n v a l i d r e c o r d l e n g t h a t 0 / 0 1 B 7 5 2 A 8 : e x p e c t e d a t l e a s t 2 4 , g o t 0 2 0 2 5 0 8 0 4 1 0 : 2 3 : 3 2 . 1 2 5 C S T [ 4 8 7 4 2 0 ] L O G : r e d o d o n e a t 0 / 0 1 B 7 5 2 7 0 s y s t e m u s a g e : C P U : u s e r : 0 . 0 0 s , s y s t e m : 0 . 0 0 s , e l a p s e d : 0 . 0 1 s 2 0 2 5 0 8 0 4 1 0 : 2 3 : 3 2 . 1 3 2 C S T [ 4 8 7 4 1 8 ] L O G : c h e c k p o i n t s t a r t i n g : e n d o f r e c o v e r y f a s t w a i t 2 0 2 5 0 8 0 4 1 0 : 2 3 : 3 2 . 1 5 2 C S T [ 4 8 7 4 1 8 ] L O G : c h e c k p o i n t c o m p l e t e : w r o t e 0 b u f f e r s ( 0 . 0 % ) , w r o t e 3 S L R U b u f f e r s ; 0 W A L f i l e ( s ) a d d e d , 0 r e m o v e d , 0 r e c y c l e d ; w r i t e = 0 . 0 0 6 s , s y n c = 0 . 0 0 5 s , t o t a l = 0 . 0 2 2 s ; s y n c f i l e s = 2 , l o n g e s t = 0 . 0 0 5 s , a v e r a g e = 0 . 0 0 3 s ; d i s t a n c e = 0 k B , e s t i m a t e = 0 k B ; l s n = 0 / 0 1 B 7 5 2 A 8 , r e d o l s n = 0 / 0 1 B 7 5 2 A 8 2 0 2 5 0 8 0 4 1 0 : 2 3 : 3 2 . 1 5 5 C S T [ 4 8 7 4 1 4 ] L O G : d a t a b a s e s y s t e m i s r e a d y t o a c c e p t c o n n e c t i o n s 如 果 服 务 器 正 在 正 常 关 闭 , p o s t m a s t e r 会 先 断 开 所 有 客 户 端 连 接 , 然 后 执 行 最 后 一 次 检 查 点 操 作 , 将 所 有 脏 页 ( 未 写 入 磁 盘 的 修 改 页 面 ) 刷 写 到 磁 盘 上 。 看 当 前 的 W A L 位 置 t e s t = # S E L E C T p g _ c u r r e n t _ w a l _ i n s e r t _ l s n ( ) ; p g _ c u r r e n t _ w a l _ i n s e r t _ l s n 0 / 0 1 B 7 5 3 5 8 ( 1 r o w ) 我 们 正 常 停 止 服 务 p o s t g r e s @ l a v m b a r 1 g u v e d 6 : ~ $ p g _ c t l s t o p w a i t i n g f o r s e r v e r t o s h u t d o w n . . . . d o n e s e r v e r s t o p p e d 现 在 的 数 据 库 状 态 : p o s t g r e s @ l a v m b a r 1 g u v e d 6 : ~ $ p g _ c o n t r o l d a t a D / h o m e / p o s t g r e s / p g d a t a / | g r e p s t a t e D a t a b a s e c l u s t e r s t a t e : s h u t d o w n 在 W A L 的 末 尾 , 我 们 看 到 了 表 示 最 后 一 次 c h e c k p o i n t 的 C H E C K P O I N T _ S H U T D O W N 条 目 p o s t g r e s @ l a v m b a r 1 g u v e d 6 : ~ $ p g _ w a l d u m p p / h o m e / p o s t g r e s / p g d a t a / p g _ w a l s 0 / 0 1 B 7 5 3 5 8 r m g r : X L O G l e n ( r e c / t o t ) : 1 1 4 / 1 1 4 , t x : 0 , l s n : 0 / 0 1 B 7 5 3 5 8 , p r e v 0 / 0 1 B 7 5 3 2 0 , d e s c : C H E C K P O I N T _ S H U T D O W N r e d o 0 / 0 1 B 7 5 3 5 8 ; t l i 1 ; p r e v t l i 1 ; f p w t r u e ; w a l _ l e v e l r e p l i c a ; x i d 0 : 7 5 8 ; o i d 2 4 5 7 6 ; m u l t i 1 ; o f f s e t 0 ; o l d e s t x i d 7 4 6 i n D B 1 ; o l d e s t m u l t i 1 i n D B 1 ; o l d e s t / n e w e s t c o m m i t t i m e s t a m p x i d : 0 / 0 ; o l d e s t r u n n i n g x i d 0 ; s h u t d o w n p g _ w a l d u m p : e r r o r : e r r o r i n W A L r e c o r d a t 0 / 0 1 B 7 5 3 5 8 : i n v a l i d r e c o r d l e n g t h a t 0 / 0 1 B 7 5 3 D 0 : e x p e c t e d a t l e a s t 2 4 , g o t 0 p o s t g r e s @ l a v m b a r 1 g u v e d 6 : ~ $ 最 新 的 p g _ w a l d u m p 消 息 显 示 该 工 具 已 读 取 W A L 到 末 尾 。 发 表 在 p o s t g r e s | 标 签 为 p o s t g r e s | 留 下 评 论 C h e c k p o i n t 发 表 于 2 0 2 5 年 8 月 1 日 由 g u j i n f e i 要 在 发 生 故 障 后 恢 复 数 据 一 致 性 ( 即 执 行 恢 复 操 作 ) , P o s t g r e S Q L 需 要 向 前 回 放 W A L 日 志 , 并 将 其 中 表 示 丢 失 变 更 的 记 录 应 用 到 相 应 的 数 据 页 上 。 为 了 确 定 哪 些 变 更 丢 失 了 , 系 统 会 将 磁 盘 上 数 据 页 的 L S N ( 日 志 序 列 号 ) 与 W A L 记 录 的 L S N 进 行 比 较 。 但 问 题 是 , 我 们 应 该 从 哪 里 开 始 恢 复 ? 如 果 恢 复 起 点 选 得 太 晚 , 那 么 在 此 之 前 已 经 写 入 磁 盘 的 数 据 页 将 无 法 接 收 到 所 有 应 有 的 变 更 , 最 终 导 致 无 法 修 复 的 数 据 损 坏 。 而 从 日 志 的 起 始 位 置 开 始 恢 复 又 不 现 实 : 不 仅 无 法 长 期 保 存 如 此 巨 量 的 数 据 , 也 无 法 接 受 过 长 的 恢 复 时 间 。 因 此 , 我 们 需 要 一 个 不 断 向 前 推 进 的 检 查 点 ( c h e c k p o i n t ) , 从 而 可 以 从 这 个 位 置 安 全 地 开 始 恢 复 , 同 时 删 除 所 有 更 早 的 W A L 记 录 。 创 建 检 查 点 最 直 接 的 方 式 是 : 定 期 暂 停 系 统 所 有 操 作 , 并 将 所 有 脏 页 强 制 刷 新 到 磁 盘 。 但 这 种 方 式 显 然 是 不 可 接 受 的 , 因 为 系 统 会 因 此 暂 停 不 定 但 相 当 长 的 时 间 。 正 因 为 如 此 , P o s t g r e S Q L 将 检 查 点 的 过 程 分 摊 到 一 段 时 间 内 完 成 , 实 际 上 构 成 了 一 个 “ 区 间 ” ( i n t e r v a l ) 。 检 查 点 的 执 行 是 由 一 个 特 殊 的 后 台 进 程 负 责 的 , 这 个 进 程 叫 做 c h e c k p o i n t e r ( 检 查 点 进 程 ) 检 查 点 开 始 ( C h e c k p o i n t s t a r t ) : c h e c k p o i n t e r 进 程 会 将 所 有 可 以 立 即 写 入 磁 盘 的 内 容 进 行 刷 新 , 包 括 : C L O G ( 提 交 日 志 ) 中 的 事 务 状 态 信 息 , 子 事 务 的 元 数 据 , 以 及 其 他 一 些 结 构 。 检 查 点 执 行 过 程 ( C h e c k p o i n t e x e c u t i o n ) : 检 查 点 执 行 的 大 部 分 时 间 都 耗 费 在 将 脏 页 ( d i r t y p a g e s ) 刷 新 到 磁 盘 上 。 首 先 , 在 检 查 点 开 始 时 , 所 有 当 时 处 于 “ 脏 ” 状 态 的 缓 冲 区 ( b u f f e r ) 的 页 头 会 被 打 上 一 个 特 殊 标 记 ( t a g ) 。 这 个 过 程 非 常 迅 速 , 因 为 它 不 涉 及 任 何 I / O 操 作 , 只 是 内 存 中 的 标 记 设 置 。 随 后 , c h e c k p o i n t e r 会 遍 历 所 有 缓 冲 区 , 并 将 带 有 该 标 记 的 页 写 入 磁 盘 。 这 些 页 不 会 被 驱 逐 出 缓 存 ( 即 它 们 仍 然 保 留 在 缓 冲 池 中 ) , 只 是 被 刷 盘 , 因 此 在 这 个 过 程 中 可 以 忽 略 使 用 计 数 ( u s a g e c o u n t ) 和 p i n 计 数 ( p i n c o u n t ) 。 页 面 按 I D 顺 序 处 理 , 以 尽 可 能 避 免 随 机 写 入 。 为 实 现 更 好 的 负 载 均 衡 , P o s t g r e S Q L 会 在 多 个 表 空 间 之 间 交 替 进 行 写 入 ( 因 为 它 们 可 能 位 于 不 同 的 物 理 设 备 上 ) 。 后 端 进 程 ( b a c k e n d ) 也 可 以 将 打 了 标 记 的 缓 冲 页 写 入 磁 盘 — — 如 果 它 们 先 访 问 到 了 这 些 页 的 话 。 无 论 由 谁 写 入 , 缓 冲 区 的 标 记 都 会 在 这 个 阶 段 被 清 除 , 因 此 每 个 缓 冲 页 在 此 次 检 查 点 中 只 会 被 写 一 次 。 很 自 然 地 , 在 c h e c k p o i n t 进 行 期 间 , 缓 冲 区 中 的 页 面 仍 然 可 能 被 修 改 。 但 由 于 这 些 新 的 脏 页 没 有 被 打 上 标 记 , c h e c k p o i n t e r 会 忽 略 它 们 。 检 查 点 完 成 : 当 在 检 查 点 开 始 时 被 标 记 为 脏 的 所 有 缓 冲 页 都 已 经 写 入 磁 盘 后 , 检 查 点 就 被 视 为 完 成 。 从 现 在 起 ( 但 不 是 在 此 之 前 ! ) , 本 次 检 查 点 的 起 始 位 置 将 被 作 为 恢 复 操 作 的 新 起 点 。 在 这 个 点 之 前 写 入 的 所 有 W A L 日 志 都 不 再 需 要 了 。 T i m e → L S N : ┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┐ │ │ 0 ─ ─ ┴ ─ ─ ─ ─ ─ ┬ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┬ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┬ ─ ─ ─ ─ ─ ─ ─ ┘ │ │ │ ▼ ▼ ▼ 1 2 3 ✔ 若 3 写 入 成 功 : 恢 复 可 从 2 开 始 ( 即 r e d o = 2 ) ✘ 若 3 写 入 失 败 : 恢 复 只 能 从 1 开 始 ( 上 次 c h e c k p o i n t ) 说 明 : 1 : 上 一 次 c h e c k p o i n t 的 起 始 L S N ( r e d o ) 2 : 本 次 c h e c k p o i n t 开 始 时 w a l l o g 最 大 L S N ( 新 的 r e d o 点 ) 3 : 本 次 c h e c k p o i n t 完 成 后 写 入 W A L 的 记 录 ( 记 录 了 r e d o = 2 ) 最 后 , c h e c k p o i n t e r 进 程 会 创 建 一 条 表 示 检 查 点 完 成 的 W A L 记 录 , 并 在 其 中 标 明 此 次 检 查 点 的 起 始 L S N 。 由 于 检 查 点 在 开 始 时 不 会 写 入 任 何 日 志 , 因 此 这 个 起 始 L S N 可 以 是 任 意 类 型 的 W A L 记 录 所 属 的 L S N 。 此 外 , P G D A T A / g l o b a l / p g _ c o n t r o l 文 件 也 会 被 更 新 , 以 指 向 最 近 完 成 的 检 查 点 。 ( 在 此 过 程 完 成 之 前 , p g _ c o n t r o l 始 终 保 留 着 上 一 个 检 查 点 的 信 息 。 ) E x a m p l e : = > U P D A T E b i g S E T s = F O O ; = > S E L E C T c o u n t ( * ) F R O M p g _ b u f f e r c a c h e W H E R E i s d i r t y ; c o u n t − − − − − − − 4 1 1 9 ( 1 r o w ) = > S E L E C T p g _ c u r r e n t _ w a l _ i n s e r t _ l s n ( ) ; p g _ c u r r e n t _ w a l _ i n s e r t _ l s n − − − − − − − − − − − − − − − − − − − − − − − − − − − 0 / 3 E 7 E F 7 E 0 ( 1 r o w ) = > C H E C K P O I N T ; = > S E L E C T c o u n t ( * ) F R O M p g _ b u f f e r c a c h e W H E R E i s d i r t y ; c o u n t − − − − − − − 0 ( 1 r o w ) = > S E L E C T p g _ c u r r e n t _ w a l _ i n s e r t _ l s n ( ) ; p g _ c u r r e n t _ w a l _ i n s e r t _ l s n − − − − − − − − − − − − − − − − − − − − − − − − − − − 0 / 3 E 7 E F 8 9 0 ( 1 r o w ) 最 新 的 W A L 条 目 与 检 查 点 完 成 有 关 ( C H E C K P O I N T _ O N L I N E ) 。 该 检 查 点 的 起 始 L S N 出 现 在 r e d o 之 后 ; 这 个 位 置 对 应 的 是 检 查 点 开 始 时 最 新 插 入 的 W A L 条 目 。 同 样 的 信 息 也 可 以 在 p g _ c o n t r o l 文 件 中 找 到 。 p o s t g r e s $ / u s r / l o c a l / p g s q l / b i n / p g _ c o n t r o l d a t a \ \ D / u s r / l o c a l / p g s q l / d a t a | e g r e p L a t e s t . * l o c a t i o n L a t e s t c h e c k p o i n t l o c a t i o n : 0 / 3 E 7 E F 8 1 8 L a t e s t c h e c k p o i n t s R E D O l o c a t i o n : 0 / 3 E 7 E F 7 E 0 发 表 在 p o s t g r e s | 标 签 为 p o s t g r e s | 留 下 评 论 H o w t o u s e a s a n i n l i n u x 发 表 于 2 0 2 5 年 7 月 3 0 日 由 g u j i n f e i 1 . 安 装 编 译 工 具 A S a n 是 G C C 和 C l a n g 内 建 的 功 能 , 无 需 额 外 安 装 A S a n , 只 需 要 你 的 编 译 器 支 持 即 可 。 G C C ≥ 4 . 8 / C l a n g ≥ 3 . 1 就 支 持 A S a n r o o t @ l a v m b a r 1 g u v e d 6 : ~ # c l a n g v e r s i o n U b u n t u c l a n g v e r s i o n 1 4 . 0 . 0 1 u b u n t u 1 . 1 T a r g e t : x 8 6 _ 6 4 p c l i n u x g n u T h r e a d m o d e l : p o s i x I n s t a l l e d D i r : / u s r / b i n r o o t @ l a v m b a r 1 g u v e d 6 : ~ # g c c v e r s i o n g c c ( U b u n t u 1 1 . 4 . 0 1 u b u n t u 1 ~ 2 2 . 0 4 ) 1 1 . 4 . 0 C o p y r i g h t ( C ) 2 0 2 1 F r e e S o f t w a r e F o u n d a t i o n , I n c . T h i s i s f r e e s o f t w a r e ; s e e t h e s o u r c e f o r c o p y i n g c o n d i t i o n s . T h e r e i s N O w a r r a n t y ; n o t e v e n f o r M E R C H A N T A B I L I T Y o r F I T N E S S F O R A P A R T I C U L A R P U R P O S E 2 . 编 译 时 开 启 A S a n 使 用 g c c g c c f s a n i t i z e = a d d r e s s g y o u r _ f i l e . c o y o u r _ p r o g r a m 使 用 c m a k e # 编 译 阶 段 ( C / C + + ) 加 A S a n 插 桩 s e t ( C M A K E _ C _ F L A G S $ f s a n i t i z e = a d d r e s s f n o o m i t f r a m e p o i n t e r g ) s e t ( C M A K E _ C X X _ F L A G S $ f s a n i t i z e = a d d r e s s f n o o m i t f r a m e p o i n t e r g ) # 链 接 阶 段 链 接 l i b a s a n s e t ( C M A K E _ E X E _ L I N K E R _ F L A G S $ f s a n i t i z e = a d d r e s s ) s e t ( C M A K E _ S H A R E D _ L I N K E R _ F L A G S $ f s a n i t i z e = a d d r e s s ) # o r c m a k e D C M A K E _ C _ F L A G S = f s a n i t i z e = a d d r e s s f n o o m i t f r a m e p o i n t e r g \ \ D C M A K E _ E X E _ L I N K E R _ F L A G S = f s a n i t i z e = a d d r e s s \ \ D C M A K E _ B U I L D _ T Y P E = D e b u g \ \ . . 使 用 M a k e f i l e 可 以 在 C F L A G S 中 添 加 : C F L A G S + = f s a n i t i z e = a d d r e s s g f n o o m i t f r a m e p o i n t e r L D F L A G S + = f s a n i t i z e = a d d r e s s 使 用 L S A N ( 泄 漏 检 测 ) G C C 和 C l a n g 中 A S a n 自 动 包 含 L e a k S a n i t i z e r ( L S a n ) , 但 某 些 情 况 下 要 确 保 : f s a n i t i z e = a d d r e s s f n o o m i t f r a m e p o i n t e r 加 上 f n o o m i t f r a m e p o i n t e r 可 以 让 调 用 栈 更 完 整 。 3 . 运 行 程 序 编 译 好 的 程 序 可 以 直 接 运 行 : . / y o u r _ p r o g r a m 4 . 设 置 环 境 变 量 e x p o r t A S A N _ O P T I O N S = d e t e c t _ l e a k s = 1 : h a l t _ o n _ e r r o r = 0 : s y m b o l i z e = 1 : q u a r a n t i n e _ s i z e = 1 0 2 4 : l o g _ p a t h = / h o m e / p o s t g r e s / a s a n / a s a n . l o g 5 . E x a m p l e = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = 7 9 1 2 6 5 = = E R R O R : L e a k S a n i t i z e r : d e t e c t e d m e m o r y l e a k s D i r e c t l e a k o f 1 0 2 4 b y t e ( s ) i n 1 o b j e c t ( s ) a l l o c a t e d f r o m : # 0 0 x 7 f 6 f c e e 6 5 8 8 7 i n _ _ i n t e r c e p t o r _ m a l l o c . . / . . / . . / . . / s r c / l i b s a n i t i z e r / a s a n / a s a n _ m a l l o c _ l i n u x . c p p : 1 4 5 # 1 0 x 5 5 a d c d f e e 8 7 a i n m a i n / h o m e / p o s t g r e s / c o d e s / s a m p l e / e p o l l _ s e r v e r . c : 5 4 # 2 0 x 7 f 6 f c e b b 1 d 8 f i n _ _ l i b c _ s t a r t _ c a l l _ m a i n . . / s y s d e p s / n p t l / l i b c _ s t a r t _ c a l l _ m a i n . h : 5 8 S U M M A R Y : A d d r e s s S a n i t i z e r : 1 0 2 4 b y t e ( s ) l e a k e d i n 1 a l l o c a t i o n ( s ) . 发 表 在 d e b u g | 标 签 为 g d b | 留 下 评 论 W A L S t r u c t u r e ( L o g i c a l S t r u c t u r e ) 发 表 于 2 0 2 5 年 7 月 3 0 日 由 g u j i n f e i 其 逻 辑 结 构 而 言 , W A L 可 被 描 述 为 变 长 日 志 条 目 流 。 每 个 条 目 都 包 含 有 关 特 定 操 作 的 一 些 数 据 , 并 以 标 准 标 头 作 为 前 缀 。 该 标 头 提 供 的 信 息 包 括 但 不 限 于 : 与 条 目 ( e n t r y ) 相 关 的 事 务 I D 解 释 条 目 的 资 源 管 理 器 用 于 检 测 数 据 损 坏 的 校 验 和 条 目 长 度 对 前 一 个 W A L 条 目 的 引 用 W A L 通 常 是 按 正 向 读 取 的 , 但 某 些 工 具 ( 例 如 p g _ r e w i n d ) 可 能 会 反 向 扫 描 它 W A L 数 据 本 身 可 以 具 有 不 同 的 格 式 和 含 义 。 例 如 , 它 可 能 是 一 段 页 片 段 ( p a g e f r a g m e n t ) , 需 要 替 换 某 个 页 面 中 指 定 偏 移 处 的 一 部 分 内 容 。 相 应 的 资 源 管 理 器 ( r e s o u r c e m a n a g e r ) 必 须 知 道 如 何 解 析 并 重 放 这 一 特 定 条 目 。 针 对 表 、 各 种 索 引 类 型 、 事 务 状 态 以 及 其 他 实 体 , P o s t g r e S Q L 都 有 独 立 的 资 源 管 理 器 来 处 理 它 们 各 自 的 W A L 。 W A L 文 件 会 占 用 服 务 器 共 享 内 存 中 的 特 殊 缓 冲 区 。 用 于 W A L 的 缓 存 大 小 由 参 数 w a l _ b u f f e r s 决 定 。 默 认 情 况 下 , 这 个 大 小 会 自 动 设 为 总 缓 冲 区 缓 存 ( b u f f e r c a c h e ) 大 小 的 1 / 3 2 。 W A L 缓 存 与 缓 冲 区 缓 存 ( b u f f e r c a c h e ) 非 常 相 似 , 但 它 通 常 以 环 形 缓 冲 区 ( r i n g b u f f e r ) 的 方 式 运 行 : 新 的 日 志 条 目 被 添 加 到 缓 冲 区 的 头 部 , 而 旧 的 条 目 则 从 尾 部 开 始 写 入 磁 盘 。 如 果 W A L 缓 存 太 小 , 就 会 比 必 要 的 更 频 繁 地 进 行 磁 盘 同 步 操 作 。 在 系 统 负 载 较 低 的 情 况 下 , 插 入 位 置 ( 即 缓 冲 区 的 头 部 ) 几 乎 总 是 与 已 经 写 入 磁 盘 的 条 目 位 置 ( 即 缓 冲 区 的 尾 部 ) 保 持 一 致 。 d e m o = # S E L E C T p g _ c u r r e n t _ w a l _ l s n ( ) , p g _ c u r r e n t _ w a l _ i n s e r t _ l s n ( ) ; p g _ c u r r e n t _ w a l _ l s n | p g _ c u r r e n t _ w a l _ i n s e r t _ l s n + 1 / E B D C 2 C D 8 | 1 / E B D C 2 C D 8 ( 1 r o w 在 P o s t g r e S Q L 1 0 之 前 , 所 有 函 数 名 称 都 包 含 X L O G 首 字 母 缩 写 词 , 而 不 是 W A L 。 为 了 引 用 某 个 特 定 的 日 志 条 目 , P o s t g r e S Q L 使 用 一 种 特 殊 的 数 据 类 型 : p g _ l s n ( 日 志 序 列 号 , L o g S e q u e n c e N u m b e r , 简 称 L S N ) 。 它 表 示 从 W A L 起 始 位 置 开 始 , 以 字 节 为 单 位 的 6 4 位 偏 移 量 。 L S N 通 常 以 两 个 十 六 进 制 数 字 表 示 , 中 间 用 斜 杠 ( / ) 分 隔 。 我 们 创 建 一 个 表 : d e m o = # C R E A T E T A B L E w a l ( i d i n t e g e r ) ; C R E A T E T A B L E d e m o = # I N S E R T I N T O w a l V A L U E S ( 1 ) ; I N S E R T 0 1 启 动 一 个 事 务 , 并 记 录 下 当 前 W A L 插 入 位 置 的 L S N 。 d e m o = # b e g i n ; B E G I N d e m o = * # S E L E C T p g _ c u r r e n t _ w a l _ i n s e r t _ l s n ( ) ; p g _ c u r r e n t _ w a l _ i n s e r t _ l s n 1 / E B D D A 4 F 8 ( 1 r o w ) 现 在 执 行 一 个 任 意 命 令 , 例 如 , 更 新 一 行 数 据 。 d e m o = * # U P D A T E w a l S E T i d = i d + 1 ; U P D A T E 1 页 面 的 修 改 是 在 R A M 中 的 缓 冲 区 缓 存 ( b u f f e r c a c h e ) 中 进 行 的 。 这 个 更 改 也 会 记 录 在 位 于 R A M 中 的 W A L 页 面 中 。 因 此 , 插 入 的 L S N 会 向 前 推 进 。 d e m o = * # S E L E C T p g _ c u r r e n t _ w a l _ i n s e r t _ l s n ( ) ; p g _ c u r r e n t _ w a l _ i n s e r t _ l s n 1 / E B D D A 5 E 8 ( 1 r o w ) 为 了 确 保 修 改 后 的 数 据 页 是 在 对 应 的 W A L 条 目 之 后 才 被 刷 新 到 磁 盘 , 数 据 页 的 页 头 会 存 储 该 页 最 新 相 关 的 W A L 条 目 的 L S N 。 你 可 以 使 用 p a g e i n s p e c t 插 件 查 看 这 个 L S N 。 d e m o = * # S E L E C T l s n F R O M p a g e _ h e a d e r ( g e t _ r a w _ p a g e ( w a l , 0 ) ) ; l s n 1 / E B D D A 5 B 0 ( 1 r o w ) 整 个 数 据 库 集 群 只 有 一 个 W A L , 并 且 新 的 条 目 会 不 断 地 追 加 到 其 中 。 因 此 , 存 储 在 数 据 页 中 的 L S N 可 能 会 比 之 前 某 个 时 刻 p g _ c u r r e n t _ w a l _ i n s e r t _ l s n ( ) 返 回 的 L S N 更 小 。 但 如 果 系 统 中 没 有 发 生 任 何 操 作 , 这 两 个 数 值 将 会 相 同 。 现 在 提 交 这 个 事 务 d e m o = * # c o m m i t ; C O M M I T c o m m i t 操 作 同 样 被 日 志 记 录 , 同 时 i n s e r t l s n 再 次 改 变 d e m o = # S E L E C T p g _ c u r r e n t _ w a l _ i n s e r t _ l s n ( ) ; p g _ c u r r e n t _ w a l _ i n s e r t _ l s n 1 / E B D D C 5 0 0 ( 1 r o w ) 为 了 确 保 某 个 C L o g 页 在 对 应 的 W A L 条 目 写 入 磁 盘 之 前 不 会 被 刷 新 到 磁 盘 , 必 须 追 踪 该 页 所 对 应 的 最 新 W A L 条 目 的 L S N 。 但 这 种 L S N 信 息 是 保 存 在 内 存 ( R A M ) 中 的 , 而 不 是 存 在 C L o g 页 本 身 某 个 时 刻 , W A L 日 志 条 目 会 被 写 入 磁 盘 ; 此 时 , 才 能 把 对 应 的 C L O G 和 数 据 页 从 缓 存 中 淘 汰 ( e v i c t ) 。 如 果 必 须 更 早 淘 汰 这 些 缓 存 页 , 那 么 系 统 会 发 现 这 一 点 , 并 会 先 强 制 将 对 应 的 W A L 条 目 写 入 磁 盘 。 如 果 你 知 道 两 个 L S N ( 日 志 序 列 号 ) 的 位 置 , 就 可 以 通 过 简 单 地 相 减 计 算 这 两 者 之 间 的 W A L 日 志 大 小 ( 以 字 节 为 单 位 ) 。 只 需 将 它 们 转 换 为 p g _ l s n 类 型 即 可 进 行 减 法 运 算 d e m o = # d e m o = # S E L E C T 1 / E B D D C 5 0 0 : : p g _ l s n 1 / E B D D A 4 F 8 : : p g _ l s n ; ? c o l u m n ? 8 2 0 0 ( 1 r o w ) 在 这 个 具 体 案 例 中 , 更 新 ( u p d a t e ) 和 提 交 ( c o m m i t ) 操 作 相 关 的 W A L 条 目 大 约 占 用 了 几 千 字 节 。 可 以 用 相 同 的 方 法 , 估 算 某 个 工 作 负 载 在 单 位 时 间 内 产 生 的 W A L 日 志 量 。 这 些 信 息 对 设 置 检 查 点 ( c h e c k p o i n t ) 参 数 非 常 重 要 。 发 表 在 p o s t g r e s | 标 签 为 p o s t g r e s | 留 下 评 论 W A L S t r u c t u r e ( P h y s i c a l S t r u c t u r e ) 发 表 于 2 0 2 5 年 7 月 3 0 日 由 g u j i n f e i 在 磁 盘 上 , W A L 被 存 储 在 P G D A T A / p g _ w a l 目 录 中 , 以 单 独 的 文 件 ( 或 称 为 段 ) 的 形 式 存 在 。 它 们 的 大 小 由 只 读 参 数 w a l _ s e g m e n t _ s i z e 指 示 。 对 于 高 负 载 系 统 , 增 加 段 大 小 可 能 是 有 意 义 的 , 因 为 这 可 以 减 少 开 销 。 但 这 个 设 置 只 能 在 集 群 初 始 化 时 修 改 ( 通 过 i n i t d b w a l s e g s i z e ) 。 W A L 记 录 会 写 入 当 前 文 件 , 直 到 该 文 件 空 间 耗 尽 ; 此 时 P o s t g r e S Q L 会 开 始 写 入 一 个 新 文 件 。 我 们 可 以 确 定 某 条 记 录 位 于 哪 个 文 件 中 , 以 及 它 在 该 文 件 起 始 位 置 的 偏 移 量 。 d e m o = # S E L E C T f i l e _ n a m e , u p p e r ( t o _ h e x ( f i l e _ o f f s e t ) ) f i l e _ o f f s e t F R O M p g _ w a l f i l e _ n a m e _ o f f s e t ( 1 / E B D D C 5 0 0 ) ; f i l e _ n a m e | f i l e _ o f f s e t + 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 E B | D D C 5 0 0 ( 1 r o w ) 该 文 件 的 名 称 由 两 部 分 组 成 。 最 高 的 八 位 十 六 进 制 数 字 ( 4 个 字 节 ) 表 示 用 于 从 备 份 中 恢 复 的 时 间 线 ( t i m e l i n e ) , 而 其 余 部 分 ( 8 个 字 节 ) 表 示 L S N ( 日 志 序 列 号 ) 的 高 位 比 特 ( L S N 的 低 位 比 特 则 体 现 在 f i l e _ o f f s e t 字 段 中 ) 。 要 查 看 当 前 的 W A L 文 件 , 可 以 调 用 以 下 函 数 : d e m o = # S E L E C T * F R O M p g _ l s _ w a l d i r ( ) W H E R E n a m e = 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 E B ; n a m e | s i z e | m o d i f i c a t i o n + + 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 E B | 1 6 7 7 7 2 1 6 | 2 0 2 5 0 7 2 8 1 8 : 4 1 : 4 9 + 0 8 ( 1 r o w ) 现 在 让 我 们 使 用 p g _ w a l d u m p 工 具 查 看 新 创 建 的 W A L 记 录 的 头 部 信 息 。 该 工 具 既 可 以 按 L S N 范 围 ( 就 像 这 个 例 子 中 那 样 ) 过 滤 W A L 记 录 , 也 可 以 按 特 定 的 事 务 I D 过 滤 。 p g _ w a l d u m p 工 具 应 以 p o s t g r e s 用 户 身 份 运 行 , 因 为 它 需 要 访 问 磁 盘 上 的 W A L 文 件 。 p o s t g r e s @ l a v m b a r 1 g u v e d 6 : / r o o t $ p g _ w a l d u m p p / u s r / l o c a l / p g s q l / d a t a / p g _ w a l s 1 / E B D D A 4 F 8 e 1 / E B D D C 5 0 0 r m g r : X L O G l e n ( r e c / t o t ) : 4 9 / 1 0 9 , t x : 0 , l s n : 1 / E B D D A 4 F 8 , p r e v 1 / E B D D A 4 C 0 , d e s c : F P I _ F O R _ H I N T , b l k r e f # 0 : r e l 1 6 6 3 / 3 2 8 1 4 / 3 7 6 8 3 3 b l k 0 F P W r m g r : H e a p l e n ( r e c / t o t ) : 6 9 / 6 9 , t x : 9 6 1 , l s n : 1 / E B D D A 5 6 8 , p r e v 1 / E B D D A 4 F 8 , d e s c : H O T _ U P D A T E o l d _ x m a x : 9 6 1 , o l d _ o f f : 1 , o l d _ i n f o b i t s : [ ] , f l a g s : 0 x 4 0 , n e w _ x m a x : 0 , n e w _ o f f : 2 , b l k r e f # 0 : r e l 1 6 6 3 / 3 2 8 1 4 / 3 7 6 8 3 3 b l k 0 r m g r : S t a n d b y l e n ( r e c / t o t ) : 5 4 / 5 4 , t x : 0 , l s n : 1 / E B D D A 5 B 0 , p r e v 1 / E B D D A 5 6 8 , d e s c : R U N N I N G _ X A C T S n e x t X i d 9 6 2 l a t e s t C o m p l e t e d X i d 9 6 0 o l d e s t R u n n i n g X i d 9 6 1 ; 1 x a c t s : 9 6 1 r m g r : X L O G l e n ( r e c / t o t ) : 4 9 / 7 7 7 7 , t x : 9 6 1 , l s n : 1 / E B D D A 5 E 8 , p r e v 1 / E B D D A 5 B 0 , d e s c : F P I _ F O R _ H I N T , b l k r e f # 0 : r e l 1 6 6 3 / 3 2 8 1 4 / 2 6 9 1 b l k 1 9 F P W r m g r : S t a n d b y l e n ( r e c / t o t ) : 5 4 / 5 4 , t x : 0 , l s n : 1 / E B D D C 4 6 8 , p r e v 1 / E B D D A 5 E 8 , d e s c : R U N N I N G _ X A C T S n e x t X i d 9 6 2 l a t e s t C o m p l e t e d X i d 9 6 0 o l d e s t R u n n i n g X i d 9 6 1 ; 1 x a c t s : 9 6 1 r m g r : T r a n s a c t i o n l e n ( r e c / t o t ) : 3 4 / 3 4 , t x : 9 6 1 , l s n : 1 / E B D D C 4 A 0 , p r e v 1 / E B D D C 4 6 8 , d e s c : C O M M I T 2 0 2 5 0 7 2 8 1 6 : 0 4 : 5 5 . 3 2 5 9 7 9 C S T r m g r : S t a n d b y l e n ( r e c / t o t ) : 5 0 / 5 0 , t x : 0 , l s n : 1 / E B D D C 4 C 8 , p r e v 1 / E B D D C 4 A 0 , d e s c : R U N N I N G _ X A C T S n e x t X i d 9 6 2 l a t e s t C o m p l e t e d X i d 9 6 1 o l d e s t R u n n i n g X i d 9 6 2 p o s t g r e s @ l a v m b a r 1 g u v e d 6 : / r o o t $ 1 . F P I _ F O R _ H I N T ( 全 页 镜 像 , 为 H i n t B i t ) r m g r : X L O G l e n ( r e c / t o t ) : 4 9 / 1 0 9 , t x : 0 , l s n : 1 / E B D D A 4 F 8 , p r e v 1 / E B D D A 4 C 0 , d e s c : F P I _ F O R _ H I N T , b l k r e f # 0 : r e l 1 6 6 3 / 3 2 8 1 4 / 3 7 6 8 3 3 b l k 0 F P W r m g r : X L O G : 表 示 这 是 X L O G ( 日 志 ) 资 源 管 理 器 记 录 。 F P I _ F O R _ H I N T : 全 页 镜 像 用 于 设 置 H i n t b i t 。 为 了 避 免 H i n t b i t 修 改 没 有 日 志 而 导 致 数 据 页 c h e c k s u m 校 验 失 败 , P o s t g r e S Q L 会 把 整 个 页 面 写 入 W A L ( F P W , F u l l P a g e W r i t e ) 。 r e l 1 6 6 3 / 3 2 8 1 4 / 3 7 6 8 3 3 b l k 0 : 指 的 是 某 个 表 的 第 0 页 ( b l o c k 0 ) , 文 件 标 识 符 是 : 数 据 库 O I D = 3 2 8 1 4 , 表 O I D = 3 7 6 8 3 3 。 t x : 0 : 不 是 某 个 事 务 产 生 的 , 而 是 后 台 h i n t b i t 的 写 入 。 F P W : 全 页 写 入 。 2 . H O T _ U P D A T E ( 堆 表 中 的 更 新 ) r m g r : H e a p l e n ( r e c / t o t ) : 6 9 / 6 9 , t x : 9 6 1 , l s n : 1 / E B D D A 5 6 8 , p r e v 1 / E B D D A 4 F 8 , d e s c : H O T _ U P D A T E o l d _ x m a x : 9 6 1 , o l d _ o f f : 1 , o l d _ i n f o b i t s : [ ] , f l a g s : 0 x 4 0 , n e w _ x m a x : 0 , n e w _ o f f : 2 , b l k r e f # 0 : r e l 1 6 6 3 / 3 2 8 1 4 / 3 7 6 8 3 3 b l k 0 r m g r : H e a p : 这 是 H e a p 表 的 更 新 记 录 。 H O T _ U P D A T E : 表 示 使 用 了 “ H e a p O n l y T u p l e ” 优 化 , 即 更 新 没 有 修 改 索 引 字 段 , 所 以 新 旧 t u p l e 都 在 一 个 页 里 。 t x : 9 6 1 : 由 事 务 9 6 1 发 起 。 o l d _ o f f : 1 n e w _ o f f : 2 : 第 1 个 t u p l e 更 新 为 第 2 个 位 置 的 t u p l e 。 o l d _ x m a x : 9 6 1 : 原 始 t u p l e 的 删 除 者 是 当 前 事 务 。 n e w _ x m a x : 0 : 新 t u p l e 尚 未 被 删 除 。 r e l 1 6 6 3 / 3 2 8 1 4 / 3 7 6 8 3 3 b l k 0 : 仍 然 是 这 个 表 第 0 页 3 . R U N N I N G _ X A C T S ( 记 录 活 跃 事 务 信 息 ) r m g r : S t a n d b y l e n ( r e c / t o t ) : 5 4 / 5 4 , t x : 0 , l s n : 1 / E B D D A 5 B 0 , p r e v 1 / E B D D A 5 6 8 , d e s c : R U N N I N G _ X A C T S n e x t X i d 9 6 2 l a t e s t C o m p l e t e d X i d 9 6 0 o l d e s t R u n n i n g X i d 9 6 1 ; 1 x a c t s : 9 6 1 r m g r : S t a n d b y : 这 是 为 备 机 记 录 活 跃 事 务 信 息 。 n e x t X i d : 9 6 2 : 下 一 个 将 被 分 配 的 事 务 I D 。 l a t e s t C o m p l e t e d X i d : 9 6 0 : 最 后 一 个 完 成 的 事 务 。 o l d e s t R u n n i n g X i d : 9 6 1 : 最 老 的 活 跃 事 务 。 1 x a c t s : 9 6 1 : 当 前 只 有 一 个 活 跃 事 务 9 6 1 。 这 类 记 录 有 助 于 逻 辑 解 码 和 备 机 恢 复 时 判 断 哪 些 事 务 是 已 提 交 、 未 提 交 。 4 . F P I _ F O R _ H I N T ( 另 一 个 h i n t b i t 的 全 页 写 入 ) r m g r : X L O G l e n ( r e c / t o t ) : 4 9 / 7 7 7 7 , t x : 9 6 1 , l s n : 1 / E B D D A 5 E 8 , p r e v 1 / E B D D A 5 B 0 , d e s c : F P I _ F O R _ H I N T , b l k r e f # 0 : r e l 1 6 6 3 / 3 2 8 1 4 / 2 6 9 1 b l k 1 9 F P W 又 是 一 个 F P I _ F O R _ H I N T , 但 这 次 是 针 对 : r e l 1 6 6 3 / 3 2 8 1 4 / 2 6 9 1 b l k 1 9 : 另 外 一 个 表 的 第 1 9 页 。 注 意 这 次 记 录 总 长 度 达 到 了 7 7 7 7 字 节 , 很 可 能 是 完 整 的 数 据 页 写 入 ( 通 常 8 K B ) 。 5 . R U N N I N G _ X A C T S ( 再 次 记 录 活 跃 事 务 ) r m g r : S t a n d b y l e n ( r e c / t o t ) : 5 4 / 5 4 , t x : 0 , l s n : 1 / E B D D C 4 6 8 , p r e v 1 / E B D D A 5 E 8 , d e s c : R U N N I N G _ X A C T S n e x t X i d 9 6 2 l a t e s t C o m p l e t e d X i d 9 6 0 o l d e s t R u n n i n g X i d 9 6 1 ; 1 x a c t s : 9 6 1 和 之 前 类 似 , 再 次 记 录 活 跃 事 务 9 6 1 。 6 . C O M M I T ( 事 务 提 交 ) r m g r : T r a n s a c t i o n l e n ( r e c / t o t ) : 3 4 / 3 4 , t x : 9 6 1 , l s n : 1 / E B D D C 4 A 0 , p r e v 1 / E B D D C 4 6 8 , d e s c : C O M M I T 2 0 2 5 0 7 2 8 1 6 : 0 4 : 5 5 . 3 2 5 9 7 9 C S T 事 务 9 6 1 正 式 提 交 。 提 交 时 间 是 2 0 2 5 0 7 2 8 1 6 : 0 4 : 5 5 。 7 . R U N N I N G _ X A C T S ( 提 交 后 活 跃 事 务 清 空 ) r m g r : S t a n d b y l e n ( r e c / t o t ) : 5 0 / 5 0 , t x : 0 , l s n : 1 / E B D D C 4 C 8 , p r e v 1 / E B D D C 4 A 0 , d e s c : R U N N I N G _ X A C T S n e x t X i d 9 6 2 l a t e s t C o m p l e t e d X i d 9 6 1 o l d e s t R u n n i n g X i d 9 6 2 事 务 9 6 1 已 完 成 , 现 在 没 有 活 跃 事 务 了 。 n e x t X i d 为 9 6 2 , 准 备 分 配 给 下 一 个 事 务 。 查 看 日 志 文 件 路 径 d e m o = # S E L E C T p g _ r e l a t i o n _ f i l e p a t h ( w a l ) ; p g _ r e l a t i o n _ f i l e p a t h b a s e / 3 2 8 1 4 / 3 7 6 8 3 3 ( 1 r o w ) 发 表 在 p o s t g r e s | 标 签 为 p o s t g r e s | 留 下 评 论 L o g g i n g 发 表 于 2 0 2 5 年 7 月 2 7 日 由 g u j i n f e i 在 发 生 故 障 ( 例 如 停 电 、 操 作 系 统 错 误 或 数 据 库 服 务 器 崩 溃 ) 时 , R A M 中 的 所 有 内 容 都 将 丢 失 ; 只 有 写 入 磁 盘 的 数 据 会 保 留 下 来 。 要 在 故 障 后 启 动 服 务 器 , 您 必 须 恢 复 数 据 一 致 性 。 如 果 磁 盘 本 身 已 损 坏 , 则 必 须 通 过 备 份 恢 复 来 解 决 相 同 的 问 题 。 理 论 上 , 您 可 以 始 终 保 持 磁 盘 上 的 数 据 一 致 性 。 但 实 际 上 , 这 意 味 着 服 务 器 必 须 不 断 地 将 随 机 页 面 写 入 磁 盘 ( 尽 管 顺 序 写 入 成 本 更 低 ) , 并 且 此 类 写 入 的 顺 序 必 须 保 证 在 任 何 特 定 时 刻 都 不 会 损 害 一 致 性 ( 这 很 难 实 现 , 尤 其 是 当 您 处 理 复 杂 的 索 引 结 构 时 ) 。 与 大 多 数 数 据 库 系 统 一 样 , P o s t g r e S Q L 采 用 了 一 种 不 同 的 方 法 。 服 务 器 运 行 时 , 部 分 当 前 数 据 仅 存 在 于 R A M 中 , 其 写 入 永 久 存 储 的 操 作 被 推 迟 。 因 此 , 服 务 器 运 行 时 存 储 在 磁 盘 上 的 数 据 始 终 是 不 一 致 的 , 因 为 页 面 从 不 会 一 次 性 全 部 刷 新 。 但 是 , R A M 中 发 生 的 每 个 更 改 ( 例 如 在 缓 冲 区 缓 存 中 执 行 的 页 面 更 新 ) 都 会 被 记 录 下 来 : P o s t g r e S Q L 会 创 建 一 个 日 志 条 目 , 其 中 包 含 在 需 要 时 重 复 此 操 作 所 需 的 所 有 基 本 信 息 。 页 面 修 改 相 关 的 日 志 条 目 必 须 先 于 修 改 后 的 页 面 本 身 写 入 磁 盘 。 这 就 是 日 志 名 称 的 由 来 : 预 写 式 日 志 ( w r i t e a h e a d l o g ) , 简 称 W A L 。 这 项 要 求 保 证 了 在 发 生 故 障 时 , P o s t g r e S Q L 可 以 从 磁 盘 读 取 W A L 条 目 并 重 放 它 们 , 以 重 复 那 些 已 完 成 但 结 果 仍 在 R A M 中 且 在 崩 溃 前 未 写 入 磁 盘 的 操 作 。 保 留 预 写 式 日 志 通 常 比 将 随 机 页 面 写 入 磁 盘 更 高 效 。 W A L 条 目 构 成 一 个 连 续 的 数 据 流 , 即 使 是 硬 盘 驱 动 器 ( H D D ) 也 能 很 好 地 处 理 。 此 外 , W A L 条 目 通 常 比 页 面 大 小 更 小 。 为 了 在 发 生 故 障 时 避 免 数 据 不 一 致 , 所 有 可 能 破 坏 数 据 一 致 性 的 操 作 都 需 要 记 录 下 来 。 具 体 来 说 , 以 下 操 作 会 记 录 在 预 写 式 日 志 ( W A L ) 中 : W A L 记 录 的 操 作 缓 冲 区 缓 存 中 的 页 面 修 改 : 由 于 写 入 是 延 迟 的 , 这 些 修 改 需 要 记 录 下 来 以 备 恢 复 。 事 务 提 交 和 回 滚 : 事 务 状 态 的 变 化 发 生 在 C L O G 缓 冲 区 中 , 不 会 立 即 写 入 磁 盘 , 因 此 需 要 记 录 。 文 件 操 作 : 当 添 加 或 删 除 表 时 , 文 件 和 目 录 的 创 建 与 删 除 等 操 作 必 须 与 数 据 更 改 同 步 , 所 以 也 要 记 录 。 W A L 不 记 录 的 操 作 u n l o g g e d 表 相 关 操 作 临 时 表 上 的 操 作 : 由 于 临 时 表 的 生 命 周 期 仅 限 于 创 建 它 们 的 会 话 , 所 以 它 们 的 操 作 不 会 被 记 录 。 在 P o s t g r e S Q L 1 0 之 前 , 哈 希 索 引 的 操 作 也 不 会 被 记 录 。 它 们 的 主 要 目 的 是 将 哈 希 函 数 与 不 同 的 数 据 类 型 匹 配 。 除 了 用 于 崩 溃 恢 复 之 外 , W A L 还 可 以 用 于 从 备 份 进 行 时 间 点 恢 复 以 及 数 据 复 制 。 发 表 在 p o s t g r e s | 标 签 为 p o s t g r e s | 留 下 评 论 A h a p p y d a y 发 表 于 2 0 2 5 年 7 月 2 3 日 由 g u j i n f e i M a y h a p p i n e s s a l w a y s b e w i t h y o u 发 表 在 生 活 日 常 | 标 签 为 M a s o n | 留 下 评 论 ← 早 期 文 章 搜 索 搜 索 近 期 文 章 H a p p y b i r t h d a y t o m e 性 能 调 试 — c p u 占 用 高 B a c k g r o u n d W r i t i n g R e c o v e r y C h e c k p o i n t 近 期 评 论 您 尚 未 收 到 任 何 评 论 。 归 档 2 0 2 5 年 8 月 2 0 2 5 年 7 月 2 0 2 5 年 6 月 分 类 d e b u g o s p o s t g r e s 未 分 类 生 活 日 常 津 I C P 备 2 0 2 5 0 3 6 9 6 1 号 J e f f r e y s s p a c e 自 豪 地 采 用 W o r d P r e s s 。
站点概括关于0xjeff.top说明:
0xjeff.top由网友主动性提交被整理收录的,仅提供0xjeff.top的基础信息并免费向大众网友展示,0xjeff.top的是IP地址:- 地址:-,0xjeff.top的百度权重为0、百度手机权重为0、百度收录为0条、360收录为0条、搜狗收录为0条、谷歌收录为0条、百度来访流量大约在-之间、百度手机端来访流量大约在-之间、0xjeff.top的备案号是-、备案人叫-、被百度收录的关键词有0个、手机端关键词有0个、该站点迄今为止已经创建未知。
内容声明:1、本站收录的内容来源于大数据收集,版权归原网站所有!
2、本站收录的内容若侵害到您的利益,请联系我们进行删除处理!
3、本站不接受违规信息,如您发现违规内容,请联系我们进行清除处理!
4、本文地址:https://www.xingzitai.com/xxzddh/416d2b5b76917de9d710.html,复制请保留版权链接!
企盟天助是一家从事武汉天助网、武汉网络营销公司、武汉网络推广公司的企业,提供天助网相关服务和产品,欢迎来电咨询。
捡来是一家集楼承板设备研发、生产、销售为一体的厂家,主要生产闭口楼承板设备、开口楼承板设备、免浇筑楼承板机器等各种异型冷弯设备。可来图来样定制设备。交期短,操作便捷。
宅资讯-分享最新的ACG资讯
云南满盛钢铁销售有限公司位于昆明市经开区宝象物流园钢材市场。是昆明钢铁集团、攀钢、武钢在昆指定经销商。是一家集钢材、物流、电子商务为一体的专业钢材销售公司。多年来,公司秉承锐意进取、持之以恒、不断创新的理念,致力于为客户提供高质量低价格的钢产品,努力为客户创造价值为己任,拥有完善先进的开平加工设备和强大的物流配送系统充足的货源供应链。可随时满足客户的各种需求。公司一项以规格齐全、价格便宜、配送快捷的优势先后为云南各地区的大型电站,矿山,桥梁,市政工程等重点工程供应大量优质的钢材,赢得了广大用户、厂家及社会各界人士的广泛信赖和好评。
该站暂未设置description...
广州市卫通安全智能电子有限责任公司于2017年1月在广州市高新技术开发区成立,依靠南京理工大学国家重点实验室的研发团队和自身的海外留学归国团队相结合,公司致力于军警领域反恐防暴的非致命装备,集产、学、研、售、训五位一体,为军警等执法部门提供世界先进的非致命精准反恐防暴装备,公司获得广州市高新技术开发区的创业英才计划支持,广州市军民融合会员单位,获得特种装备网十大反恐品牌。
Kickstarter众筹代理-深圳海外众筹项目代理咨询服务 | Kickstarter平台授权运营商
该站暂未设置description...
舟山市普陀区慈善总会成立于2003年5月。本会是由热心慈善事业的部门、单位和社会各界人士组成,经依法登记注册、具有法人资格的非营利公益社会团体。