当前位置:  数据库>oracle

Oracle Update操作的优化一例

    来源: 互联网  发布时间:2017-06-25

    本文导语: 客户的每小时redolog日志量大,配合AWR和LOGMINER检查发现是由一条update语句引起。这条语句大概每小时执行80次左右,不仅产生了大量的重做日志,而且逻辑读也很高。 语句类似update tb_test_log set object_id=1 where owner='SYS',是对表tb_te...

客户的每小时redolog日志量大,配合AWR和LOGMINER检查发现是由一条update语句引起。这条语句大概每小时执行80次左右,不仅产生了大量的重做日志,而且逻辑读也很高。

语句类似update tb_test_log set object_id=1 where owner='SYS',是对表tb_test_log按一定的频率,把满足条件owner='SYS'的记录中的object_id修改为1,而且满足条件的记录占了整个表的一半左右。但实际上在每次更新时,满足条件owner='SYS'的记录中绝大部分object_id已经是1.

以下尝试优化:
DB Version:12.1.0.2.0
OS:CentOS 6.6

#建测试表
create table tb_test_log tablespace users as select * from dba_objects;

insert into tb_test_log select * from tb_test_log;
commit;

insert into tb_test_log select * from tb_test_log;
commit;

insert into tb_test_log select * from tb_test_log;
commit;

#查看测试表的大小,大概100MB
select bytes from dba_segments where segment_name=upper('tb_test_log');
/*
BYTES
109051904
*/

#满足条件owner='SYS'的记录大概占了46%
select count(decode(owner,'SYS',1,null))/count(1) from tb_test_log;
/*
0.461732733062479
*/

#优化前SQL
update tb_test_log set object_id=1 where owner='SYS';

#新建会话统计数据记录表,用于后面的重做日志和逻辑读的计算
declare
  v_count number;
begin
  select count(1) into v_count from dba_tables where table_name='T_STAT_TEMP';
  if v_count=1 then
    execute immediate 'truncate table t_stat_temp';
  else
    execute immediate 'create table t_stat_temp(snap_date date,name varchar2(100),value int)';
  end if;
end;


会话1:
#查看会话1的会话ID
select sid from v$mystat where rownum


    
 
 

您可能感兴趣的文章:

  • ORACLE日期相关操作
  • Linux下如何用C语言操作Oracle数据库相关的图书推荐
  • Oracle终于涉入支持Linux操作系统了
  • Linux平台下Oracle的操作
  • linux c 怎样利用pro*c/c++操作 win2000 下 oracle 谢谢
  • Window客户端通过ADO是否能够连接和操作Unix平台下的Oracle数据库?
  • Oracle将字符编码从GBK转到UTF8,如何操作比较稳妥?
  • 如何设定linux red hat 9的oracle9,让window的电脑可以操作数据库
  • linux oracle数据库删除操作指南
  • Linux环境中Oracle数据导入与导出备份操作
  • Oracle针对数据库某一行进行操作的时候,如何将这一行加行锁
  • oracle的plsql里有没有位操作的功能
  • fedora core5 (FC5) 下面不能装 Oracle 10g 么? (检查操作系统就通不过啊,晕)
  • Linux操作系统下Oracle数据库多实例启动方式及修改内存
  • 怎样在c语言的代码里内嵌的操作oracle数据库,各位大虾谢谢了
  • 一个关于JAVA操作oracle数据库时UPDATE权限的问题
  • Oracle中操作分页
  • Oracle 数据库操作技巧集
  • secureCRT远程连接服务器操作oracle数据库出现的问题
  • 请教各位:JAVA操作ORACLE的问题 急!!!
  • 学习登录oracle数据库时常用的操作命令
  • 解析mysql与Oracle update的区别
  • oracle中UPDATE nowait 的使用方法介绍
  • 发行版Oracle Enterprise Linux 5 Update 4
  • Oracle批量update和delete
  • sqlserver中delete、update中使用表别名和oracle的区别
  • ORACLE SQL-UPDATE、DELETE、INSERT优化和使用技巧分享
  • Oracle 的for update行锁语法
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • Oracle 数据库开发工具 Oracle SQL Developer
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • Oracle EBS R12 支持 Oracle Database 11g
  • Oracle 10g和Oracle 11g网格技术介绍
  • SCO unix下安装oracle,但没有光盘,请大家推荐一个oracle下载站点(unix版本的)。谢谢!!!!
  • oracle中如何把表中具有相同值列的多行数据合并成一行
  • 请问大家用oracle数据库, 用import oracle.*;下的东西么? 还是用标准库?
  • Oracle 数据库(oracle Database)性能调优技术详解
  • Linux /$ORACLE_HOME $ORACLE_HOME
  • ORACLE数据库常用字段数据类型介绍
  • Linux系统下Oracle的启动与Oracle监听的启动
  • Oracle 12c的九大最新技术特性介绍
  • 请问在solaris下安装ORACLE,用root用户和用oracle用户安装有什么区别么?
  • ORACLE中DBMS_RANDOM随机数生成包
  • 网间Oracle的连接,远程连接Oracle服务器??


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3