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示例文件:

sql 复制代码
ARCH_WAIT_APPLY = 0
ARCH_LOCAL_SHARE = 1
ARCH_LOCAL_SHARE_CHECK = 1

[ARCHIVE_LOCAL1]
	ARCH_TYPE = LOCAL
	ARCH_DEST = +DMARCH1/DSC1
	ARCH_FILE_SIZE = 100
	ARCH_SPACE_LIMIT = 0
	ARCH_FLUSH_BUF_SIZE = 32
	ARCH_HANG_FLAG = 1
	
[ARCHIVE_REMOTE1]
	ARCH_TYPE = REMOTE
	ARCH_DEST = DSC0
	ARCH_INCOMING_PATH = +DMARCH0/DSC0
	ARCH_FILE_SIZE = 100
	ARCH_SPACE_LIMIT = 0
	ARCH_FLUSH_BUF_SIZE = 32
	
[ARCHIVE_LOCAL2]
	ARCH_TYPE = LOCAL
	ARCH_DEST = /dmarch
	ARCH_FILE_SIZE = 100
	ARCH_SPACE_LIMIT = 0
	ARCH_FLUSH_BUF_SIZE = 32
	ARCH_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 磁盘打满模拟
bash 复制代码
-- 对于本地文件系统,使用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 事务操作模拟
sql 复制代码
-- 测试表创建删除
drop  table test_remote_arch;

CREATE TABLE test_remote_arch (
    id INT PRIMARY KEY,
    name VARCHAR(50),
    create_time DATETIME DEFAULT SYSDATE
);

-- 模拟插入更新等操作
INSERT INTO
    test_remote_arch (id, name)
SELECT
    LEVEL,
    'User_' || LEVEL
FROM
    DUAL CONNECT BY LEVEL <= 300000;

UPDATE test_remote_arch
SET
    name = 'Updated_' || id
WHERE
    id 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磁盘组打满

sql 复制代码
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\]

手动删除填充文件后,集群状态恢复,已有事务不回滚。

sql 复制代码
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

相关推荐
GreatSQL3 小时前
GreatSQL 优化技巧:最值子查询与窗口函数相互转换
数据库
IDOlaoluo3 小时前
PLSQL Developer 13.0.2 x64 安装教程(附详细步骤和Oracle客户端配置)
数据库·oracle
qq_318693013 小时前
XML 站点地图制作与提交全流程,新站收录效率提升 50%
xml·数据库·mysql
望获linux3 小时前
【Linux基础知识系列:第一百三十九篇】使用Bash编写函数提升脚本功能
linux·运维·服务器·arm开发·chrome·性能优化·bash
hhhwx6663 小时前
Linux学习记录--利用信号量来调度共享资源(2)
linux·c语言·c++·学习
biubiubiu07063 小时前
coqui-ai/TTS 安装
linux·运维·服务器
打不了嗝 ᥬ᭄4 小时前
【Linux】UDP 网络编程
linux·运维·服务器
kcoo4 小时前
Jupyter Lab 汉化
linux·开发语言·python
Lynnxiaowen4 小时前
今天我们开始学习nginx缓存功能,CORS以及nginx防盗链
linux·运维·学习·nginx·云计算·bash