热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

诊断OracleRedoLog性能问题

在能够影响Oracle性能的诸多因素中,RedoLog相关的因素从某种程度上可以说是最为重要同时也是最值得关注的。因为在一个OLTP系统

在能够影响Oracle性能的诸多因素中,Redo Log相关的因素从某种程度上可以说是最为重要同时也是最值得关注的。因为在一个OLTP系统

一、Rodo Log性能调整目标:

在能够影响Oracle性能的诸多因素中,Redo Log相关的因素从某种程度上可以说是最为重要同时也是最值得关注的。因为在一个OLTP系统中Oracle通过各种技术以及优良的设计,,尽量做到将大部分操作在内存中完成,以便最大程度的提升性能。因此在Oracle的诸多后台进程以及用户进程的大部分操作都是内存操作,而且这些操作会通过延迟写入技术尽可能的将磁盘I/O操作滞后。但是在这些操作中却有某些例外,其中最明显的就是针对Redo Log的操作。

在Oracle中针对Redo Log的操作主要由LGWR进程完成,这个进程可以说是Oracle所有后台进程中最繁忙的进程,而且这个进程可能要频繁的进行I/O操作,这是因为Oracle出于数据安全的考虑必须保证联机在线重做日志可靠的写入日志文件,以便在发生崩溃时能够有效恢复数据,而真正的数据可能会等一些时间延迟写入数据文件。这种特点在Oracle的各个后台进程中显得有些独树一帜。另外LGWR全局唯一,即一个实例只能有一个活动的LGWR进程,由于要进行频繁的I/O操作可想而知是很容易造成LGWR进程竞争的。由于LGWR在Oracle实例结构设计中的特殊地位,一旦出现LGWR性能瓶颈,那么对整个系统的性能影响将会是极为严重的,同时对数据安全也是一个潜在的威胁。

因此作为Oracle日常的数据库管理,我们要给与这部分相当的关注,尽早发现问题,尽早作出调整。调整的目标就是要做到Log_Buffer大小适中(不要过大,也不能太小),要满足用户进程的使用需要,每当系统负载有一个明显的增加时,就应该考虑调整它的大小。比如因为业务拓展当前系统固定用户数量从1万人猛增到3万人,那么就应该对Log_Buffer大小给与关注。另外就是要做到日志文件的大小适中,日志组的日志文件数量合适,不能影响LGWR写日志文件的性能,不能造成日志文件间的写入竞争,不能在日志切换归档发生时引发磁盘竞争等等。

二、监控与问题排查:

在进行Redo Log问题监控时,主要关注两个方面:日志缓冲区空间使用的等待情况和日志缓冲区数据槽的分配情况。通过这两方面的监控并配合一些问题排查手段,通常可以发现大量问题。

(1)、日志缓冲区空间使用的等待情况:

可以通过查询v$session_wait来监控日志缓冲区空间使用的等待情况,通过如下SQL语句进行查询:

select sid,event,seconds_in_wait,state

from v$session_wait

where event='log buffer space%';

以上的查询中可以通过观察seconds_in_wait的数值来分析问题,这个数值可以显示如下问题:日志切换缓慢引发的等待、LGWR写入缓慢引发的等待、日志文件写入引起的磁盘竞争引发的等待。

这些等待的发生可能是由于如下问题引起的:

1、日志文件写入时存在磁盘竞争:

这种情况多见于日志切换发生时,由于日志文件组的规划不当,或者存放日志文件的磁盘写入速度缓慢,或者是因为磁盘RADI类型不当都会引发这个问题,如果怀疑村在这些情况,可以通过如下语句进行监控:

select event,total_waits,time_waited,average_wait

from v$system_event

where event like 'log file switch completion%';

可以通过观察total_waits,time_waited,average_wait数值来分析问题,如果这些值过高(注意何谓“过高”,不同系统考量标准不一样,要具体分析),那么说明存在以上问题。此时可以通过如下措施解决:

.将同一日志文件组的各个成员分配到不同的磁盘上,进而减少日志写入以及日志切换和日志归档时引发的竞争;

.将日志文件尽可能存放在快速的磁盘上;

.要合理选择RADI类型对磁盘进行条带化,通常不要选择RADI5来作为日志文件磁盘的RADI类型,通常推荐使用RADI10;

