当前位置: 首页 > news >正文

DSC 参数ARCH_HANG_FLAG对集群的影响

1 ARCH_HANG_FLAG 参数说明

ARCH_HANG_FLAG是一个配置参数,用于控制在本地归档写入失败时系统的行为。
官方文档说明:

  • 定义:ARCH_HANG_FLAG 参数决定了当本地归档写入失败时,系统是否挂起以及如何处理写入失败的情况。
  • 取值范围:0、1、2。默认为1
    • 0:写入失败后不挂起,直接报错返回,不再尝试写入。
    • 1:写入失败后挂起,反复尝试写入归档,直到写入成功。
    • 2:写入失败后先删除最老的归档文件,再重新尝试写入,反复进行该过程直到归档写入成功,或者所有归档文件都已经被删除;若所有归档文件都已经被删除的情况下仍然写入失败,则直接报错返回,不再尝试写入。

2 环境准备与测试设计

2.1 环境说明

配置项配置说明
操作系统版本CentOS Linux release 7.9.2009 (Core)
数据库版本DM Database Server x64 V8
DSC集群2节点(DSC0,DSC1)
共享存储+DMARCH0、+DMARCH1
归档配置双路本地归档
本地归档1:ARCHIVE_LOCAL1+DMARCH0/DSC0、+DMARCH1/DSC1
本地归档2:ARCHIVE_LOCAL2/dmarch、/dmarch

2.2 dmarch.ini文件配置

节点2示例文件:

ARCH_WAIT_APPLY = 0
ARCH_LOCAL_SHARE = 1
ARCH_LOCAL_SHARE_CHECK = 1[ARCHIVE_LOCAL1]ARCH_TYPE = LOCALARCH_DEST = +DMARCH1/DSC1ARCH_FILE_SIZE = 100ARCH_SPACE_LIMIT = 0ARCH_FLUSH_BUF_SIZE = 32ARCH_HANG_FLAG = 1[ARCHIVE_REMOTE1]ARCH_TYPE = REMOTEARCH_DEST = DSC0ARCH_INCOMING_PATH = +DMARCH0/DSC0ARCH_FILE_SIZE = 100ARCH_SPACE_LIMIT = 0ARCH_FLUSH_BUF_SIZE = 32[ARCHIVE_LOCAL2]ARCH_TYPE = LOCALARCH_DEST = /dmarchARCH_FILE_SIZE = 100ARCH_SPACE_LIMIT = 0ARCH_FLUSH_BUF_SIZE = 32ARCH_HANG_FLAG = 1

2.3 测试设计

当前集群为两节点DSC且每个节点均配置两路本地归档即ARCHIVE_LOCAL1、ARCHIVE_LOCAL2;
两路本地归档分别存放至ASM存储和本地文件系统;
为测试ARCH_HANG_FLAG参数配置对集群的影响,模拟以下场景:

  • 本地第一路归档打满:
    • ARCH_HANG_FLAG = 1
    • ARCH_HANG_FLAG = 0
    • ARCH_HANG_FLAG = 2
  • 本地第二路归档打满:
    • ARCH_HANG_FLAG = 1
    • ARCH_HANG_FLAG = 0
    • ARCH_HANG_FLAG = 2
  • 本地第一、二路归档打满

2.4 测试准备动作

2.4.1 磁盘打满模拟
-- 对于本地文件系统,使用dd命令创建大文件以模拟归档目录打满
dd if=/dev/zero of=/dmarch bs=1024M count=5-- 对于ASM存储系统,使用达梦asmtool工具,创建asmfile以模拟归档目录打满
-- 使用lsdg查看磁盘组空间使用情况,创建asmfile单位为MB
$ /dm/dmdbms/bin/dmasmtool DCR_INI=/dm/dmdbms/dsc_config/dmdcr.ini
ASM> create asmfile '+DMARCH1/DSC1/fill1.dat' size 6912
2.4.2 事务操作模拟
-- 测试表创建删除
drop  table test_remote_arch;CREATE TABLE test_remote_arch (id INT PRIMARY KEY,name VARCHAR(50),create_time DATETIME DEFAULT SYSDATE
);-- 模拟插入更新等操作
INSERT INTOtest_remote_arch (id, name)
SELECTLEVEL,'User_' || LEVEL
FROMDUAL CONNECT BY LEVEL <= 300000;UPDATE test_remote_arch
SETname = 'Updated_' || id
WHEREid BETWEEN 500 AND 1500;

3 测试流程及结果分析

