My Life My Dream!

守信 求实 好学 力行
随笔 - 193, 文章 - 0, 评论 - 55, 阅读 - 34万
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

Oracle调整联机日志大小

Posted on   召冠  阅读(1983)  评论(0编辑  收藏  举报

近期一个项目反馈月底高峰期时系统整体性能下降,抓取对应的AWR和ASH查看,等待事件排第一位的竟然是redo日志切换。进一步看每秒的日志量是5M多,而日志文件大小仅有200M。建议项目上调整日志大小,经验证确认性能问题明显下降,现记录调整联机日志的操作。

imageimage

 

数据初始化日志有3组,每组50M。我们建议将日志添加到6组,根据实际情况设日志大小,建议设置为1~2G,我这里设成2G;

归档模式下请确保所有日志已经归档,再进行日志文件大小的调整

日志状态说明

UNUSED未使用过的(新的)

INACTIVE静态的(非激活状态)

ACTIVE活动的(激活状态)

CURRENT正在写的状态

以下示例将重设联机日志,原三组各50M的日志改为六组各2G。

第一步、查询联机日志大小及位置

SQL> select group#,bytes/1024/1024,status from v$log;

GROUP# BYTES/1024/1024 STATUS

------------------------------------------------------

1 50 INACTIVE

2 50 INACTIVE

3 50 CURRENT

这里有3组重做日志,每组50M,目前第3组日志正在写

SQL> select * from v$logfile;

GROUP# STATUS TYPE MEMBER

---------------- ---------------- ----------- ----------------------------------------

1 ONLINE /data1/oracle/oradata/ora11r2/redo01.log

2 ONLINE /data1/oracle/oradata/ora11r2/redo02.log

3 ONLINE /data1/oracle/oradata/ora11r2/redo03.log

第二步、添加新的日志组

每组2048M,累计增加到6组日志

SQL> alter database add logfile group 4 '/data1/oracle/oradata/ora11r2/redo04.log' size 2048M;

Database altered.

SQL> alter database add logfile group 5 '/data1/oracle/oradata/ora11r2/redo05.log' size 2048M;

Database altered.

SQL> alter database add logfile group 6 '/data1/oracle/oradata/ora11r2/redo06.log' size 2048M;

Database altered.

添加完成,再用第一步的SQL查看是否添加成功和大小

SQL> select group#,bytes/1024/1024,status from v$log;

GROUP# BYTES/1024/1024 STATUS

------------------------------------------------------

1 50 INACTIVE

2 50 INACTIVE

3 50 CURRENT

4 2048 UNUSED

5 2048 UNUSED

6 2048 UNUSED

这里看到4、5、6三组日志已成功添加

第三步、切换日志,并删除之前的日志组

将日志切换到新建的日志组,删除之前的1、2、3日志组

SQL> alter system switch logfile;

Database altered.

注意事项:删除日志组时,日志组状态要为非激活状态才可以删除(重启数据库,使得group1,group2,group3都是inactive状态)

SQL> alter database drop logfile group 3;

Database altered.

SQL> alter database drop logfile group 2;

Database altered.

SQL> alter database drop logfile group 1;

Database altered.

日志组1、2、3成功删除

SQL> select group#,bytes/1024/1024,status from v$log;

GROUP# BYTES/1024/1024 STATUS

------------------------------------------------------

4 2048 CURRENT

5 2048 UNUSED

6 2048 UNUSED

这里看到只有4、5、6三组日志,表明已经成功将1、2、3删除

注意事项:执行删除日志组命令后,其实只是在数据字典中删掉了对于日志信息。你到操作系统日志目录下查看,你会发现日志文件还在,只有手动删除,才能真正的删除日志文件。

第四步、重建原日志组

重建1、2、3日志组并将日志文件大小设为2048M

SQL> alter database add logfile group 1 '/data1/oracle/oradata/ora11r2/redo01.log'size 2048M;

Database altered.

SQL> alter database add logfile group 2 '/data1/oracle/oradata/ora11r2/redo02.log' size 2048M;

Database altered.

SQL> alter database add logfile group 3 '/data1/oracle/oradata/ora11r2/redo03.log' size 2048M;

Database altered.

日志组1、2、3重建完成

使用第1步、第2步的SQL查询验证

SQL> select group#,bytes/1024/1024,status from v$log;

GROUP# BYTES/1024/1024 STATUS

------------------------------------------------------

1 2048 UNUSED

2 2048 UNUSED

3 2048 UNUSED

4 2048 CURRENT

5 2048 UNUSED

6 2048 UNUSED

SQL> select * from v$logfile;

GROUP# STATUS TYPE MEMBER

---------------- ---------------- ----------- ----------------------------------------

1 ONLINE /data1/oracle/oradata/ora11r2/redo01.log

2 ONLINE /data1/oracle/oradata/ora11r2/redo02.log

3 ONLINE /data1/oracle/oradata/ora11r2/redo03.log

4 ONLINE /data1/oracle/oradata/ora11r2/redo04.log

5 ONLINE /data1/oracle/oradata/ora11r2/redo05.log

6 ONLINE /data1/oracle/oradata/ora11r2/redo06.log

编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示