Oracle 大规模 delete,update 操作 注意事项

 

说明

       如果对大表进行大规模的delete update,那么可以注意一下如下说明:

       1 查看执行计划,如果说删除的记录很多,走索引的成本会比全表扫描更大,因为更新数据时还需要做一些约束校验和创建index entry。而且对于多CPU 情况,全表扫描还可以使用并行的特性。

              Oracle Parallel Execution(并行执行)

              http://blog.csdn.net/tianlesoftware/archive/2010/09/01/5854583.aspx

       2)如果表上有索引,B-Tree 索引可以unusable索引,函数索引则disable 索引,等操作结束之后在rebuild索引。

       3)如果是大规模的delete,那么可能还需要注意一下高水位的问题,在允许的情况下,可以用alter table move 来降低高水位,同时注意rebuild 索引。

              Oracle 高水位(HWM: High Water Mark) 说明

              http://blog.csdn.net/tianlesoftware/archive/2009/10/21/4707900.aspx

 

如果是OLTP的生产环境,对于禁用索引和高水位处理的操作要慎重。

 

 

. 相关测试

 

--查看表中记录数

SYS@dave2(db2)> select count(*) from dave;

  COUNT(*)

----------

   3080115

 

--查看索引信息

SYS@dave2(db2)> select index_name from dba_indexes where table_name='DAVE';

 

INDEX_NAME

------------------------------

IDX _PRCODE

IDX _STATE

IDX _INSERT

SYS_C005469

 

--创建一个备份表,下次使用

SYS@dave2(db2)> create table dave1 as select /*+parallel(t,3)*/ * from dave t;

Table created.

 

--查看执行计划

SYS@dave2(db2)> explain plan for delete from dave where time_insert<to_date('2011-5-1','yyyy-mm-dd');

 

 

SYS@dave2(db2)> select * from table(dbms_xplan.display);

 

PLAN_TABLE_OUTPUT

--------------------------------------------------------------------------------

Plan hash value: 2615685836

 

---------------------------------------------------------------------------

| id  | operation          | name | rows  | bytes | cost (%cpu)| time     |

---------------------------------------------------------------------------

|   0 | delete statement   |      |  1369k|    26m|  7916   (3)| 00:01:35 |

|   1 |  delete            | dave |       |       |            |          |

|*  2 |   table access full| dave |  1369k|    26m|  7916   (3)| 00:01:35 |

---------------------------------------------------------------------------

 

Predicate Information (identified by operation id):

 

PLAN_TABLE_OUTPUT

--------------------------------------------------------------------------------

---------------------------------------------------

 

   2 - filter("time_insert"<to_date('2011-05-01 00:00:00', 'yyyy-mm-dd              hh24:mi:ss'))

 

15 rows selected.

 

--查看走执行计划的大规模update 操作

SYS@dave2(db2)> explain plan for update dave d set getcard_code=10 where state=2;

 

 

Explained.

 

SYS@dave2(db2)> select * from table(dbms_xplan.display);

 

PLAN_TABLE_OUTPUT

--------------------------------------------------------------------------------

Plan hash value: 3706120077

 

-------------------------------------------------------------------------------

| id  | operation         | name      | rows  | bytes | cost (%cpu)| time     |

-------------------------------------------------------------------------------

|   0 | update statement  |           | 96254 |   469k|  2533   (1)| 00:00:31 |

|   1 |  update           | dave      |       |       |            |          |

|*  2 |   index range scan| idx_state | 96254 |   469k|   194   (2)| 00:00:03 |

-------------------------------------------------------------------------------

 

Predicate Information (identified by operation id):

 

PLAN_TABLE_OUTPUT

--------------------------------------------------------------------------------

---------------------------------------------------

 

   2 - access("STATE"=2)

 

14 rows selected.

 

--禁用索引

SYS@dave2(db2)> alter index idx_state unusable;

Index altered.

 

SYS@dave2(db2)> select status from dba_indexes where index_name='IDX_STATE';

STATUS

--------

UNUSABLE

--如果是对进行delete 操作,那么相关的索引要全部禁用才起作用。

 

 

--更新数据

SYS@dave2(db2)> update dave d set  state=10 where state=2;

101837 rows updated.

 

SYS@dave2(db2)> commit;

Commit complete.

 

--rebuild 索引

SYS@dave2(db2)> alter index idx_state rebuild;

Index altered.

 

Oracle alter index rebuild 说明

http://blog.csdn.net/tianlesoftware/archive/2011/06/12/6538928.aspx

 

 

-- 查看高水位

SYS@dave2(db2)> select num_rows,blocks,empty_blocks from dba_tables where table_name='DAVE';

  NUM_ROWS     BLOCKS EMPTY_BLOCKS

---------- ---------- ------------

   3080115      35350            0

 

num_rows 的值只有做过统计信息收集之后才有,如果该值与count(*) 差距太大,就说明需要重新进行收集了。

 

empty_blocks 参数只有使用analyze 收集统计信息才有,使用dbms_stats 收集不到这个参数的信息。 如果empty_blocks 较多,就说明有高水位了。

 

 

