Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >XTTS系列之五:警惕大文件表空间

XTTS系列之五:警惕大文件表空间

作者头像
Alfred Zhao
发布于 2023-10-10 10:11:35
发布于 2023-10-10 10:11:35
25300
代码可运行
举报
运行总次数:0
代码可运行

在上篇《XTTS系列之四:迷迷糊糊的并行度》验证之后,就让测试组在RMAN配置中设置好正确的并行。然后重新将备份任务执行,平均速度直接由之前的150MB/s提升为1200MB/s。优化效果非常明显,速度直接提升了8倍。但是由于用户的数据库存在大文件表空间,当执行到大文件表空间时,速度又降到150MB/s的速度,无法使用并行。

我们知道大文件表空间在11g引入了Multi-Section,可以通过指定section size来用到并行,但现在很尴尬的是:

  • 目前xtts的封装Perl脚本是动态生成的RMAN备份命令,且未指定这个section size
  • 在RMAN配置中,也无法将section size指定为默认通道配置

也就是说,就是无法用到并行。

那用户还要继续要求优化速度,想想这该怎么办呢?

...

讨论阶段有合作伙伴提出让原厂来改脚本,这条路基本很难,不甘心可以去MOS提SR给后台要求,后续有机会我也会和公司反馈,当提这样需求的关键用户多了,在后续xtts版本就有希望会加入这个功能,但对于当下依然是远水解不了近渴。

既然改脚本不靠谱,那我们又该如何继续优化呢?

...

首先了解下目前客户大文件表空间情况:具体有多个大文件表空间,其中最大的那个大小在8T,其余几个加起来小于8T;

此时庆幸还好不是1个,基于这个背景,workaround的方案就有了,使用当前xtts的perl脚本手工并行来做,分成3批,比如xtt1,xtt2,xtt3:

  • 普通小文件表空间一批,对应xtt1
  • 8T大文件表空间自己一批,对应xtt2
  • 其他大文件表空间一批,对应xtt3

最后总时间理论就是备这个8T的时间,这个是最后的瓶颈,目前条件下没法再优化了。

那这种分批执行具体要怎么来做呢?

假设:

  • 普通小文件表空间:TEST,JINGYU
  • 大文件表空间Part1:BG1
  • 大文件表空间Part2:BG2,BG3

之前已有TEST,JINGYU表空间,现在模拟添加大文件表空间BG1,BG2,BG3:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SQL> create bigfile tablespace BG1 datafile '/flash/oradata/DEMO/fb6d1d5d4f0a245be0530b01a8c024da/datafile/bg1.dbf' size 2G;

Tablespace created.

SQL> create bigfile tablespace BG2 datafile '/flash/oradata/DEMO/fb6d1d5d4f0a245be0530b01a8c024da/datafile/bg2.dbf' size 1G;

Tablespace created.

SQL> create bigfile tablespace BG3 datafile '/flash/oradata/DEMO/fb6d1d5d4f0a245be0530b01a8c024da/datafile/bg3.dbf' size 1G;

Tablespace created.

首先脚本直接拷贝新的3份出来:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[oracle@bogon ~]$ pwd
/home/oracle
[oracle@bogon ~]$ ls -ld xtt
drwxr-xr-x. 3 oracle oinstall 4096 Jul  5 23:00 xtt
[oracle@bogon ~]$ cp -rp xtt xtt1
[oracle@bogon ~]$ cp -rp xtt xtt2
[oracle@bogon ~]$ cp -rp xtt xtt3
[oracle@bogon ~]$ ls -ld xtt*
drwxr-xr-x. 3 oracle oinstall 4096 Jul  5 23:00 xtt
drwxr-xr-x. 3 oracle oinstall 4096 Jul  5 23:00 xtt1
drwxr-xr-x. 3 oracle oinstall 4096 Jul  5 23:00 xtt2
drwxr-xr-x. 3 oracle oinstall 4096 Jul  5 23:00 xtt3

修改下配置文件:

