本篇文章是MOVE和CAST比较的续篇,主要是对于第一篇中没有涉及到的redo和undo的情况加以叙述
1.查询move产生redo和undo量
SQL>
alter
system flush buffer_cache;
System altered.
SQL>
alter
system flush shared_pool;
System altered.
SQL>
select
a.
name
, b.value
2
from
v$statname a, v$mystat b
3
where
a.statistic# = b.statistic#
4
and
lower
(a.
name
)
in
5 (
'redo size'
,
'undo change vector size'
);
NAME
VALUE
---------------------------------------- ----------
redo
size
844
undo change vector
size
136
SQL>
ALTER
TABLE
CHF.T_XIFENFEI_MOVE
MOVE
TABLESPACE TEST_OCP;
Table
altered.
SQL>
select
a.
name
, b.value
2
from
v$statname a, v$mystat b
3
where
a.statistic# = b.statistic#
4
and
lower
(a.
name
)
in
5 (
'redo size'
,
'undo change vector size'
);
NAME
VALUE
---------------------------------------- ----------
redo
size
873074928
undo change vector
size
110748
--产生redo
SQL>
select
873074928-844
"redo size"
from
dual;
redo
size
----------
873074084
--产生undo
SQL>
select
110748-136
"undo size"
from
dual;
undo
size
----------
110612
|
2.查询cast产生redo和undo 大小
SQL>
alter
system flush buffer_cache;
System altered.
SQL>
alter
system flush shared_pool;
System altered.
SQL>
select
a.
name
, b.value
2
from
v$statname a, v$mystat b
3
where
a.statistic# = b.statistic#
and
lower
(a.
name
)
in
4 5 (
'redo size'
,
'undo change vector size'
);
NAME
VALUE
---------------------------------------------------------------- ----------
redo
size
776
undo change vector
size
136
SQL>
create
table
chf.t_xifenfei_move_new tablespace users
2
as
3
select
*
from
chf.t_xifenfei_move;
Table
created.
SQL>
select
a.
name
, b.value
2
from
v$statname a, v$mystat b
3
where
a.statistic# = b.statistic#
4
and
lower
(a.
name
)
in
5 (
'redo size'
,
'undo change vector size'
);
NAME
VALUE
---------------------------------------------------------------- ----------
redo
size
873017580
undo change vector
size
115340
--产生redo
SQL>
select
873017580-776
"redo size"
from
dual;
redo
size
----------
873016804
--产生undo
SQL>
select
115340-136
"undo size"
from
dual;
undo
size
----------
115204
|
3.两次实验比较
--redo(分母使用cast操作产生redo)
SQL>
select
873074084-873016804
"redo"
from
dual;
redo
----------
57280
SQL>
select
57280/873074084
from
dual;
57280/873074084
---------------
.000065607
--undo(分母使用cast操作产生undo)
SQL>
select
110612-115204 undo
from
dual;
undo
-------------
-4592
SQL>
select
4592/115204
from
dual;
4592/115204
-----------
.039859727
|
通过这两个的比较可以知道move操作产生的redo多了万分之七不到,undo少了百分之四,这些也是在实验允许的误差范围内,再说move操作还包括了cast的一些后续步骤在其中,所以通过这个验证和上一篇试验(MOVE和CAST比较),基本上可以大胆操作move操作的本质就是全表扫描+append插入数据,操作过程中产生的redo大小几乎和表本身大小(872415232)相等,这个证明,move和cast都是以logging模式运行(数据库本身是非force logging模式)

315

被折叠的 条评论
为什么被折叠?