SYS@dave2(db2)> analyze table dave compute statistics;

Table analyzed.

 

SYS@dave2(db2)> select num_rows,blocks,empty_blocks from dba_tables where table_name='DAVE';

  NUM_ROWS     BLOCKS EMPTY_BLOCKS

---------- ---------- ------------

   3080115      35350         4585

 

有关统计信息更多内容参考:

       Oracle Statistic 统计信息 小结

       http://blog.csdn.net/tianlesoftware/archive/2009/10/14/4668723.aspx

 

--处理高水位

SYS@dave2(db2)> alter table dave move;

Table altered.

 

--move 会使所有索引失效,需要重新rebuild

SYS@dave2(db2)> select index_name,status from dba_indexes where table_name='DAVE';

INDEX_NAME                     STATUS

------------------------------ --------

IDX_PRCODE                     UNUSABLE

IDX_STATE                      UNUSABLE

IDX_INSERT                     UNUSABLE

SYS_C005469                    UNUSABLE

 

--rebuild 索引

SYS@dave2(db2)> alter index IDX_PRCODE rebuild;

Index altered.

 

SYS@dave2(db2)> alter index IDX_STATE rebuild;

Index altered.

 

SYS@dave2(db2)> alter index idx_insert rebuild;

Index altered.

 

SYS@dave2(db2)> alter index SYS_C005469 rebuild;

Index altered.

 

SYS@dave2(db2)> select index_name,status from dba_indexes where table_name='DAVE';

 

INDEX_NAME                     STATUS

------------------------------ --------

IDX_PRCODE                     VALID

IDX_STATE                      VALID

IDX_INSERT                     VALID

SYS_C005469                    VALID

 

-- 使用analyze 分析表

SYS@dave2(db2)>  analyze table dave compute statistics;

Table analyzed.

 

SYS@dave2(db2)> select num_rows,blocks,empty_blocks from dba_tables where table_name='DAVE';

 

  NUM_ROWS     BLOCKS EMPTY_BLOCKS

---------- ---------- ------------

   3080115      35487         4448

 

因为我这里没有进行大量的delete 操作,效果很有限。

 

 

 

 

-------------------------------------------------------------------------------------------------------

Blog http://blog.csdn.net/tianlesoftware

Email: dvd.dba@gmail.com

DBA1 群:62697716();   DBA2 群:62697977()   DBA3 群:62697850()  

DBA 超级群:63306533();  DBA4 群: 83829929  DBA5群: 142216823   

DBA6 群:158654907  聊天 群:40132017   聊天2群:69087192

--加群需要在备注说明Oracle表空间和数据文件的关系,否则拒绝申请

转载于:https://www.cnblogs.com/spring3mvc/archive/2011/06/25/2414594.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/410543.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

template标签_Django实战: 利用自定义模板标签实现仿CSDN博客月度归档

应网友慕之岩的请求&#xff0c;现提供下Django项目中如何使用自定义标签实现仿CSDN博客的月度归档(如下图所示)。要求按月统计每个月发表的博文篇数, 跳过空白月份&#xff0c;最后结果按发布时间逆序排列。点击每个月份可以看到详细博文列表清单。本文着重讲述如何实现&#…

[html] 如何关闭HTML页面在IOS下的键盘首字母自动大写?

[html] 如何关闭HTML页面在IOS下的键盘首字母自动大写&#xff1f; autocapitalize"none"个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

javascript的stack overflow

写一个很简单的页面和脚本 1<html>2<head>3<title>fanweixiaos test</title>4<script type"text/javascript">5function onclick() 6{ 7 alert(范维肖); 8} 9</script>10</head>11<body>12<input type"b…

GLSL 小細節

"if-else" statement ""gl_FragColor""變數名稱""算指令數,迴圈的指令數要展開來算,才是真的指令數!!!!!!!!!!!!!!"不能下太多很像有限制.........假如出現無謂的ERROR 要注意這點!!!!!!!!!!!转载于:https://www.cnblogs.com/Gam…

Hibernate中inverse属性与cascade属性

Hibernate集合映射中&#xff0c;经常会使用到"inverse"和"cascade"这两个属性。对于我这样&#xff0c;Hibernate接触不深和语文水平够烂的种种因素&#xff0c;发现这两个属性实在是难以理解&#xff0c;无奈只好将这个两个属性解释工作交给了Google和Ba…

h5 nan_h5页面在不同ios设备上的问题总结

最近在写嵌入到小程序webview的一个h5页面&#xff0c;是一个文章评论的功能&#xff0c;这个过程中&#xff0c;遇到很多兼容性的问题&#xff0c;在不同机型上的表现也很不一致&#xff0c;所以总结了以下这些问题&#xff0c;记录下来&#xff0c;以便以后查看。1、日期问题…

[html] 写一个左中右的满屏布局,左右固定220px,中间自适应并且要优先加载

[html] 写一个左中右的满屏布局&#xff0c;左右固定220px,中间自适应并且要优先加载 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initia…