1)xtt是全部表空间的备份,不做任何拆分:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[oracle@bogon xtt]$ grep -vE '^#|^$' xtt.properties 
tablespaces=TEST,JINGYU,BG1,BG2,BG3
platformid=13
src_scratch_location=/flash/xtts
dest_datafile_location=+DATADG
dest_scratch_location=/xtts
parallel=3
rollparallel=2
getfileparallel=4
srcconnstr=sys/oracle@jingyu
destconnstr=sys/oracle@jingyu

2)下面xtt1,xtt2,xtt3就是按我上面的策略做的拆分,3个部分加起来相当于上面全部的表空间:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[oracle@bogon xtt1]$ grep -vE '^#|^$' xtt.properties 
tablespaces=TEST,JINGYU
platformid=13
src_scratch_location=/flash/xtts/xtt1
dest_datafile_location=+DATADG
dest_scratch_location=/xtts/xtt1
parallel=3
rollparallel=2
getfileparallel=4
srcconnstr=sys/oracle@jingyu
destconnstr=sys/oracle@jingyu

[oracle@bogon xtt2]$ grep -vE '^#|^$' xtt.properties 
tablespaces=BG1
platformid=13
src_scratch_location=/flash/xtts/xtt2
dest_datafile_location=+DATADG
dest_scratch_location=/xtts/xtt2
parallel=3
rollparallel=2
getfileparallel=4
srcconnstr=sys/oracle@jingyu
destconnstr=sys/oracle@jingyu

[oracle@bogon xtt3]$ grep -vE '^#|^$' xtt.properties 
tablespaces=BG2,BG3
platformid=13
src_scratch_location=/flash/xtts/xtt3
dest_datafile_location=+DATADG
dest_scratch_location=/xtts/xtt3
parallel=3
rollparallel=2
getfileparallel=4
srcconnstr=sys/oracle@jingyu
destconnstr=sys/oracle@jingyu

我这里实测src_scratch_location最开始都是设置的/flash/xtts,是可以的。但为了更好区分每个部分,建议选择分开不同目录。

另外在分了任务之后,就需要特别注意TMPDIR的设置了,因为每次不一样,我这里设计都是对应xtts脚本目录中的tmp目录下:

所有表空间使用一个perl脚本一起备份:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# xtt_full:
export TMPDIR=/home/oracle/xtt/tmp
$ORACLE_HOME/perl/bin/perl xttdriver.pl --backup --debug 3

SESSION_KEY INPUT_TYPE           STATUS               START_TIME          END_TIME              INPUT_MB  OUTPUT_MB    SECONDS
----------- -------------------- -------------------- ------------------- ------------------- ---------- ---------- ----------
       5097 DATAFILE FULL        COMPLETED            2023-07-05 23:26:31 2023-07-05 23:26:47   2,048.00   2,048.00         16
       5099 DATAFILE FULL        COMPLETED            2023-07-05 23:26:50 2023-07-05 23:26:58   1,024.00   1,024.00          8
       5101 DATAFILE FULL        COMPLETED            2023-07-05 23:27:00 2023-07-05 23:27:16   2,048.00   2,048.00         16
       5103 DATAFILE FULL        COMPLETED            2023-07-05 23:27:19 2023-07-05 23:27:35   2,048.00   2,048.00         16

2023-07-05 23:26:31 到 2023-07-05 23:27:35

共备份7G的文件,耗时1分零4秒。

表空间按我之前说的策略拆分,每个perl脚本对应一部分任务,分别开启备份:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# xtt_part1:
export TMPDIR=/home/oracle/xtt1/tmp
$ORACLE_HOME/perl/bin/perl xttdriver.pl --backup --debug 3

# xtt_part2:
export TMPDIR=/home/oracle/xtt2/tmp
$ORACLE_HOME/perl/bin/perl xttdriver.pl --backup --debug 3

# xtt_part3:
export TMPDIR=/home/oracle/xtt3/tmp
$ORACLE_HOME/perl/bin/perl xttdriver.pl --backup --debug 3

