通過shrink操作重整表的實驗
實驗目的:
1)shrink 操作是否產生redo。
2)shrink操作PK重建表
實驗一:shrink 操作是否產生redo
SQL>conn scott/tiger
SQL> set serveroutput on
SQL> EXEC show_space_assm('TEST2','SCOTT');
free space 0-25% Blocks:................0
free space 25-50% Blocks:...............260
free space 50-75% Blocks:...............145
free space 75-100% Blocks:..............81
Full Blocks:............................9958
Unformatted blocks:.....................0
PL/SQL 過程已成功完成。
由上輸出可以知道這個表存在shrink的餘地。
SQL> select a.name,b.value from v$statname a,v$mystat b where a.statistic#=b.statistic# and a.name='redo size';
NAME VALUE
---------------------------------------------------------------- ----------
redo size 664
SQL> alter table test2 enable row movement;
表已更改。
SQL> alter table test2 shrink space cascade;
表已更改。
SQL> select a.name,b.value from v$statname a,v$mystat b where a.statistic#=b.statistic# and a.name='redo size';
NAME VALUE
---------------------------------------------------------------- ----------
redo size 15481444
SQL> EXEC show_space_assm('TEST2','SCOTT');
free space 0-25% Blocks:................2
free space 25-50% Blocks:...............2
free space 50-75% Blocks:...............0
free space 75-100% Blocks:..............0
Full Blocks:............................10155
Unformatted blocks:.....................0
PL/SQL 過程已成功完成。
SQL> spool off
由於是我的測試庫,只有我一個會話當前。由實驗可得出結論:shrink操作會產生redo記錄。這個實驗中產生了(15481444-664/)/1024/1024=15M的日誌。
實驗二:shrink表以後,空間的利用率跟重建表哪個操作更佳。
SQL> EXEC show_space_assm('TEST1','SCOTT');
free space 0-25% Blocks:................0
free space 25-50% Blocks:...............0
free space 50-75% Blocks:...............1
free space 75-100% Blocks:..............0
Full Blocks:............................10338
Unformatted blocks:.....................0
PL/SQL 過程已成功完成。
SQL> SELECT blocks FROM dba_tables WHERE table_name='TEST1';
BLOCKS
----------
10339
shrink前,此表的塊數十10339
SQL> delete from test1 where object_id like '14%';
已刪除17760行。
SQL> commit;
SQL> EXEC show_space_assm('TEST1','SCOTT');
PL/SQL 過程已成功完成。
SQL> EXEC show_space_assm('TEST1','SCOTT');
free space 0-25% Blocks:................51
free space 25-50% Blocks:...............179
free space 50-75% Blocks:...............127
free space 75-100% Blocks:..............96
Full Blocks:............................9886
Unformatted blocks:.....................0
PL/SQL 過程已成功完成。
SQL> alter table test1 enable row movement;
表已更改。
SQL> alter table test1 shrink space cascade;
表已更改。
SQL> BEGIN
2 DBMS_STATS.GATHER_TABLE_STATS(OWNNAME => 'SCOTT',
3 TABNAME => 'TEST1',
4 CASCADE => TRUE,
5 METHOD_OPT => 'FOR ALL COLUMNS SIZE auto');
6 END;
7 /
PL/SQL 過程已成功完成。
SQL> SELECT blocks FROM dba_tables WHERE table_name='TEST1';
BLOCKS
----------
10064
shrink後,此表的塊數下降到10064。
看看重建表的塊數是多少。
SQL> create table test2 as select * from test1;
表已建立。
SQL> BEGIN
2 DBMS_STATS.GATHER_TABLE_STATS(OWNNAME => 'SCOTT',
3 TABNAME => 'TEST2',
4 CASCADE => TRUE,
5 METHOD_OPT => 'FOR ALL COLUMNS SIZE auto');
6 END;
7 /
PL/SQL 過程已成功完成。
SQL> SELECT blocks FROM dba_tables WHERE table_name='TEST2';
BLOCKS
----------
10340
SQL> set serveroutput on
SQL> EXEC show_space_assm('TEST2','SCOTT');
free space 0-25% Blocks:................0
free space 25-50% Blocks:...............0
free space 50-75% Blocks:...............0
free space 75-100% Blocks:..............0
Full Blocks:............................10193
Unformatted blocks:.....................0
PL/SQL 過程已成功完成。
SQL> spool off
從實驗看出:
shrink後,塊的數量從10339降低到了10064。
重新建表後,塊的數量為10340。
看來shrink操作重整表還是蠻不錯的,不過日誌量還是蠻大的。
還有點沒想明白。為什麼重建表後,竟然會比shrink前還大呢?
重建後10340>shrink前的10339.
我以為是create table test2 as。。。。。 語句的問題。
浴室我把test2表shrink,重新分析表test2後,還是10340大小。
在這一點上有點暈。
不過我又執行了一下show_space
SQL> EXEC show_space_assm('TEST2','SCOTT');
free space 0-25% Blocks:................0
free space 25-50% Blocks:...............0
free space 50-75% Blocks:...............0
free space 75-100% Blocks:..............0
Full Blocks:............................10193
Unformatted blocks:.....................0
為什麼show_space和user_tables的block相差這麼多呢?
[ 本帖最後由 wei-xh 於 2010-5-2 20:48 編輯 ]
1)shrink 操作是否產生redo。
2)shrink操作PK重建表
實驗一:shrink 操作是否產生redo
SQL>conn scott/tiger
SQL> set serveroutput on
SQL> EXEC show_space_assm('TEST2','SCOTT');
free space 0-25% Blocks:................0
free space 25-50% Blocks:...............260
free space 50-75% Blocks:...............145
free space 75-100% Blocks:..............81
Full Blocks:............................9958
Unformatted blocks:.....................0
PL/SQL 過程已成功完成。
由上輸出可以知道這個表存在shrink的餘地。
SQL> select a.name,b.value from v$statname a,v$mystat b where a.statistic#=b.statistic# and a.name='redo size';
NAME VALUE
---------------------------------------------------------------- ----------
redo size 664
SQL> alter table test2 enable row movement;
表已更改。
SQL> alter table test2 shrink space cascade;
表已更改。
SQL> select a.name,b.value from v$statname a,v$mystat b where a.statistic#=b.statistic# and a.name='redo size';
NAME VALUE
---------------------------------------------------------------- ----------
redo size 15481444
SQL> EXEC show_space_assm('TEST2','SCOTT');
free space 0-25% Blocks:................2
free space 25-50% Blocks:...............2
free space 50-75% Blocks:...............0
free space 75-100% Blocks:..............0
Full Blocks:............................10155
Unformatted blocks:.....................0
PL/SQL 過程已成功完成。
SQL> spool off
由於是我的測試庫,只有我一個會話當前。由實驗可得出結論:shrink操作會產生redo記錄。這個實驗中產生了(15481444-664/)/1024/1024=15M的日誌。
實驗二:shrink表以後,空間的利用率跟重建表哪個操作更佳。
SQL> EXEC show_space_assm('TEST1','SCOTT');
free space 0-25% Blocks:................0
free space 25-50% Blocks:...............0
free space 50-75% Blocks:...............1
free space 75-100% Blocks:..............0
Full Blocks:............................10338
Unformatted blocks:.....................0
PL/SQL 過程已成功完成。
SQL> SELECT blocks FROM dba_tables WHERE table_name='TEST1';
BLOCKS
----------
10339
shrink前,此表的塊數十10339
SQL> delete from test1 where object_id like '14%';
已刪除17760行。
SQL> commit;
SQL> EXEC show_space_assm('TEST1','SCOTT');
PL/SQL 過程已成功完成。
SQL> EXEC show_space_assm('TEST1','SCOTT');
free space 0-25% Blocks:................51
free space 25-50% Blocks:...............179
free space 50-75% Blocks:...............127
free space 75-100% Blocks:..............96
Full Blocks:............................9886
Unformatted blocks:.....................0
PL/SQL 過程已成功完成。
SQL> alter table test1 enable row movement;
表已更改。
SQL> alter table test1 shrink space cascade;
表已更改。
SQL> BEGIN
2 DBMS_STATS.GATHER_TABLE_STATS(OWNNAME => 'SCOTT',
3 TABNAME => 'TEST1',
4 CASCADE => TRUE,
5 METHOD_OPT => 'FOR ALL COLUMNS SIZE auto');
6 END;
7 /
PL/SQL 過程已成功完成。
SQL> SELECT blocks FROM dba_tables WHERE table_name='TEST1';
BLOCKS
----------
10064
shrink後,此表的塊數下降到10064。
看看重建表的塊數是多少。
SQL> create table test2 as select * from test1;
表已建立。
SQL> BEGIN
2 DBMS_STATS.GATHER_TABLE_STATS(OWNNAME => 'SCOTT',
3 TABNAME => 'TEST2',
4 CASCADE => TRUE,
5 METHOD_OPT => 'FOR ALL COLUMNS SIZE auto');
6 END;
7 /
PL/SQL 過程已成功完成。
SQL> SELECT blocks FROM dba_tables WHERE table_name='TEST2';
BLOCKS
----------
10340
SQL> set serveroutput on
SQL> EXEC show_space_assm('TEST2','SCOTT');
free space 0-25% Blocks:................0
free space 25-50% Blocks:...............0
free space 50-75% Blocks:...............0
free space 75-100% Blocks:..............0
Full Blocks:............................10193
Unformatted blocks:.....................0
PL/SQL 過程已成功完成。
SQL> spool off
從實驗看出:
shrink後,塊的數量從10339降低到了10064。
重新建表後,塊的數量為10340。
看來shrink操作重整表還是蠻不錯的,不過日誌量還是蠻大的。
還有點沒想明白。為什麼重建表後,竟然會比shrink前還大呢?
重建後10340>shrink前的10339.
我以為是create table test2 as。。。。。 語句的問題。
浴室我把test2表shrink,重新分析表test2後,還是10340大小。
在這一點上有點暈。
不過我又執行了一下show_space
SQL> EXEC show_space_assm('TEST2','SCOTT');
free space 0-25% Blocks:................0
free space 25-50% Blocks:...............0
free space 50-75% Blocks:...............0
free space 75-100% Blocks:..............0
Full Blocks:............................10193
Unformatted blocks:.....................0
為什麼show_space和user_tables的block相差這麼多呢?
[ 本帖最後由 wei-xh 於 2010-5-2 20:48 編輯 ]
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22034023/viewspace-662235/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle 分割槽表進行shrink操作Oracle
- Shrink操作的注意事項
- shrink 操作對索引的影響索引
- 【原創】通過資料字典操作刪除表的列
- Python 通過List 實現佇列的操作Python佇列
- Oracle資料庫管理——表資料庫高水位及shrink操作Oracle資料庫
- 實驗二:順序表的基本操作實現及其應用
- 通過CPA的成功經驗
- Oracle通過scott使用者中的emp練習單表操作Oracle
- 通過selenium突破極驗驗證實現登入
- jQuery Validate自定義表單元素驗證通過和不通過的樣式jQuery
- element-ui表單驗證輸入空格也能驗證通過UI
- shrink space的最佳實踐
- 通過實體類生成 mysql 的建表語句MySql
- MySQL如何通過分析binlog日誌找出操作頻繁的表MySql
- 如何通過C#操作Access,本人親測通過C#
- 南郵資料結構實驗1.1 順序表的操作資料結構
- 談談通過軟考的感受,包括通過軟考的經驗薦
- 通過命令curl 操作ElasticSearch指南Elasticsearch
- 實驗 詳解Docker的各種操作小實驗Docker
- C++ shrink_to_fit()的實現C++
- java通過schema校驗xmlJavaXML
- postgresql通過建立規則(RULE)實現表記錄SQL
- 通過圖表分析oracle的parallel效能OracleParallel
- 【SHRINK】Oracle收縮表的詳細命令參考Oracle
- 如何通過梯度檢驗幫助實現反向傳播梯度反向傳播
- 南郵資料結構實驗1.1:順序表的相關操作資料結構
- 實驗--檔案操作
- 關於使用者註冊系統的Refactoring(重整)過程
- 通過圖表簡化sql語句的表關聯SQL
- 通過HTTP的HEADER完成各種騷操作HTTPHeader
- 如何通過簡單的shell指令碼操作MongoDB指令碼MongoDB
- SAP的通過支票進行客戶清帳操作
- 通過vmstat的簡單分析資料庫操作資料庫
- 【iCore3 雙核心板】例程四:USART通訊實驗——通過命令控制LED
- ElasticSearch 通過nginx做HTTP驗證ElasticsearchNginxHTTP
- 資料結構實驗一:順序表的建立與操作實現、順序表實現約瑟夫環問題資料結構
- vue通過vue-router攔截實現登入驗證Vue