INSERT的统计信息以及等待等

select * from v$segment_statistics where OBJ# IN('56308','56307') order by VALUE desc;
select c.sid,b.NAME,a.VALUE from v$sesstat a ,v$statname b ,(select SID from v$mystat where rownum<=1) c
where a.SID=c.sid and a.STATISTIC#=b.STATISTIC# and (b.NAME like 'physical%' or b.name like '%read%' or B.NAME like   '%undo%' or b.name like '%redo%') and a.VALUE<>0 ;
select * from v$session_event a,(select SID from v$mystat where rownum<=1) b
where a.SID=b.sid order by TIME_WAITED desc;

测试目的
1、测试数据,在进行插入INSERT的时候(常规)有索引和没有索引的对象的统计信息,会话的统计信息,会话的等待事件

 

测试1

create table test_a
(it int,
 a varchar2(20),
 b varchar2(20),
 c varchar2(20),
 d varchar2(20),
 z varchar2(20),
 x varchar2(20),
 m varchar2(20));
 
create table test_b
(it int,
 a varchar2(20),
 b varchar2(20),
 c varchar2(20),
 d varchar2(20),
 z varchar2(20),
 x varchar2(20),
 m varchar2(20));

create index test_b_i
on test_b(it);

建立表然后查看其OBJECT_ID
SQL> select object_name,object_id from dba_objects where object_name in ('TEST_A','TEST_B','TEST_B_I');
 
OBJECT_NAME                                                                       OBJECT_ID
-------------------------------------------------------------------------------- ----------
TEST_B_I                                                                              56399
TEST_B                                                                                56398
TEST_A                                                                                56397
通过
 select * from v$segment_statistics where OBJ# IN('56399','56398','56397') order by VALUE desc;
 可以查看基本是没有什么统计信息的。

开启2个会话
会话1 sid
SQL> select * from v$mystat where rownum<=1;
 
       SID STATISTIC#      VALUE
---------- ---------- ----------
       311          0          1
会话2 sid
SQL> select * from v$mystat where rownum<=1;
 
       SID STATISTIC#      VALUE
---------- ---------- ----------
       318          0          1
会话1 311 进行插入数据,注意表TEST_A没有索引
declare 
   i number(10);
begin
  for i in 1..4000000
  loop
  insert into test_a
   values(i,'aa','bb','cc','dd','zz','xx','mm');
  end loop;
end;
完成后,查看本表的大小为大约144MB

我注意到我的电脑上执行了500秒,当然我自己的笔记本我查看我的ORCALE I/O大约读写总共每秒8M,这和服务器没法比,但是我们做测试足够了,
我们查看本会话的等待信息

查看会话的UNDO REDO 物理 逻辑读取
 select c.sid,b.NAME,a.VALUE from v$sesstat a ,v$statname b ,(select SID from v$mystat where rownum<=1) c
 where a.SID=c.sid and a.STATISTIC#=b.STATISTIC# and (b.NAME like 'physical%' or b.name like '%read%' or B.NAME like   '%undo%' or b.name like '%redo%') and a.VALUE<>0 ;
 
       SID NAME                                                                  VALUE
---------- ---------------------------------------------------------------- ----------
       311 session logical reads                                               4206665
       311 physical read total IO requests                                         310
       311 physical read total bytes                                           4833280
       311 physical write total IO requests                                        294
       311 physical write total multi block requests                               140
       311 physical write total bytes                                        148979712 ---表的大小
       311 physical reads                                                            2
       311 physical reads cache                                                      2
       311 physical read IO requests                                                 2
       311 physical read bytes                                                   16384
       311 redo synch writes                                                         1
       311 redo entries                                                        4057334
       311 redo size                                                        1139031256 --生成的日志量达到1G
       311 redo buffer allocation retries                                           50
       311 redo log space requests                                                  48
       311 redo log space wait time                                                314
       311 redo ordering marks                                                   36035
       311 redo subscn max counts                                                50228
       311 undo change vector size                                           255930480--生成的UNDO达到240M
       311 data blocks consistent reads - undo records applied                      88
 
       SID NAME                                                                  VALUE
---------- ---------------------------------------------------------------- ----------
       311 no work - consistent read gets                                        38616
       311 rollbacks only - consistent read gets                                    88
       311 rollback changes - undo records applied                                  28

SQL> select OBJECT_NAME, STATISTIC_NAME ,value from v$segment_statistics where OBJ# IN('56397') order by VALUE desc;
 
OBJECT_NAME                    STATISTIC_NAME                                                        VALUE
------------------------------ ---------------------------------------------------------------- ----------
TEST_A                         space allocated                                                   150994944 -表的大小144MB
TEST_A                         logical reads                                                       4081600 400W行收
TEST_A                         db block changes                                                    4078592 400W行数据
TEST_A                         physical writes                                                       17543 *8K=144M

