RMAN备份监控及优化总结
ccwgpt 2024-12-27 15:51 47 浏览 0 评论
今天主要介绍一下如何对RMAN备份监控及优化,这里就不讲rman备份的一些原理了,仅供参考。
一、监控RMAN备份
1、确定备份源与备份设备的最大速度
从磁盘读的速度和磁带写的带度、备份的速度不可能超出这两个速度、只能尽量的接近、我们心里要有数
1)确定磁盘读速度:
可以在数据服务器负载高峰期做一下sar –d,把物理盘的blks/s这一列加起来,再乘上操作系统块的大小
或者挑出一些盘或LV,做对/dev/null的dd操作,然后用sar –d 进行观察,测算速度
2)确定备份设备的速度
可以通过并行备份多个数据量大点的文件系统获得
2、通过v$session_longops监测RMAN的性能
v$session_longops会将超过6秒的操作记录在这个视图中,可以通过这个视图观看RMAN的各个操作已经花费了多少时间,还需要多少时间,每一部分使用了多少时间
SELECT A.SID,
A.PROGRAM,
A.STATUS,
B.OPNAME,
B.ELAPSED_SECONDS,
B.TIME_REMAINING
FROM V$SESSION A, V$SESSION_LONGOPS B
WHERE A.SID = B.SID
AND A.SERIAL# = B.SERIAL#
AND upper(A.PROGRAM) LIKE '%RMAN%'
AND TIME_REMAINING > 0
3、通过v$backup_sync_io和v$backup_async_io监测IO是否有瓶颈
备份最主要的部分是IO操作,因此IO也是最可能产生瓶颈的地方。
Oracle提供了v$backup_sync_io和v$backup_async_io这两张视图用于观察实际的备份的速率、观察备份过程中的等待。这两张视图中的数据存在的周期是实例运行的过程中、当数据库被重新启动,这两张视图中的数据会被清空
3.1、同步IO瓶颈
V$BACKUP_SYNC_IO displays performance information about ongoing and recently completed RMAN backups and restores. For each backup, it contains one row for each input datafile, one row for the aggregate total performance of all datafiles, and one row for the output backup piece. This data is not stored persistently, and is not preserved when the instance is re-started.
查询v$backup_sync_io视图、关注TYPE为AGGREGATE值的discrete_bytes_per_second这一列
这一列表示每秒中以同步方式备份、恢复数据的字节数,这个值应该接近于备份设备的读、写速率
如果这个值很小于备份设备读写速率,就需要从CPU负载、备份的进程、网络、MML接口的配置等几方面进行检查、优化。
SELECT device_type device,
TYPE,
filename,
to_char(open_time, 'yyyymmdd hh24:mi:ss') OPEN,
to_char(close_time, 'yyyymmdd hh24:mi:ss') CLOSE,
elapsed_time elapse,
discrete_bytes_per_second d_bytes
FROM v$backup_sync_io
WHERE close_time > SYSDATE - 1
ORDER BY close_time;
3.2、异步IO瓶颈
关注每秒备份、恢复的效率
V$BACKUP_ASYNC_IO displays performance information about ongoing and recently completed RMAN backups and restores. For each backup, it contains one row for each input datafile, one row for the aggregate total performance of all datafiles, and one row for the output backup piece. This data is not stored persistently, and is not preserved when the instance is re-started.
查询v$backup_async_io、关注TYPE为AGGREGATE值的effective_bytes_per_second这一列
在生产环境,基本用的都是异步IO的方式,因此这个视图用的频率特别的多
SELECT device_type device,
TYPE,
filename,
to_char(open_time, 'yyyymmdd hh24:mi:ss') OPEN,
to_char(close_time, 'yyyymmdd hh24:mi:ss') CLOSE,
elapsed_time elapse,
effective_bytes_per_second e_bytes
FROM v$backup_async_io
WHERE close_time > SYSDATE - 1
ORDER BY close_time
二、优化RMAN备份
1、分配合理的并行通道数
RMAN的备份、恢复的操作是通过通道(Channel)来完成的,Channel在数据库服务器的体现是一个Server进程,当RMAN分配一个Channel时,它即建立了一个到数据库实例的连接。多个Channel可以相互独立的完成备份、恢复的操作。
实际测试表明,如果备份设备是带库,并行通道数等于带库中带机的数会达到最佳的性能。很少的情况也是一个带机分配2或3个通道达到最佳性能的状况。需要注意的是,如果并行通道数多于带机数,会出现Backupset在多盘磁带混合存放的情况,因而会影响到恢复的速度
如果备份到磁盘,并行通道数等于磁盘子系统的数量时会达到最佳的性能,磁盘子系统数量指的是输出设备跨几块磁盘。例如磁盘子系统分布在3块物理硬盘上,则应分配3个通道。
假设并行通道设置2个,参考如下:
CONFIGURE DEVICE TYPE SBT_TAPE PARALLELISM 2;
CONFIGURE CHANNEL 1 DEVICE TYPE 'SBT_TAPE' PARMS 'ENV=(TDPO_OPTFILE=/usr/tsm/client/oracle/bin64/tdpo.opt)';
CONFIGURE CHANNEL 2 DEVICE TYPE 'SBT_TAPE' PARMS 'ENV=(TDPO_OPTFILE=/usr/tsm/client/oracle/bin64/tdpo.opt)';
2、确定合理的“多路复用”数
多路复用的目的是为了加快备份时自磁盘读数据的性能,其针对的是单个channel,当单个通道在备份时,它从多个数据文件同时读取数据,然后写到同一个backupset中,这样的操作模式我们称之为多路复用。
多路复用级别的多少取决于三个因素:
● FILESPERSET参数
● MAXOPENFILES参数
● 通道读取的文件数
从实际的测试及Oracle的建议来看,多路复用设置的规则为:
- 如果要备份的所有磁盘或数据文件很好的做了条带(stripe),多路复用处就不大了,可以将多路复用级别设为1或者2
- 如果磁盘没有做条带,多路复用应当设一个8之下的一个值,大于8的值常用在备份有很多空块的文件或在做增量备份的场景
3、内存方面调整
3.1、调整linux内核参数shmmax和shmall
kernel.shmmax 是核心参数中最重要的参数之一,用于定义单个共享内存段的最大值,shmmax 设置应该足够大,能在一个共享内存段下容纳下整个的SGA ,设置的过低可能会导致需要创建多个共享内存段,这样可能导致系统性能的下降 。
kernel.shmmni 内核参数是共享内存段的最大数量,shmmni 缺省值 4096 ,一般肯定是够用了
kernel.shmall 参数是控制共享内存页数 。Linux 共享内存页大小为4KB, 共享内存段的大小都是共享内存页大小的整数倍。假设一个共享内存段的最大大小是16G,那么需要共享内存页数是 16GB/4KB=16777216KB/4KB=4194304 (页),也就是64Bit 系统下16GB 物理内存,设置 kernel.shmall = 4194304 才符合要求(几乎是原来设置2097152的两倍)。这时可以将shmmax 参数调整到 16G 了,同时可以修改SGA_MAX_SIZE 和SGA_TARGET 为 12G。
设置之后我们可以通过ipcs -m观察Oracle的共享内存,看碎片有没减少。
3.2、增大磁盘/磁带缓冲区(Buffers)
缓冲区的大小决定了单次IO所能传送数据的多少,磁盘缓冲区的大小取决于多路复用(Mutiplexing)的级别,对照关系可以参数下表:
当你使用带库作为备份设备,并且分配了SBT通道,Oracle会为每一个通道分配一个Buffer
当BACKUP_TYPE_IO_SLAVES初始化数值为TRUE时,磁带缓冲区这段内存空间会从SGA区分配
当BACKUP_TYPE_IO_SLAVES初始化数值为FALSE时,磁带缓冲区会从PGA中分配
ORACLE建议这部份空间从LARGE POOL中分配,避免RMAN的IO缓冲区与Library cache的争用问题
RMAN通道的BLKSIZE参数确定了磁带缓冲区的大小。
实际的测试及Oracle的建议都表明磁带缓冲区至少应为256K。
3.3、设定合理的LARGE_POOL_SIZE值
如果LARGE_POOL_SIZE参数没有设定,磁盘及磁带缓冲区会试图从shared pool中分配
这样会引起shared pool中各组件如Library cache的争用问题
LARGE POOL要分配一个合理值,如果其大小不够用,磁盘及磁带缓冲区会从PGA分配,同时alert 警告信息:
Ksfqxcre: failure to allocate chared memory means sync I/O will be used whenever async I/O to file not supported natively
4、IO方面调整成异步IO
默认的情况下,当RMAN备份到磁带时使用的是同步IO
同步IO在一个时点只能执行一次操作,此时的备份性能一定是很糟的
而异步IO一个时点可以做多次操作,更好的填充写缓冲区,保证磁带的streaming
对于支持本地异步IO的系统,启用比较简单,BACKUP_TAPE_IO_SLAVES这个初始化参数设为TRUE就可以了
ps:简单比较一下在同异/步备份时数据流传送的过程:
常用命令如下:
--查看是否开启异步IO
SELECT NAME,ASYNCH_IO FROM V$DATAFILE F,V$IOSTAT_FILE I WHERE F.FILE#=I.FILE_NO AND FILETYPE_NAME='Data File';
--开启异步IO
alter system set filesystemio_options=setall sid ='*' scope=spfile;
startup force;
5、修改成hugepage
Transparent HugePages内存与标准HugePages内存的差异在于内核khugepaged线程在运行时动态分配内存。标准HugePages内存是在启动时预先分配在运行时不会发生改变。
如检查Transparent HugePage是否被启用
cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never ---这说明Transparent Hugepage被启用
觉得有用的朋友多帮忙转发哦!后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注下~
相关推荐
- 一个基于.Net Core遵循Clean Architecture原则开源架构
-
今天给大家推荐一个遵循CleanArchitecture原则开源架构。项目简介这是基于Asp.netCore6开发的,遵循CleanArchitecture原则,可以高效、快速地构建基于Ra...
- AI写代码翻车无数次,我发现只要提前做好这3步,bug立减80%
-
写十万行全是bug之后终于找到方法了开发"提示词管理助手"新版本那会儿,我差点被bug整崩溃。刚开始两周,全靠AI改代码架构,结果十万行程序漏洞百出。本来以为AI说没问题就稳了,结果...
- OneCode低代码平台的事件驱动设计:架构解析与实践
-
引言:低代码平台的事件驱动范式在现代软件开发中,事件驱动架构(EDA)已成为构建灵活、松耦合系统的核心范式。OneCode低代码平台通过创新性的注解驱动设计,将事件驱动理念深度融入平台架构,实现了业务...
- 国内大厂AI插件评测:根据UI图生成Vue前端代码
-
在IDEA中安装大厂的AI插件,打开ruoyi增强项目:yudao-ui-admin-vue31.CodeBuddy插件登录腾讯的CodeBuddy后,大模型选择deepseek-v3,输入提示语:...
- AI+低代码技术揭秘(二):核心架构
-
本文档介绍了为VTJ低代码平台提供支持的基本架构组件,包括Engine编排层、Provider服务系统、数据模型和代码生成管道。有关UI组件库和widget系统的信息,请参阅UI...
- GitDiagram用AI把代码库变成可视化架构图
-
这是一个名为gitdiagram的开源工具,可将GitHub仓库实时转换为交互式架构图,帮助开发者快速理解代码结构。核心功能一键可视化:替换GitHubURL中的"hub...
- 30天自制操作系统:第六天:代码架构整理与中断处理
-
1.拆开bootpack.c文件。根据设计模式将对应的功能封装成独立的文件。2.初始化pic:pic(可编程中断控制器):在设计上,cpu单独只能处理一个中断。而pic是将8个中断信号集合成一个中断...
- AI写代码越帮越忙?2025年研究揭露惊人真相
-
近年来,AI工具如雨后春笋般涌现,许多人开始幻想程序员的未来就是“对着AI说几句话”,就能轻松写出完美的代码。然而,2025年的一项最新研究却颠覆了这一期待,揭示了一个令人意外的结果。研究邀请了16位...
- 一键理解开源项目:两个自动生成GitHub代码架构图与说明书工具
-
一、GitDiagram可以一键生成github代码仓库的架构图如果想要可视化github开源项目:https://github.com/luler/reflex_ai_fast,也可以直接把域名替换...
- 5分钟掌握 c# 网络通讯架构及代码示例
-
以下是C#网络通讯架构的核心要点及代码示例,按协议类型分类整理:一、TCP协议(可靠连接)1.同步通信//服务器端usingSystem.Net.Sockets;usingTcpListene...
- 从复杂到优雅:用建造者和责任链重塑代码架构
-
引用设计模式是软件开发中的重要工具,它为解决常见问题提供了标准化的解决方案,提高了代码的可维护性和可扩展性,提升了开发效率,促进了团队协作,提高了软件质量,并帮助开发者更好地适应需求变化。通过学习和应...
- 低代码开发当道,我还需要学习LangChain这些框架吗?| IT杂谈
-
专注LLM深度应用,关注我不迷路前两天有位兄弟问了个问题:当然我很能理解这位朋友的担忧:期望效率最大化,时间用在刀刃上,“不要重新发明轮子”嘛。铺天盖地的AI信息轰炸与概念炒作,很容易让人浮躁与迷茫。...
- 框架设计并不是简单粗暴地写代码,而是要先弄清逻辑
-
3.框架设计3.框架设计本节我们要开发一个UI框架,底层以白鹭引擎为例。框架设计的第一步并不是直接撸代码,而是先想清楚设计思想,抽象。一个一个的UI窗口是独立的吗?不是的,...
- 大佬用 Avalonia 框架开发的 C# 代码 IDE
-
AvalonStudioAvalonStudio是一个开源的跨平台的开发编辑器(IDE),AvalonStudio的目标是成为一个功能齐全,并且可以让开发者快速使用的IDE,提高开发的生产力。A...
- 轻量级框架Lagent 仅需20行代码即可构建自己的智能代理
-
站长之家(ChinaZ.com)8月30日消息:Lagent是一个专注于基于LLM模型的代理开发的轻量级框架。它的设计旨在简化和提高这种模型下代理的开发效率。LLM模型是一种强大的工具,可以...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- 框架图 (58)
- flask框架 (53)
- quartz框架 (51)
- abp框架 (47)
- springmvc框架 (49)
- 分布式事务框架 (65)
- scrapy框架 (56)
- shiro框架 (61)
- 定时任务框架 (56)
- java日志框架 (61)
- mfc框架 (52)
- abb框架断路器 (48)
- beego框架 (52)
- java框架spring (58)
- grpc框架 (65)
- tornado框架 (48)
- 前端框架bootstrap (54)
- orm框架有哪些 (51)
- 知识框架图 (52)
- ppt框架 (55)
- 框架图模板 (59)
- 内联框架 (52)
- cad怎么画框架 (58)
- ssm框架实现登录注册 (49)
- oracle字符串长度 (48)