确认两节点归档状态正常
[[29f0ffa2da81c9b9e811abbd6871f46a_MD5.png|Open: Pasted image 20250731134319.png]]
![[29f0ffa2da81c9b9e811abbd6871f46a_MD5.png]]
[[e33413c4f60cbfd942b95dabc0574f23_MD5.png|Open: Pasted image 20250731134324.png]]
![[e33413c4f60cbfd942b95dabc0574f23_MD5.png]]

3.1 第二路本地归档磁盘打满(ARCH_HANG_FLAG =1)

使用dd if=/dev/zero of=/dmarch/fillfile bs=1024M count=5模拟归档磁盘打满
[[5086fce7b6e33c29d975096492804276_MD5.png|Open: Pasted image 20250731134711.png]]
![[5086fce7b6e33c29d975096492804276_MD5.png]]
模拟大事务操作观察如下:
数据库警告日志报错并且该日志不停刷新,表明在持续尝试写入归档日志。
而正在执行的事务挂起。
[[f804237a253b09fd98ee1b4900898a03_MD5.png|Open: Pasted image 20250731135427.png]]【节点2】
![[f804237a253b09fd98ee1b4900898a03_MD5.png]]
[[c03f2b70217d5147522f092f894ef12a_MD5.png|Open: Pasted image 20250731135525.png]]【节点1】
![[c03f2b70217d5147522f092f894ef12a_MD5.png]]
此时删除节点2创建的填充文件,再观察可知节点1和节点2均解除挂起状态且挂起事务恢复提交。

3.2 第一路本地归档磁盘打满(ARCH_HANG_FLAG =1)

模拟+DMARCH1/DSC1磁盘组打满

ASM> create asmfile '+DMARCH1/DSC1/fill.dat' size 7260

[[f6cf06d9e75fbe2712d29371b4f62b2d_MD5.png|Open: Pasted image 20250731170027.png]]
![[f6cf06d9e75fbe2712d29371b4f62b2d_MD5.png]]
模拟大事务操作观察如下:
数据库警告日志报错磁盘空间不足,此时集群整体挂起与第二路径归档打满现象相同,持续尝试写入归档日志,正在执行事务挂起且阻塞后续事务。
[[0b0343e995f4cad0a44b9d978ecda68b_MD5.png|Open: Pasted image 20250731170156.png]]【节点2】
![[0b0343e995f4cad0a44b9d978ecda68b_MD5.png]]
手动删除填充文件后,集群状态恢复,已有事务不回滚。

ASM>rm -f fill.dat

[[da960c9e37f73a9164e1dcb61da06aa1_MD5.png|Open: Pasted image 20250731170251.png]]【节点2】
![[da960c9e37f73a9164e1dcb61da06aa1_MD5.png]]

[!summary] ARCH_HANG_FLAG=1 结论
在达梦8 DSC集群环境中,配置ARCH_HANG_FLAG=1。当第一或二路本地归档磁盘空间耗尽,归档线程进入阻塞挂起状态,阻止后续日志切换和事务提交。新增事务无法提交,客户端连接呈现挂起状态(pending)。
集群整体进入停滞状态,所有节点均无法处理新请求,但已有事务未回滚。
优先保证实例存活避免数据不一致风险,但牺牲事务吞吐量。

3.3 第二路本地归档磁盘打满(ARCH_HANG_FLAG =0)

同样使用dd命令模拟归档磁盘打满,观察实例状态。
模拟大事务操作观察如下:
数据库警告日志报错磁盘空间不足,报错后,集群将该归档位置设置为INVALID,不再尝试在该目标位置写入。
[[4700e6350658d1146c217b02a4f0f83a_MD5.png|Open: Pasted image 20250731140643.png]]【节点2】
![[4700e6350658d1146c217b02a4f0f83a_MD5.png]]
此时尝试进行新事务写入,可以正常执行。
[[998decd471cd377ad25cfc0589cf367e_MD5.png|Open: Pasted image 20250731152323.png]]【节点2】
![[998decd471cd377ad25cfc0589cf367e_MD5.png]]
从数据库运行日志来看,在检测到本地归档路径空间不足时,该归档目标位置会置为INVALID,而后会持续进行检测。
检测有剩余空间则置为VALID,尝试归档写入,写入空间不足再置为INVALID。

[[2d4630846560cb647aa63fe1af9a51f6_MD5.png|Open: Pasted image 20250731153411.png]]【节点2】
![[2d4630846560cb647aa63fe1af9a51f6_MD5.png]]
手动清理填充文件后,运行日志恢复正常,对事务操作无影响。

