循序渐进调优ddl的案例 (79天)
时间:2022-05-04
本文章向大家介绍循序渐进调优ddl的案例 (79天),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
在平时的工作中,可能需要导入一些数据,有些表可能比较大,对于constraint的操作可能会耗费大量的时间,今天简单做了一些相关的测试,也提出了一些相关的优化方案,对结果进行比较,看看哪种才是比较合理的方法。
首先监控redo,undo的生成量也是衡量的一个标准。本次测试就简单从redo,undo,执行时间这三个方面进行总结。我准备采用shell脚本来进行监控。脚本内容见最后。
首先删除原有的表,重新创建,这个过程中也可以监控redo,undo和执行时间。数据量目前在40万左右,可以看到创建constraint的时候耗费了约70M左右的redo
然后在客户的机器上进行了简单的测试,配置要比本地好很多,测试的数据量是800万的。为了放大某些细节,总结的测试结果如下。
各种多种场景最终都被否定了,最后可以考虑一下把constraint和index分离,加上parallel来处理。
采用这种方式,响应时间和redo的生成量都大幅度降低,从原来的17秒减少到了8秒
脚本如下:
-------------------------------------------------------------------------
sqlplus -s n1/n1 <<EOF
set feedback off
set termout off
set linesize 100
set pages 50
col name format a30
variable redo number
spool test_before_tmp.log
@redo_stat.sql
@undo_stat.sql
spool off;
set timing on
$1
set timing off
--alter session enable parallel ddl;
spool test_after_tmp.log
@redo_stat.sql
@undo_stat.sql
spool off;
EOF
echo '##################################################'
echo 'redo, undo stats generated as below'
echo '##################################################'
sdiff test_before_tmp.log test_after_tmp.log|grep "|"|awk -F"|" '{print $2}'
exit
引用到的sql脚本内容如下:
--redo_stat.sql
select a.name ,b.value from v$statname a,v$mystat b
where a.STATISTIC#=b.STATISTIC#
and a.name like '%redo%'
order by a.name;
--undo_stat.sql
select a.name ,b.value from v$statname a,v$mystat b
where a.STATISTIC#=b.STATISTIC#
and a.name like '%undo%'
order by a.name;
- 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 数组属性和方法
- TypeScript里的类型为any和泛型的区别
- 乐观锁、悲观锁,这一篇就够了!
- 面向切片编程(AOP)应用的一些实际例子
- 计数计量单位KMGTPEZY【计算机】【天文】
- 不用临时的变量 优雅、高效的交换两个数方法
- SAP offline OData插件的JavaScript代码是如何调用到Android平台的Java代码的
- 一个占据SAP BSP应用占据存储空间的小工具
- 基于Golang的逃逸分析(Language Mechanics On Escape Analysis)
- SAP数据库表DDLOG的设计原理
- SAP UI5框架Component.js里extend函数的实现原理
- 冒泡排序的终极改进优化
- alpine安装sshd/ssh server
- 使用jstack检测Java应用的死锁(deadlock)状态
- 使用xdebug对php做性能分析调优
- 使用SAP Analytics Path Framework通过图表和表格方式展示CDS view数据