1.臨時表和普通表日誌量產生的對比
1.1臨時表的創建
在第一個會話中創建session1
-創建session級別的臨時表
SQL> create global temporary table tb_temp1 (id integer,name varchar2(50)) on commit preserve rows;
Table created.
--創建事務級別的臨時表
SQL> create global temporary table tb_temp2 (id integer,name varchar2(50)) on commit delete rows;
Table created.
1.2創建普通表
在第二個會話中創建session2
SQL> create table tb_test(id integer,name varchar2(50)) tablespace tbs_xb;
Table created
1.3在session1中執行如下操作
--查看當前日誌
SQL> select a.name,
2 b.value
3 from v$statname a
4 join v$mystat b
5 on a.statistic#=b.statistic#
6 where a.name='redo size';
NAME VALUE
-------------------- ----------
redo size 50104
SQL> begin
2 for i in 1..1000000 loop
3 insert into tb_temp1 values(i,'striverzhaolizheng'||i);
4 end loop;
5 end;
6 /
PL/SQL procedure successfully completed.
SQL> commit;
Commit complete.
SQL> select count(*) from tb_temp1;
COUNT(*)
----------
1000000
SQL> select a.name,
2 b.value
3 from v$statname a
4 join v$mystat b
5 on a.statistic#=b.statistic#
6 where a.name='redo size';
NAME VALUE
-------------------- ----------
redo size 140639384
SQL> select (140639384-50104)/1024/1024 from dual;
(140639384-50104)/1024/1024
---------------------------
134.076385
產生了大約134MB的日誌
1.4在session2中執行如下操作
SQL> select a.name,
2 b.value
3 from v$statname a
4 join v$mystat b ona.statistic#=b.statistic#
5 where a.name='redo size';
NAME VALUE
-------------------- ----------
redo size 15408
SQL> begin
2 for i in 1..1000000 loop
3 insert into tb_test values(i,'striverzhaolizheng'||i);
4 end loop;
5 end;
6 /
PL/SQL procedure successfully completed.
SQL> commit;
Commit complete.
SQL> select count(*) from tb_test;
COUNT(*)
----------
1000000
SQL> select a.name,
2 b.value
3 from v$statname a
4 join v$mystat b on a.statistic#=b.statistic#
5 where a.name='redo size';
NAME VALUE
-------------------- ----------
redo size 274658276
SQL> select (274658276-15408)/1024/1024 from dual;
(274658276-15408)/1024/1024
---------------------------
261.919849
產生了大約262MB的日誌
1.6驗證redolog生成日誌量是否真實
SQL> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARCHIV STATUS FIRST_CHANGE# FIRST_TIME
-------------------- ---------- ---------- ---------- ------ ---------- -------------------------
1 1 29 52428800 1 NO CURRENT 585726 22-MAY-13
2 1 27 52428800 1 NO INACTIVE 585566 22-MAY-13
3 1 28 52428800 1 NO INACTIVE 585647 22-MAY-13
SQL> selecta.name,
2 b.value
3 from v$statname a
4 join v$mystat b
5 on a.statistic#=b.statistic#
6 where a.name='redo size';
NAME VALUE
------------------------------------------------------------------------------------------------------------------------------------------
redo size 0
SQL> begin
2 fori in 1..1000000 loop
3 insert into tb_temp1 values(i,'striverzhaolizheng'||i);
4 end loop;
5 end;
6 /
PL/SQL procedure successfully completed.
SQL> select a.name,
2 b.value
3 from v$statname a
4 join v$mystat b
5 on a.statistic#=b.statistic#
6 where a.name='redo size';
NAME VALUE
------------------------------------------------------------------------------------------------------------------------------------------
redo size 140565400
SQL> select 140565400/1024/1024 from dual;
140565400/1024/1024
-------------------
134.053612
共生成大約134MB的數據
SQL> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARCHIV STATUS FIRST_CHANGE# FIRST_TIME
-------------------- ---------- ---------- ---------- ------ ---------- -------------------------
1 1 29 52428800 1 NO INACTIVE 585726 22-MAY-13
2 1 30 52428800 1 NO ACTIVE 588973 22-MAY-13
3 1 31 52428800 1 NO CURRENT 589025 22-MAY-13
Sequence#從29變爲了31,每一個日誌文件的大小是50MB,大致可以推算出日誌應該是134MB.