这里直接开三个窗口同时执行,观察RMAN的运行情况:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SESSION_KEY INPUT_TYPE           STATUS               START_TIME          END_TIME              INPUT_MB  OUTPUT_MB    SECONDS
----------- -------------------- -------------------- ------------------- ------------------- ---------- ---------- ----------
       5105 DATAFILE FULL        RUNNING              2023-07-05 23:31:39 2023-07-05 23:31:53   2,048.00   2,048.00         14
       5106 DATAFILE FULL        RUNNING              2023-07-05 23:31:41 2023-07-05 23:31:53   1,024.00   1,024.00         12
       5109 DATAFILE FULL        RUNNING              2023-07-05 23:31:45 2023-07-05 23:31:53   2,048.00   2,048.00          8

运行完之后:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SESSION_KEY INPUT_TYPE           STATUS               START_TIME          END_TIME              INPUT_MB  OUTPUT_MB    SECONDS
----------- -------------------- -------------------- ------------------- ------------------- ---------- ---------- ----------
       5105 DATAFILE FULL        COMPLETED            2023-07-05 23:31:39 2023-07-05 23:32:05   2,048.00   2,048.00         26
       5106 DATAFILE FULL        COMPLETED            2023-07-05 23:31:41 2023-07-05 23:32:07   1,024.00   1,024.00         26
       5109 DATAFILE FULL        COMPLETED            2023-07-05 23:31:45 2023-07-05 23:32:11   2,048.00   2,048.00         26
       5112 DATAFILE FULL        COMPLETED            2023-07-05 23:32:09 2023-07-05 23:32:25   1,024.00   1,024.00         16
       5114 DATAFILE FULL        COMPLETED            2023-07-05 23:32:14 2023-07-05 23:32:31   1,024.00   1,024.00         17

2023-07-05 23:31:39 到 2023-07-05 23:32:31

这种采用拆分xtts任务的方式,手工并行备份7G的文件,耗时52秒。

因为我这里测试环境资源有限,并行多个perl脚本的提升还不够明显,但即使这样也能看到有提升。

注意观察RMAN运行情况时,我特意截取了执行中的一个状态,实际从STATUS中三个同时RUNNING的状态,就可以知道,并行多个perl脚本可以让之前等待串行的大文件能够先并行和其他任务一起跑起来,这必然就会提升效率了。

附:本文中查询RMAN运行情况SQL如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
set lines 180 pages 200  
COL INPUT_TYPE FORMAT a20
COL STATUS FORMAT a20
COL minutes FORMAT 999.999
COL Input_mb FORMAT 99,999.99
COL Output_mb FORMAT 99,999.99

SELECT SESSION_KEY, INPUT_TYPE, STATUS,
TO_CHAR(START_TIME,'yyyy-mm-dd hh24:mi:ss') start_time,
TO_CHAR(END_TIME,'yyyy-mm-dd hh24:mi:ss') end_time,
INPUT_BYTES/1024/1024 Input_mb,
OUTPUT_BYTES/1024/1024 Output_mb,
ELAPSED_SECONDS Seconds
FROM V$RMAN_BACKUP_JOB_DETAILS
ORDER BY SESSION_KEY;

