当前位置:  数据库>oracle

Delete删除表数据时对性能的影响分析

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

    本文导语:  上一篇文章中提到(),当我们用delete删除数据时,因为无法降低高水位,对表做全表扫描时会带来数据库性能问题,而truncate可以大大改善这一状况,下面来看测试   SQL> conn zlm/zlm Connected.   --创建表之前先记录下剩余表空...

上一篇文章中提到(),当我们用delete删除数据时,因为无法降低高水位,对表做全表扫描时会带来数据库性能问题,而truncate可以大大改善这一状况,下面来看测试
 
SQL> conn zlm/zlm
Connected.
 
--创建表之前先记录下剩余表空间大小
SQL> select * from dba_free_space where tablespace_name='ZLM';
 
TABLESPACE_NAME                   FILE_ID   BLOCK_ID      BYTES     BLOCKS RELATIVE_FNO
------------------------------ ---------- ---------- ---------- ---------- ------------
ZLM                                     6              6272            6
 
--创建一个100W行的大表
SQL> create table test1(int number);
 
Table created.
 
SQL> analyze table test1 compute statistics;
 
Table analyzed.
 
SQL> select table_name,num_rows,blocks,empty_blocks,avg_row_len,last_analyzed from dba_tables where table_name like 'TEST%';
 
TABLE_NAME                       NUM_ROWS     BLOCKS EMPTY_BLOCKS AVG_ROW_LEN LAST_ANALYZED
------------------------------ ---------- ---------- ------------ ----------- ------------------
TEST1                                           0 27-SEP-14
 
 
SQL> declare
  2  i number := 0;
  3  begin
  4  for i in 1 .. 1000000 loop
  5  insert into test1 values (i);
  6  end loop;
  7  commit;
  8  end;
  9  /
 
PL/SQL procedure successfully completed.
 
SQL> select count(*) from test1;
 
  COUNT(*)
----------
 
--查看高水位状况
SQL> select header_file,header_block,bytes,blocks,extents from dba_segments where segment_name like 'TEST%';
 
HEADER_FILE HEADER_BLOCK      BYTES     BLOCKS    EXTENTS
----------- ------------ ---------- ---------- ----------
          6            13631488               28
 
SQL> select block_id,extent_id,bytes,blocks from dba_extents where segment_name like 'TEST%';
 
  BLOCK_ID  EXTENT_ID      BYTES     BLOCKS
---------- ---------- ---------- ----------
               0      65536          8
       136          1      65536          8
       144          2      65536          8
       152          3      65536          8
       160          4      65536          8
       168          5      65536          8
       176          6      65536          8
       184          7      65536          8
       192          8      65536          8
       200          9      65536          8
       208         10      65536          8
       216         11      65536          8
       224         12      65536          8
       232         13      65536          8
       240         14      65536          8
       248         15      65536          8
       256         16    1048576        128
       384         17    1048576        128
       512         18    1048576        128
       640         19    1048576        128
       768         20    1048576        128
       896         21    1048576        128
      1024         22    1048576        128
      1152         23    1048576        128
      1280         24    1048576        128
      1408         25    1048576        128
      1536         26    1048576        128
              27    1048576        128
 
SQL> select * from dba_free_space where tablespace_name='ZLM';
 
TABLESPACE_NAME                   FILE_ID   BLOCK_ID      BYTES     BLOCKS RELATIVE_FNO
------------------------------ ---------- ---------- ---------- ---------- ------------
ZLM                                     6       1792         4608            6
 
SQL> set autot trace
SQL> select count(*) from test1;
 
 
Execution Plan
----------------------------------------------------------
Plan hash value: 3896847026
 
--------------------------------------------------------------------
| Id  | Operation          | Name  | Rows  | Cost (%CPU)| Time     |
--------------------------------------------------------------------
|   0 | SELECT STATEMENT   |       |     1 |     2   (0)| 00:00:01 |
|   1 |  SORT AGGREGATE    |       |     1 |            |          |
|   2 |   TABLE ACCESS FULL| TEST1 |     1 |     2   (0)| 00:00:01 |
--------------------------------------------------------------------
 
 
Statistics
----------------------------------------------------------
          0  recursive calls
          1  db block gets
          0  physical reads
          0  redo size
        526  bytes sent via SQL*Net to client
        519  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed
 
SQL> delete from test1;
 
 
 
Execution Plan
----------------------------------------------------------
Plan hash value: 2642947686
 
--------------------------------------------------------------------
| Id  | Operation          | Name  | Rows  | Cost (%CPU)| Time     |
--------------------------------------------------------------------
|   0 | DELETE STATEMENT   |       |     1 |     2   (0)| 00:00:01 |
|   1 |  DELETE            | TEST1 |       |            |          |
|   2 |   TABLE ACCESS FULL| TEST1 |     1 |     2   (0)| 00:00:01 |
--------------------------------------------------------------------
 
 
Statistics
----------------------------------------------------------
          8  physical reads
        847  bytes sent via SQL*Net to client
        769  bytes received via SQL*Net from client
          3  SQL*Net roundtrips to/from client
          1  sorts (memory)
          0  sorts (disk)
    1000000  rows processed
 
用delete删除100W行数据的大表TEST1时,产生了大量的redo(2亿多),另外还有很多一致性读(1953),读取了100多W个数据块,814次递归调用,可以看到,用delete删除表记录,对数据库的性能消耗是很大的,尤其是当delete大量行的时候
 
SQL> set autot off
SQL> select count(*) from test1;
 
  COUNT(*)
----------
         
 
SQL> select header_file,header_block,bytes,blocks,extents from dba_segments where segment_name like 'TEST%';
 
HEADER_FILE HEADER_BLOCK      BYTES     BLOCKS    EXTENTS
----------- ------------ ---------- ---------- ----------
          6            13631488               28

更多详情见请继续阅读下一页的精彩内容:


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间java.awt类event的类成员方法: delete定义及介绍
  • php开源软件 iis7站长之家
  • java命名空间javax.tools类simplejavafileobject的类成员方法: delete定义及介绍
  • C++中delete和delete[]的区别说明
  • java命名空间javax.tools接口fileobject的类成员方法: delete定义及介绍
  • 有关new和delete的问题
  • java命名空间javax.swing.event类tablemodelevent的类成员方法: delete定义及介绍
  • delete from 表名与truncate table 表名区别
  • java命名空间javax.accessibility接口accessibletablemodelchange的类成员方法: delete定义及介绍
  • 是delete的问题还是系统问题
  • java命名空间javax.accessibility接口accessibleeditabletext的类成员方法: delete定义及介绍
  • PHP PDO数据库类delete操作
  • java命名空间javax.swing类jspinner.accessiblejspinner的类成员方法: delete定义及介绍
  • 用qt寫的程序中有很多new,為什麼不常看到delete?
  • java命名空间javax.tools类forwardingfileobject<fextendsfileobject>的类成员方法: delete定义及介绍
  • 在CMP中怎样编写类似于Update,delete等操作命令
  • java命名空间java.awt.event类keyevent的类成员方法: vk_delete定义及介绍
  • 关于QT中的new和delete
  • java命名空间javax.swing.text类jtextcomponent.accessiblejtextcomponent的类成员方法: delete定义及介绍
  • tar命令的-r和--delete子命令该如何使用啊?
  • java命名空间java.io类file的类成员方法: delete定义及介绍
  • linux 频繁new/delete 内存持续增长


  • 站内导航:


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

    ©2012-2021,