对ORACLE熟悉的小伙伴们大概都经历过oracle数据库报ORA-01555快照过久的错误,除了要优化SQL,尽量降低SQL语句对UNDO回滚段的占用时长外,我们还会调整ORACLE的初始化参数UNDO_RETENTION,尽量延长UNDO回滚中保存的信息不被覆盖。同时适当的增加undo表空间尺寸。是其有足够的空间来存储DML语句修改的前映像。
那么这一问题如果在达梦数据库中,该如何调整呢,下面就以达梦数据库的一个案例,来讲述如何调整这两个参数来优化数据库。
XX运营商发现一个问题(110583 resid_slot_wait超时bug)。
上海按照现场ini配置进行分析以后,基本定位原因是由于回滚页申请、释放触发大量的文件系统层面冲突(描述页、fil_ts_enter等),造成系统响应慢导致的。
并不是形成全局线程死锁导致的。
UNDO_RETENTION和UNDO_EXTENT_NUM参数需要匹配,如果UNDO_RETENTION确实需要设置比较大的话,则UNDO_EXTENT_NUM需要相应地调大。
否则,会不断从文件系统申请回滚页,然后回滚页回收机制又不断地释放回滚页到文件系统,形成文件系统层面的冲突。文件系统层面的冲突代价很高。
一个是避免触发resid_slot_wait超时halt的风险,再一个是消除全局冲突提升性能。
大家请关注这个情况,这两个参数的配置策略比较容易被忽略。
可以查询v$pseg_items,监控n_extent字段,如果持续上涨的话,说明UNDO_EXTENT_NUM值配置小了.
以下两个参数的解释:
UNDO_RETENTION:事务提交后回滚页保持时间,单位为秒。有效 值范围(0~ 86400) 注:类型为 DOUBLE,可支持毫秒。
UNDO_EXTENT_NUM:表示系统启动时,为每个工作线程分配的回滚 簇个数。有效值范围(1~ 256)