而在等待事件方面
 
       SID EVENT                             TIME_WAITED_MICRO
---------- ---------------------------------------------------
       311 SQL*Net message from client               407159322
       311 control file sequential read                7920935
       311 Data file init write                        4506108
       311 log file switch completion                  3157821
       311 db file sequential read                     1668481
       311 events in waitclass Other                   1474582
       311 log buffer space                             322594
       311 control file parallel write                   39322
       311 db file single write                          15686
       311 latch: shared pool                             7792
       311 undo segment extension                          683
       311 SQL*Net message to client                        70
       311 buffer busy waits                               567
       311 latch: cache buffers chains                       5

视乎没有过多的等待,
再次查看时间模型
SQL> select * from v$sess_time_model where sid=311 order by  value desc;
 
       SID    STAT_ID STAT_NAME                                                             VALUE
---------- ---------- ---------------------------------------------------------------- ----------
       311 3649082374 DB time                                                           499403928
       311 2821698184 sql execute elapsed time                                          499158001
       311 2748282437 DB CPU                                                            470820708 --耗费在这里
       311 2643905994 PL/SQL execution elapsed time                                      15402111
       311 1431595225 parse time elapsed                                                   208995
       311  372226525 hard parse elapsed time                                              191950
       311 1311180441 PL/SQL compilation elapsed time                                       31235
       311 1990024365 connection management call elapsed time                               22499
       311 1159091985 repeated bind elapsed time                                             1142
原来ORACLE认为事件都花费到了DB CPU,在这里可以看到insert语句实际生成的日志量很大,主要耗时主要在于写日志和UNDO生成,所以减少日志生成量是行之有效的办法
这里如果表144M+240M(undo)+1100m(LOGFILE),而我的硬盘WIDNOWS资源管理器显示I/O写入才4M-5M每秒,算一下耗费为371秒,当然还有一些其他的等待和物理逻辑读读取
肯定有一些,这样如果我们降低了1100M的logfile的写那么速度将大大提高,当然没有什么办法,除非直接路径读,这仅仅在NOLOGING的APPEND才有效。

会话2 318 进行插入数据,注意表TEST_B有索引

SQL> select sum(blocks)*8/1024 from dba_extents where segment_name='TEST_B';
 
SUM(BLOCKS)*8/1024
------------------
               144
 
SQL> select sum(blocks)*8/1024 from dba_extents where segment_name='TEST_B_I';
 
SUM(BLOCKS)*8/1024
------------------
                72
完成后表依然是144M索引72M

执行847秒

SQL>  select c.sid,b.NAME,a.VALUE from v$sesstat a ,v$statname b ,(select SID from v$mystat where rownum<=1) c
  2   where a.SID=c.sid and a.STATISTIC#=b.STATISTIC# and (b.NAME like 'physical%' or b.name like '%read%' or B.NAME like   '%undo%' or b.name like '%redo%') and a.VALUE<>0 ;
 
       SID NAME                                                                  VALUE
---------- ---------------------------------------------------------------- ----------
       318 session logical reads                                              16118622 --是TABLE和INDEX逻辑读的和,下面能够看到
       318 physical read total IO requests                                         493
       318 physical read total bytes                                           7643136
       318 physical write total IO requests                                        462
       318 physical write total multi block requests                               220
       318 physical write total bytes                                        234110976 --144+72(表和索引大小的和)
       318 physical reads                                                            9
       318 physical reads cache                                                      9
       318 physical read IO requests                                                 9
       318 physical read bytes                                                   73728
       318 redo synch writes                                                         1
       318 redo entries                                                        8144541
       318 redo size                                                        2163473416  --日志量 比不加索引基本加了一倍 2G
       318 redo buffer allocation retries                                          100
       318 redo log space requests                                                  95
       318 redo log space wait time                                                580
       318 redo ordering marks                                                   96246
       318 redo subscn max counts                                               117359
       318 undo change vector size                                           659101200 -UNDO量  600M
       318 data blocks consistent reads - undo records applied                     167
 
       SID NAME                                                                  VALUE
---------- ---------------------------------------------------------------- ----------
       318 no work - consistent read gets                                        60478
       318 rollbacks only - consistent read gets                                   167
       318 rollback changes - undo records applied                                 116
      
SQL> select OBJECT_NAME, STATISTIC_NAME ,value from v$segment_statistics where OBJ# IN('56398','56399') order by VALUE desc;
 