[[9a622b814dc9e7f46a50978e8d7f6f24_MD5.png|Open: Pasted image 20250731164623.png]]
![[9a622b814dc9e7f46a50978e8d7f6f24_MD5.png]]

3.4 第一路本地归档磁盘打满(ARCH_HANG_FLAG =0)

同样使用create asmfile命令模拟归档磁盘打满,观察实例状态。
模拟大事务操作观察如下:
数据库警告日志报错磁盘空间不足,报错后,集群将该归档位置设置为INVALID,不再尝试在该目标位置写入。
尝试进行新事务写入,可以正常执行,与第二路归档打满现象相同。
[[c47c61f598027a4c6745a062f09ba028_MD5.png|Open: Pasted image 20250731170711.png]]【节点2】
![[c47c61f598027a4c6745a062f09ba028_MD5.png]]
[[65eaba1c7be874560bb9952af5ffe06e_MD5.png|Open: Pasted image 20250731170720.png]]
![[65eaba1c7be874560bb9952af5ffe06e_MD5.png]]
在手动清理填充文件后,数据库恢复正常
[[ca9aa27511a20284add5ae80cf413ddd_MD5.png|Open: Pasted image 20250731170748.png]]
![[ca9aa27511a20284add5ae80cf413ddd_MD5.png]]

3.5 第一、二路本地归档磁盘同时打满(ARCH_HANG_FLAG =0)

分别使用dd命令和create asmfile命令模拟归档磁盘打满,观察实例状态。
模拟大事务操作观察如下:
数据库警告日志报错磁盘空间不足,报错后,集群将该归档位置设置为INVALID,不再尝试在该目标位置写入。
尝试进行新事务写入,可以正常执行,与单路径归档打满现象相同。
[[73bd1696b7a231792be8cbc765bd3196_MD5.png|Open: Pasted image 20250731171741.png]]【节点2】
![[73bd1696b7a231792be8cbc765bd3196_MD5.png]]

[!summary] ARCH_HANG_FLAG =0 结论
在达梦8 DSC集群环境中,配置ARCH_HANG_FLAG=0。当单路或双路本地归档磁盘空间耗尽,数据库运行日志提示归档失败磁盘空间不足。
集群事务执行不受影响,数据库持续检测归档空间。
空间不足 → 置为 INVALID → 持续检测 → 空间恢复 → 置为 VALID → 尝试写入 → 若再不足则再次置为 INVALID,以此循环。
最大限度保证了数据库可用,但可能导致归档缺失,进而影响后续数据的不完全恢复

3.6 第二路本地归档磁盘打满(ARCH_HANG_FLAG =2)

同样使用dd命令模拟归档磁盘打满,观察实例状态。
模拟大事务操作观察如下:
模拟大事务操作,数据库运行日志报错磁盘空间不足,报错后,数据库删除最早的归档文件。
不影响后续事务操作。
[[44b2a96be87ef47ee1512ceb858db0de_MD5.png|Open: Pasted image 20250731165053.png]]【节点2】
![[44b2a96be87ef47ee1512ceb858db0de_MD5.png]]
比对操作前后归档日志如下:
[[361874830c7351292a96ba6b0556bff6_MD5.png|Open: Pasted image 20250731165136.png]]
![[361874830c7351292a96ba6b0556bff6_MD5.png]]
手动清理填充文件后,数据库运行日志恢复正常,被删除归档未恢复。
如磁盘出现故障而非打满问题,将和ARCH_HANG_FLAG =1 情况相同
[[421be3215c2d6ad2c2171fc7dcedf9bb_MD5.png|Open: Pasted image 20250731173927.png]]
![[421be3215c2d6ad2c2171fc7dcedf9bb_MD5.png]]

3.7 第一路本地归档磁盘打满(ARCH_HANG_FLAG =2)

同样使用create asmfile命令模拟归档磁盘打满,观察实例状态。
模拟大事务操作观察如下:
数据库警告日志报错磁盘空间不足,报错后,数据库删除最早的归档文件
尝试进行新事务写入,可以正常执行,与第二路归档打满现象相同。
[[7ae001033aadc646c87405650097cb30_MD5.png|Open: Pasted image 20250731171400.png]]【节点2】
![[7ae001033aadc646c87405650097cb30_MD5.png]]