C# 淘宝商品微信返利助手开发-(七)返利助手开发(5)如何将优惠券地址转为淘口令

系列教程一目录&#xff1a;返利助手原理 系列教程二目录&#xff1a;返利助手开放文档以及帐号申请地址 系列教程三目录&#xff1a;返利助手开发&#xff08;1&#xff09;API介绍 系列教程四目录&#xff1a;返利助手开发&#xff08;2&#xff09;淘宝分享的内容如何只取…

什么是活动策划5表

昨晚&#xff0c;看了《非你莫属》&#xff0c;黄欢提到活动策划的五表。我以前也没听说过&#xff0c;不过现场她也没说清楚&#xff0c;今在网上查了一下&#xff0c;从一个博客中搬过来&#xff0c;权作一个指导工作的一个知识点吧。 活动流程表&#xff1b; 任务分工表&…

ftp改为sftp_科普!一文详解 FTP、FTPS 与 SFTP 的原理

FTP、FTPS 与 SFTP 简介FTPFTP 即 文件传输协议&#xff08;英语&#xff1a;File Transfer Protocol 的缩写&#xff09;是一个用于计算机网络上在客户端和服务器之间进行文件传输的应用层协议。完整的 FTP 是由 FTP 服务器 和 FTP 客户端组成的&#xff0c;客户端可以将本地的…

动手学servlet(四) cookie和session

Cookie cookie是保存在客户端的一个“键值对”&#xff0c;用来存储用户的一些信息 cookie的应用&#xff1a; -在电子商务会话中标识用户 -对网站进行定制&#xff0c;比如你经常浏览哪些内容&#xff0c;就展示哪些页面给你 -网站广告&#xff0c;比如百度联盟&#xff0c;你…

[html] html标签中的lang属性有什么作用?

[html] html标签中的lang属性有什么作用&#xff1f; 根据lang属性来设定不同语言的css样式&#xff0c;或者字体告诉搜索引擎做精确的识别让语法检查程序做语言识别帮助翻译工具做识别帮助网页阅读程序做识别等等个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识…

【C++ 学习笔记】:STL-map

查找 map<int,int>map_test;map_test.insert(pair<int,int>(1,2));map_test.insert(pair<int,int>(1,3));map_test.insert(pair<int,int>(2,2));inta map_test[1];intb map_test[3];map<int,int>::iterator p map_test.find(4);if(p map_test.en…

[html] 说说base标签有什么作用?

[html] 说说base标签有什么作用&#xff1f; base标签为页面上的所有链接规定默认地址. 例如<head> <base href"http://h-camel.com/show/" /> </head>//略过其中结构<a href"2679.html">说说base标签有什么作用</a>个人简…

16进制 转为图片 php_Python 十六进制hex-bytes-str之间的转换和Bcc码的生成

前言近期做测试模拟器用到了hex-bytes-str之间的转换bcc码的校验&#xff0c;这里总结了一些方法。实例直接上代码转为十六进制&#xff08;Hex&#xff09;字符串def 执行代码&#xff1a;方法&#xff1a;getStringFromNumber(size,value)参数一为生成几个batys&#xff0c;参…

C# 淘宝商品微信返利助手开发-(四)返利助手开发(2)淘宝分享的内容如何只取淘口令

系列教程一目录&#xff1a;返利助手原理 系列教程二目录&#xff1a;返利助手开放文档以及帐号申请地址 系列教程三目录&#xff1a;返利助手开发&#xff08;1&#xff09;API介绍 系列教程四目录&#xff1a;返利助手开发&#xff08;2&#xff09;淘宝分享的内容如何只取…

[html] 在head标签中必不少的是什么?

[html] 在head标签中必不少的是什么&#xff1f; 根据w3c文档&#xff0c;title是head 部分中唯一必需的元素。个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

推荐一个国外SaaS产品-Olark

Olark www.olark.com 是国外非常出名的一个在线客服工具。 现在国内很多人创业失败的原因是&#xff1a;什么都想自己做&#xff0c;不利用现有资源&#xff0c;结果造成做出来的东西什么都有&#xff0c;什么都不好用。 我们应该好好学习国外的小团队&#xff0c;他们只做一件…

python sftp_python中实现sftp

python中想要实现sftp的话可以使用paramiko模块 paramiko很强大&#xff0c;通过python实现SSH协议。可以做到ssh远程登录&#xff0c;sftp上传下载文件。 sftp的实现 1.通过密码口令认证#!/usr/bin/python # -*- coding:utf-8 -*- import paramiko remotedir "/app/ftpu…

C# 淘宝商品微信返利助手开发-(三)返利助手开发(1)API介绍

系列教程一目录&#xff1a;返利助手原理 系列教程二目录&#xff1a;返利助手开放文档以及帐号申请地址 系列教程三目录&#xff1a;返利助手开发&#xff08;1&#xff09;API介绍 系列教程四目录&#xff1a;返利助手开发&#xff08;2&#xff09;淘宝分享的内容如何只取…