.可以增加REDO LOG文件大小,来延缓日志切换,下面是一个增加日志文件大小的方法;

假如原来有3个小的redo log file, 下面是UNIX环境下的一个例子:

第一步: 往数据库添加三个大的redo logfile

SVRMGRL>ALTER DATABASE ADD LOGFILE GROUP 4

('/opt/oradata/app/redo04.log',

'/ora_bak/oradata2/redolog/redo04.log') size 16M reuse;

SVRMGRL>ALTER DATABASE ADD LOGFILE GROUP 5

('/opt/oradata/app/redo05.log',

'/ora_bak/oradata2/redolog/redo05.log') size 16M reuse;

SVRMGRL>ALTER DATABASE ADD LOGFILE GROUP 6

('/opt/oradata/app/redo06.log',

'/ora_bak/oradata2/redolog/redo06.log') size 16M reuse;

第二步: 手工地做log switch, 使新建的redo logfile起作用.

SVRMGRL>alter system switch logfile;

此操作可以执行一到几次, 使旧的redo logfile成invalid状态.

第三步: 删除原来旧的redo logfile.

SVRMGRL>alter database drop logfile group 1;

SVRMGRL>alter database drop logfile group 2;

SVRMGRL>alter database drop logfile group 3;


推荐阅读
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • 使用C#开发SQL Server存储过程的指南
    本文介绍如何利用C#在SQL Server中创建存储过程,涵盖背景、步骤和应用场景,旨在帮助开发者更好地理解和应用这一技术。 ... [详细]
  • 三星W799在2011年的表现堪称经典,以其独特的双屏设计和强大的功能引领了双模手机的潮流。本文详细介绍其配置、功能及锁屏设置。 ... [详细]
  • 构建基于BERT的中文NL2SQL模型:一个简明的基准
    本文探讨了将自然语言转换为SQL语句(NL2SQL)的任务,这是人工智能领域中一项非常实用的研究方向。文章介绍了笔者在公司举办的首届中文NL2SQL挑战赛中的实践,该比赛提供了金融和通用领域的表格数据,并标注了对应的自然语言与SQL语句对,旨在训练准确的NL2SQL模型。 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • 本文探讨了适用于Spring Boot应用程序的Web版SQL管理工具,这些工具不仅支持H2数据库,还能够处理MySQL和Oracle等主流数据库的表结构修改。 ... [详细]
  • 本文详细介绍了如何通过多种编程语言(如PHP、JSP)实现网站与MySQL数据库的连接,包括创建数据库、表的基本操作,以及数据的读取和写入方法。 ... [详细]
  • 在当前众多持久层框架中,MyBatis(前身为iBatis)凭借其轻量级、易用性和对SQL的直接支持,成为许多开发者的首选。本文将详细探讨MyBatis的核心概念、设计理念及其优势。 ... [详细]
  • 在使用 DataGridView 时,如果在当前单元格中输入内容但光标未移开,点击保存按钮后,输入的内容可能无法保存。只有当光标离开单元格后,才能成功保存数据。本文将探讨如何通过调用 DataGridView 的内置方法解决此问题。 ... [详细]
  • 本文详细介绍了如何在 Linux 平台上安装和配置 PostgreSQL 数据库。通过访问官方资源并遵循特定的操作步骤,用户可以在不同发行版(如 Ubuntu 和 Red Hat)上顺利完成 PostgreSQL 的安装。 ... [详细]
  • 如何在PostgreSQL中查看数据表
    本文将指导您使用pgAdmin工具连接到PostgreSQL数据库,并展示如何浏览和查找其中的数据表。通过简单的步骤,您可以轻松访问所需的表结构和数据。 ... [详细]
  • 利用存储过程构建年度日历表的详细指南
    本文将介绍如何使用SQL存储过程创建一个完整的年度日历表。通过实例演示,帮助读者掌握存储过程的应用技巧,并提供详细的代码解析和执行步骤。 ... [详细]
  • 本文介绍了如何通过 Maven 依赖引入 SQLiteJDBC 和 HikariCP 包,从而在 Java 应用中高效地连接和操作 SQLite 数据库。文章提供了详细的代码示例,并解释了每个步骤的实现细节。 ... [详细]
author-avatar
呼吸乱了的声音_648
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有