[!summary] ARCH_HANG_FLAG =2 结论
在达梦8 DSC集群环境中,配置ARCH_HANG_FLAG=2。当第一或二路本地归档磁盘空间耗尽,数据库运行日志提示归档失败磁盘空间不足。会自动触发清理历史归档,集群事务执行不受影响。当所有归档均被清理,新归档仍无法写入时,则返回报错,不再尝试写入。
最大限度保证了数据库可用,但可能导致归档缺失,进而影响后续数据的不完全恢复

4 测试结论

ARCH_HANG_FLAG=1(默认值)

  • 行为:当本地归档磁盘空间耗尽时,集群会挂起所有事务(包括新事务和未提交事务),持续尝试写入归档日志,直到空间恢复。
  • 影响:
    • 集群整体停滞,所有节点无法处理新请求。
    • 优先保证数据一致性,但牺牲可用性。
  • 适用场景:对数据一致性要求极高的系统,需接受服务中断风险。

ARCH_HANG_FLAG=0

  • 行为:归档磁盘满时,自动将故障路径标记为 INVALID,停止写入并继续处理事务。持续检测空间,恢复后自动置为 VALID。
  • 影响:
    • 事务不受影响,但归档可能缺失(影响数据恢复)。
    • 双路归档同时故障时仍可提供服务。
  • 适用场景:高可用性优先的系统,需接受归档不完整的风险。

ARCH_HANG_FLAG=2

  • 行为:磁盘满时自动删除最早归档文件以腾出空间,继续写入新归档。若所有归档均被删除仍无法写入,则报错停止。
  • 影响:
    • 事务不受影响,但历史归档可能丢失(影响数据恢复)。
    • 空间临时不足时可自救,但需监控归档完整性。
  • 适用场景:归档空间有限且允许部分历史数据丢失的场景。

5 运维建议及注意事项

参数选择原则:

  • 一致性优先:ARCH_HANG_FLAG=1(如核心数据库)。需确保归档磁盘空间充足,并设置实时监控告警;
  • 可用性优先:ARCH_HANG_FLAG=0(如高并发业务系统)。需配合独立备份机制,避免归档缺失导致数据无法恢复;
  • 平衡策略:ARCH_HANG_FLAG=2(需定期清理归档)。结合 ARCH_SPACE_LIMIT 限制总空间。

运维建议:

  • 监控归档空间:实时检测归档目录使用率,避免空间耗尽引发故障。
  • 设置多路归档:配置两路本地归档(如 ASM + 本地文件系统),可以有效避免单点故障导致服务中断。
  • 定期清理归档:确保归档保留策略(ARCH_SPACE_LIMIT)设置的合理性,避免历史数据丢失。

https://eco.dameng.com

http://www.dtcms.com/a/394804.html

相关文章:

  • Android Jetpack Compose 从入门到精通
  • 【数据结构与算法-Day 31】图的遍历:深度优先搜索 (DFS) 详解,一条路走到黑的智慧
  • C#练习题——LinkedList 的进阶应用与测试
  • 手机CPU型号
  • jdbc相关知识
  • yolov12 导出onnx
  • Linux 环境变量与程序地址空间
  • LeetCode:48.路径总和Ⅲ
  • 计算机网络的性能
  • 深度学习笔试选择题:题组1
  • 统一配置管理根据不同域名展现不同信息或相近信息 Vue3类单例模式封装
  • 人工智能深度学习——循环神经网络(RNN)
  • 单例模式指南:全局资源的安全访问
  • 容器化 Tomcat 应用程序
  • Vue Router【前端】
  • 数据结构——受限线性表之栈
  • 数据结构(1)------ 三要素
  • BaaS(Backend as a Service)概述、平台、项目
  • 区间dp,数据结构优化dp等5种dp,各种trick深度讲解
  • 数据结构笔试选择题:题组1
  • 前端基础:从0到1实现简单网页效果(一)
  • 数据结构|图论:从数据结构到工程实践的核心引擎
  • AI赋能个人效能提升:实战演练工作规划、项目复盘与学习发展
  • 7. Linux RAID 存储技术
  • iOS 上架 App 费用详解 苹果应用发布成本、App Store 上架收费标准、开发者账号与审核实战经验
  • kafka 2.12_3.9.1 版本修复 Apache Commons BeanUtils 访问控制错误漏洞(CVE-2025-48734)
  • 二分查找经典——力扣153.寻找旋转排序数组中的最小值
  • 离散数学之命题逻辑
  • 【Linux命令从入门到精通系列指南】ping 命令详解:网络连通性诊断的终极工具
  • 游戏UI告别“贴图”时代:用Adobe XD构建“活”的设计系统