OBJECT_NAME                    STATISTIC_NAME                                                        VALUE
------------------------------ ---------------------------------------------------------------- ----------
TEST_B                         space allocated                                                   150994944 --144M
TEST_B_I                       space allocated                                                    75497472 ---72M
TEST_B_I                       space used                                                         59663936
TEST_B_I                       logical reads                                                      11730176 ---每次访问IDNEX 2次I/O 一次访问索引找到ROWID一次通过ROWID找到块
TEST_B_I                       db block changes                                                    4095232
TEST_B                         logical reads                                                       4084896 -- 行数  
TEST_B                         db block changes                                                    4077216
TEST_B                         physical writes                                                       17598
TEST_B_I                       physical writes                                                        8626
TEST_B_I                       physical reads                                                            2
TEST_B                         physical reads                                                            1

SQL> select *
  2    from v$session_event a
  3   where a.SID = 318
  4   order by TIME_WAITED desc;
 
       SID EVENT                                                           TIME_WAITED_MICRO  WAIT_CLASS
---------- ---------------------------------------------------------------------------------  ----------------------------------------------------------------
       318 SQL*Net message from client                                            1319113152  Idle
       318 control file sequential read                                              7206186  System I/O
       318 log file switch completion                                                5741095  Configuration
       318 Data file init write                                                      4569783  User I/O
       318 db file sequential read                                                   2524870  User I/O
       318 events in waitclass Other                                                 1130755  Other
       318 log buffer space                                                           390022  Configuration
       318 control file parallel write                                                 47887  System I/O
       318 db file single write                                                        15586  User I/O
       318 undo segment extension                                                          2  Configuration
       318 latch: shared pool                                                            115  Concurrency
       318 SQL*Net message to client                                                      54  Network
       318 latch: cache buffers chains                                                     2  Concurrency
       318 buffer busy waits                                                              63  Concurrency
 
SQL> select * from v$sess_time_model where sid=318 order by  value desc;
 
       SID    STAT_ID STAT_NAME                                                             VALUE
---------- ---------- ---------------------------------------------------------------- ----------
       318 3649082374 DB time                                                           847221759
       318 2821698184 sql execute elapsed time                                          847104972
       318 2748282437 DB CPU                                                            815738287
       318 2643905994 PL/SQL execution elapsed time                                      15512073
       318 1431595225 pars e time elapsed                                                   671462
       318  372226525 hard parse elapsed time                                              649587
       318 1311180441 PL/SQL compilation elapsed time                                      100303
       318 1990024365 connection management call elapsed time                                7010
       318 1159091985 repeated bind elapsed time                                              714
同样判断这里,大量的时间实际上是耗在写UNDO和LOGFILE,算一下
SQL> select (144+72+600+2200)/4 from dual;
 
(144+72+600+2200)/4
-------------------
                754
大约754秒,而整个语句也才执行了850秒所以INSERT 大量的数据一定的耗时在LOGFILE,UNDO的生成,特别厉害。这也是为什么NOLOGGING+APPEND的insert会那么块的原因。因为没LOGFILE和UNDO

下面是INSERT APPEND的信息你能看到米有UNDO和LOGFILE基本

SQL> select c.sid,b.NAME,a.VALUE from v$sesstat a ,v$statname b ,(select SID from v$mystat where rownum<=1) c
  2     where a.SID=c.sid and a.STATISTIC#=b.STATISTIC# and (b.NAME like 'physical%' or b.name like '%read%' or B.NAME like   '%undo%' or b.name like '%redo%') and a.VALUE<>0 ;
 
       SID NAME                                                                  VALUE
---------- ---------------------------------------------------------------- ----------
       317 session logical reads                                                 91460
       317 physical read total IO requests                                        1482
       317 physical read total multi block requests                               1121
       317 physical read total bytes                                         148881408
       317 physical write total IO requests                                        856
       317 physical write total multi block requests                               690
       317 physical write total bytes                                        293068800
       317 physical reads                                                        17552
       317 physical reads cache                                                  17552
       317 physical read IO requests                                              1157
       317 physical read bytes                                               143785984
       317 physical writes                                                       17565
       317 physical writes direct                                                17565
       317 physical write IO requests                                              550
       317 physical write bytes                                              143892480
       317 physical writes non checkpoint                                        17565
       317 redo synch writes                                                         1
       317 physical reads cache prefetch                                         16395
       317 redo entries                                                          18405
       317 redo size                                                           1342764
 
       SID NAME                                                                  VALUE
---------- ---------------------------------------------------------------- ----------
       317 redo ordering marks                                                      28
       317 redo subscn max counts                                                17520
       317 undo change vector size                                               11208
       317 data blocks consistent reads - undo records applied                      17
       317 no work - consistent read gets                                        37812
       317 cleanouts only - consistent read gets                                 17488
       317 rollbacks only - consistent read gets                                    17
       317 rollback changes - undo records applied                                  28
 
         

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7728585/viewspace-773627/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/7728585/viewspace-773627/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值