- List item
题记:Snapshot Too Old’(快照过旧)可能是Oracle DB最常见也是最臭名昭著的故障之一,尤其是在事务型突出的环境中。下面结合笔者处理过的最近一次的此类报错,谈谈针对这个报错的解决之道。
一. 2024-09-04 12:27:17 ,Zabbix告警:

二.问题排查:
1.立马登录系统,打开ADRCI工具:

利用adrci工具发现DB并无故障信息;
2.查看DB的alert日志:搜索发现alert目录下的log.xml和trace下的alert_xxxx.log文件下均有臭名昭著的ORA-01555报错





三.解决方法探讨:
1.首先查看undo 基本信息:show parameter undo

这里的undo_retention这个参数可疑
2.查看undo_tablespace的大小:
SELECT tablespace_name, SUM(bytes) / 1024 / 1024 AS size_mb
FROM dba_data_files
WHERE tablespace_name LIKE ‘UNDOTBS%’
GROUP BY tablespace_name;

3.查看undo_tbs过去 特定时间的使用情况:
SELECT TO_CHAR(BEGIN_TIME, ‘YYYY-MM-DD HH24:MI:SS’) AS start_time,
TO_CHAR(END_TIME, ‘YYYY-MM-DD HH24:MI:SS’) AS end_time,
(UNDOTSN / MAXCONCURRENCY) * 100 AS usage_percentage
FROM v$undostat;

或者:查看2024-09-04 12:20:00-2024-09-04 13:20:00具体使用情况
SELECT TO_CHAR(u.BEGIN_TIME, 'YYYY-MM-DD HH24:MI:SS') AS start_time,
TO_CHAR(u.END_TIME, 'YYYY-MM-DD HH24:MI:SS') AS end_time,
(u.UNDOTSN / u.MAXCONCURRENCY) * 100 AS usage_percentage
FROM v$undostat u
WHERE u.BEGIN_TIME >= TO_DATE(‘2024-09-04 12:20:00’, ‘YYYY-MM-DD HH24:MI:SS’)
AND u.END_TIME <= TO_DATE(‘2024-09-04 13:20:00’, ‘YYYY-MM-DD HH24:MI:SS’);

可见undo_tbs太小,执行多事务或者长SQL时候不够,
四.解决方案:
1.调整undo_tablespace空间:通过增加数据文件的我方式
ALTER TABLESPACE undotbs1 ADD DATAFILE ‘/new/file/path/undo02.dbf’ SIZE 10480M;
2.调整 Undo 保留时间(Undo_Retention)
ALTER SYSTEM SET undo_retention = 19200 SCOPE = BOTH;

3.以上两个值的调整没有绝对的标准,知识经验值,实际要根据DB的实际情况来调整。对于快照过旧其他的处理优化方法有:
①优化事务
a.减少事务运行时间
分析事务逻辑,避免在事务中执行复杂且耗时的操作,如大量数据的复杂计算、不必要的循环等。
对于批量数据处理的事务,可以将其拆分成多个小事务,分批次执行,以减少单个事务的运行时间。
b.及时提交事务
在事务执行过程中,确保在合适的时机提交事务。例如,在完成一个相对独立的数据操作单元后及时提交,避免长时间占用资源。
②优化查询性能
a.添加索引
分析查询语句中涉及的表和字段,对于频繁用于查询条件、关联条件的字段,如果没有索引,可以考虑添加索引来提高查询速度。
b.优化查询语句
检查查询语句的写法,避免全表扫描等低效的查询方式。例如,确保在查询中使用合适的筛选条件,避免使用SELECT *获取所有列(只获取必要的列)。
③处理大数据量操作
a.分区表
对于大型表,可以考虑使用分区技术。根据数据的特点(如时间范围、地域等)将表进行分区,这样在查询或操作部分数据时,可以减少数据的扫描范围,提高性能。
b.数据归档
对于历史数据,如果不再经常使用,可以将其归档到其他存储介质(如历史数据库、数据仓库等),以减少生产数据库中的数据量。例如,创建一个归档表,将符合条件的历史数据插入归档表后从原表删除:
PS:还有个方法是升级官方相应版本的最新bug。
最后,关于undo的报错,推荐一篇博文供大家参阅:
https://blog.51cto.com/u_15127623/2857720
码字不易,宝贵经验分享不易,请各位支持原创,转载注明出处,多多关注作者,后续不定期分享DB基本知识和排障案例及经验、性能调优等。

895

被折叠的 条评论
为什么被折叠?



