关于修改分区表的问题总结 (r3笔记35天)
在之前的章节中讨论了关于修改表分区的一些准备工作和操作细则,这个问题的来由有必要说一下。
通过分区键值发现性能问题 http://blog.itpub.net/23718752/viewspace-1263068/
当时是在做数据迁移的时候发现了一些表,导入数据比较慢,尽管做了分区的并行切分,速度还是很慢,最后查看数据的分布时,发现90%左右的数据都分布到了一个表分区上。
最后和开发部门协调,重新调整了分区键值,从DBA这边来说,就需要重新来创建分区了。
尽管已经考虑了很多的准备工作和可能碰到的问题,还是遇到了一些问题,自己总结一下。
第一个判断是否是关于备份,当时考虑使用exp来作为一个物理备份,结果在数据导出的时候,尽管开了多个并行进程同时导出,但是速度还是很慢。
结果exp还没有运行到20%,外部表的导出就完成了。从时间的角度考虑这个物理备份还是考虑有些欠缺,最后的解决方案就是导出了一个dump,里面只包含关于表结构,不包含数据,
如果出现问题,也能够及时的参考和调整。
第二个没有考虑到的因素就是表空间,当时想数据没有增加,重新分区以后,应该也不会有多大的空间变化,就没有申请额外的存储空间,结果在删除分区后,使用split来修改分区的时候
开始报一个劲的报错。提示无法扩展空间。
ORA-01658: unable to create INITIAL extent for segment in tablespace xxxxx
碰到这种问题,只得重新来过,如果再根据日志来逐个分析,也是得不偿失,
最后重新估算了需要的表空间,折腾了几轮才算把问题搞定。
第三个问题是在准备的时候也要考虑到各种可能遇到的情况,如果失败,还能够及时的调整。我是专门把分区的步骤分为了
以下的几个步骤。
1)数据清理,-->在有完整备份的前提下
2)删除分区
3)检查删除分区是否成功
4)先删除分区表中分区键值是一个的。
5)删除分区表中分区键值是两个的。
6)检查分区的修改情况是否满足要求。
这样的话,任何一个步骤失败,都可以及时的调整,重新部署。我在碰到了一些问题之后,就及时调整或者重新来做,这样不会浪费太多时间。
第4个问题就是数据的加载
对于大量的分区表数据的加载量还是很大的, 也需要合理的估算时间。这次做的分区表数据量都在亿级,在数据导入前也考虑了不少的细节,并行就是一个关键的因素。
合理的控制并行资源能够极大的提高系统的响应速度。
我专门预留了两个进程,等待其他的进程有提前完成的,然后作为补充,使得系统的处理速度一直处于高效状态,不至于一开始压力就太大,速度太慢,后期的时候空闲并行太多,导致系统的资源使用不是很合理。
以下是我在做数据导入时的一些指标信息。redo是1G大小,在不到一个小时的时间内切换300多次,加载的速度还是相当的快的。
GROUP# THREAD# SEQUENCE# MEMBERS SIZE_MB ARC STATUS
---------- ---------- ---------- ---------- ---------- --- ----------------
1 1 11157 2 1024 YES INACTIVE
2 1 11158 2 1024 NO CURRENT
3 1 11155 2 1024 YES INACTIVE
4 1 11156 2 1024 YES INACTIVE
Redo Switch times per hour NFTCUS1 2014-Oct-23 13:17:47
MON DA 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23
--- -- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
10 22 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 7 0 0 0 0 0 0 0 0
10 23 0 0 0 0 0 0 0 0 0 0 335 311 155 0 0 0 0 0 0 0 0 0 0 0
第5个问题是关于统计信息的考虑,这个部分最后使用nohup在后台收集,可以提前把环境先提供给开发,让大家都有一个缓冲的时间,根据我的经验,平均亿级的数据收集大概在15-20分钟左右。
需要提前准备好并行进程。
最后一个问题是关于性能调整的。
可能分区工作完成,大部分工作都完成了。但是最重要的工作还是分区之后的性能。
我碰到的情况是数据库的负载下降了,但是部分sql语句的执行速度下降了。 分区修改之前。
Elapsed: |
120.14 (mins) |
|||
---|---|---|---|---|
DB Time: |
220.20 (mins) |
分区修改之后。
Elapsed: |
119.16 (mins) |
|||
---|---|---|---|---|
DB Time: |
125.26 (mins) |
这个时候需要借助awr来仔细的分析一下,到底是哪些地方存在较大的误差。有些sql语句可能有毫秒级的差别,但是执行的频率太高,可能导致的执行时间还是有很大的差别,这些可以和开发来做协调,看有些延迟是否能够接受,当然了我们希望看到的是整体性能得到提高。毕竟付出这么大的代价,性能下降的厉害,就有些得不偿失了。
- 如何才能准确测量 APP 的功耗?
- 可用性更高:设计优秀的MySQL和Percona XtraDB集群
- 如何使用scikit-learn在Python中生成测试数据集
- OpenStack Neutron之持续测试
- 干货丨 用 Python 进行股票分析
- 小故事:架构师需要做什么?
- 浅谈用Python计算文本BLEU分数
- Fourinone如何实现并行计算和数据库引擎
- 在Python中用一个长短期记忆网络来演示记忆
- CDA数据分析师学习之路第3期 | Spark RDD的转换操作举例
- 通过Temboo实现从Arduino获取雅虎天气信息
- 自动化模式中的MySQL
- 通过Pandas实现快速别致的数据分析
- R语言中的非线性分类
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 宜信OCR技术探索之版面分析业务实践|技术沙龙直播速记
- Nginx的rewrite(地址重定向)剖析
- Prometheus监控神器-Kubernetes篇(二)
- C/C++实现你的浪漫表白:浪漫流星雨表白程序
- 烂了大街的 Spring 循环依赖问题,你觉得自己会了吗
- 软件测试丨自动化测试之读取配置文件
- 一文搞懂高频面试题之限流算法,从算法原理到实现,再到对比分析
- TRTC Android端开发接入学习之实现语音通话(六)
- Shell脚本加密经验分享
- python提示每天债券打新
- Python3下基于Scapy库完成网卡抓包解析
- pandas:解决groupby().apply()方法打印两次
- pandas:字段值插入数据表第一行的解决办法
- Recommending items to more than a billion people(面向十亿级用户的推荐系统)
- pandas:对字符串类型做差分比较