最后留给大家一个思考题,如果说你有客户使用XTTS方案迁移,但其数据库中就只有一个大文件表空间,这种情况你会如何做呢?

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-07-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
XTTS系列之二:不可忽略的BCT
重要系统Oracle数据库U2L迁移场景中,如果客户来问我建议,我都会回复说首选就是XTTS,除非XTTS经测试实在是无法满足停机窗口,否则就不要考虑OGG这类方案。 换句话说,选择OGG做迁移的场景,都是没有其他办法时才会选用的方案了。
Alfred Zhao
2023/10/10
2880
XTTS系列之四:迷迷糊糊的并行度
项目测试组又反馈一个问题,XTTS执行全量备份速度慢,影响测试进度。 实际算了下,平均速度才150MB/s.. 这个速度在客户生产环境的确是不够看,首先询问是否开了并行,开了多少?
Alfred Zhao
2023/10/10
2800
XTTS系列之三:中转空间的选择和优化
通常选择XTTS做迁移的数据库都不会太小的,至少都是几T、几十T这样的规模,这种级别的数据量原有空间不够用,所以在迁移过程临时用作存放迁移数据库备份文件的空间也是需要提前考虑规划的问题。
Alfred Zhao
2023/10/10
2920
XTTS系列之三:中转空间的选择和优化
Oracle异构平台迁移利器之XTTS(使用rman方式)
XTTS(Cross Platform Transportable Tablespaces)属于跨平台迁移表空间,它是从Oracle 8i开始就引入的一种基于表空间传输的物理迁移方法,命名为TTS,经历各个版本的不断演进,从11gR2开始,在相对停机时间要求日益减少的情况,为了应对越来越大的数据量跨平台迁移,Oracle推出了新的解决方案—加强版TTS(以下简称XTTS),XTTS使用增量备份的方式实现跨平台的数据迁移,从真正意义上大大缩短停机时间。在U2L如火如荼的今天,通过XTTS快捷、高效、平稳、安全的将Oracle数据库“小型机+集中式存储”环境迁移至“X86架构平台+分布式存储”已然成为一大神技。
AiDBA宝典
2022/11/07
5.8K0
Oracle异构平台迁移利器之XTTS(使用rman方式)
记录一则xtts测试遇到的诡异现象
背景:在一次xtts的测试中遇到因源库数据文件名称包含特殊字符导致表空间全量备份缺失文件,之所以说是诡异现象,是因为xtts的全备日志不报任何错误,在恢复阶段才发现缺少文件,这个缺陷比较隐晦,尤其在迁移的表空间较多的场景下,不注意的话很难第一时间发现。 环境:客户环境是AIX 5.3 + Oracle 10.2.0.3,使用xtts脚本2.0版本,本文在测试环境OEL 5.7 + Oracle 10.2.0.5 下,使用xtts脚本3.0实验,同样可以重现这个现象,说明是普遍现象。
Alfred Zhao
2019/02/15
5850
举一反三:跨平台版本迁移之 XTTS 方案操作指南
作者 | 罗贵林: 云和恩墨技术工程师,具有8年以上的 Oracle 数据库工作经验,曾任职于大型的国家电信、省级财政、省级公安的维护,性能调优等。精通 Oracle 数据库管理,调优,问题诊断。擅长 SQL 调优,Oracle Rac 等维护,管理。
数据和云
2018/07/27
1.8K0
举一反三:跨平台版本迁移之 XTTS 方案操作指南
XTTS系列之一:U2L迁移解决方案之XTTS的使用
本系列的定位是对XTTS及相关技术进行深入的学习研究。作为本系列的开篇,本着实用性的原则,我先把一次实际生产环境U2L的迁移实战实施方案进行提炼简化,旨在能清楚说明该如何使用XTTS这种解决方案来进行U2L迁移,先达到可以跟着做下来的初级目标,如果有兴趣再去深入研究相关细节。
Alfred Zhao
2019/07/29
2.3K0
【DB宝53】Oracle异构平台迁移利器之XTTS(使用dbms_file_transfer方式)
姊妹篇文章:【DB宝52】Oracle异构平台迁移利器之XTTS(使用rman方式)
AiDBA宝典
2021/05/27
2.1K0
问题:Duplicate报错RMAN-03009, ORA-17628, ORA-19505
前面文章提到,这周末帮一个客户测试报错场景: 客户通过duplicate生产备库的方式创建cascade备库。 发现每次都会遇到两个文件报错,ORA-17628: Oracle error 19505错误,且每一次跑,报错文件不一样。 现在想帮客户验证,这属于是正常现象还是bug。
Alfred Zhao
2023/05/23
1K0
时过境迁:Oracle跨平台迁移之XTTS方案与实践
作者简介 谢金融 云和恩墨东区交付部 Oracle 工程师,多年来从事 Oracle 第三方服务,曾服务过金融、制造业、物流、政府等许多行业的客户,精通数据库迁移、性能优化和故障诊断。 本文由恩墨大讲
数据和云
2018/03/05
3.7K0
时过境迁:Oracle跨平台迁移之XTTS方案与实践
深入浅出XTTS:Oracle数据库迁移升级利器
摘要 通常我们要进行数据迁移,可以使用的方案有很多,比如数据泵、RMAN、GoldenGate,甚至是第三方同步软件DSG、DDS等。但是对于传统的迁移方式来说,数据量越大,需要的停机时间越长。增强版
IT大咖说
2018/04/04
2.9K0
深入浅出XTTS:Oracle数据库迁移升级利器
续:跨平台版本迁移之 XTTS 方案操作指南
运行数据库对比脚本,通过创建 dblink,运行相关的数据库对象比对脚本。这里我们主要比对了存储过程,函数,触发器,试图,索引,表等等。
数据和云
2018/07/27
1.3K0
续:跨平台版本迁移之 XTTS 方案操作指南
12c RMAN新特性之Recover Table
周玉其 云和恩墨南区技术顾问,曾在电信、物流等行业从事多年数据库开发、管理工作。
数据和云
2018/08/17
4900
我们都被骗了,所有的跨平台迁移都可以通过XTTS实现
自从2015年初进行了xtts增量的U2L迁移测试之后,国内很多人都开始利用这种方案进行数据库跨平台迁移了,基本上都是利用Oracle 封装的perl脚本。其中Oracle MOS文档 11G – Reduce Transportable Tablespace Downtime using Cross Platform Incremental Backup (文档 ID 1389592.1) 明确提到目标端环境必须是Linux, 这里该文档中的一段原话: The source system may be a
数据和云
2018/03/07
1.2K1
我们都被骗了,所有的跨平台迁移都可以通过XTTS实现
表空间基于时间点的恢复(TSPITR)
初始化参考 模拟业务最小测试用例01 文章中的第1,2,3,4,5步骤初始化模拟环境。
Alfred Zhao
2019/05/24
5770
【DB宝52】Oracle异构平台迁移利器之XTTS(使用rman方式)
XTTS(Cross Platform Transportable Tablespaces)属于跨平台迁移表空间,它是从Oracle 8i开始就引入的一种基于表空间传输的物理迁移方法,命名为TTS,经历各个版本的不断演进,从11gR2开始,在相对停机时间要求日益减少的情况,为了应对越来越大的数据量跨平台迁移,Oracle推出了新的解决方案—加强版TTS(以下简称XTTS),XTTS使用增量备份的方式实现跨平台的数据迁移,从真正意义上大大缩短停机时间。在U2L如火如荼的今天,通过XTTS快捷、高效、平稳、安全的将Oracle数据库“小型机+集中式存储”环境迁移至“X86架构平台+分布式存储”已然成为一大神技。
AiDBA宝典
2021/05/27
2.7K0
Oracle数据库迁移:异构传输表空间TTS HP-UX迁移至Redhat Linux 7.7
由于本次迁移为历史库迁移,且数据库未开启归档模式,所以选择较为便捷第二种方式进行迁移。
数据和云
2021/03/09
3.4K0
表空间时间点恢复
在Oracle中,通常所有的表空间都要在同一个时间点上保持一致。但实际工作中,有时我们需要在同一个数据库中,把部分数据恢复到不同的时间点。这时就要用到RMAN的表空间时间点恢复功能。这里姚远老师给大家介绍一下这个功能,参考官方文档《Backup and Recovery User's Guide》21 Performing RMAN Tablespace Point-in-Time Recovery (TSPITR)
姚远OracleACE
2023/09/06
3340
表空间时间点恢复
Oracle管理磁盘空间和资源
一般情况,我们发出一个大型数据库操作,比如创建大表索引,如果表空间不足,数据库最终会终止操作。 而可恢复的空间分配功能可以使得这类操作挂起,等待DBA去处理,等成功处理之后大型数据库操作自动恢复,这样就避免了这类棘手问题,节省了时间。
Alfred Zhao
2022/05/06
4070
Oracle 表空间时点恢复(TSPITR)
表空间时点恢复,是Oracle在基于冷备,热备恢复以外的一种以表空间为粒度的,不完全恢复的形式来将表空间恢复到过去某个特定的时间点的一种恢复方式。它整合了RMAN以及DataPump这2个备份恢复工具来实现时点恢复。那它具体的过程和逻辑是怎样的?下文是其具体的描述。
Leshami
2018/08/13
1.7K0
Oracle 表空间时点恢复(TSPITR)
相关推荐
XTTS系列之二:不可忽略的BCT
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验