通過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資料庫
- Python 通過List 實現佇列的操作Python佇列
- 實驗二:順序表的基本操作實現及其應用
- jQuery Validate自定義表單元素驗證通過和不通過的樣式jQuery
- 通過selenium突破極驗驗證實現登入
- MySQL如何通過分析binlog日誌找出操作頻繁的表MySql
- Oracle通過scott使用者中的emp練習單表操作Oracle
- 【SHRINK】Oracle收縮表的詳細命令參考Oracle
- 通過實體類生成 mysql 的建表語句MySql
- 通過命令curl 操作ElasticSearch指南Elasticsearch
- 實驗 詳解Docker的各種操作小實驗Docker
- 通過HTTP的HEADER完成各種騷操作HTTPHeader
- 表空間(資料檔案shrink)收縮示例
- JsonPath 驗證類既 Groovy 過載操作符實踐JSON
- 南郵資料結構實驗1.1:順序表的相關操作資料結構
- 如何通過梯度檢驗幫助實現反向傳播梯度反向傳播
- 如何實現通過JAVA遠端執行重啟tomcat操作?JavaTomcat
- ADO品牌電動出行實驗室通過國際公認機構SGS的"QTL實驗室"認證QT
- ElasticSearch 通過nginx做HTTP驗證ElasticsearchNginxHTTP
- 通過DNSLOG回顯驗證漏洞DNS
- vue通過vue-router攔截實現登入驗證Vue
- 資料結構實驗一:順序表的建立與操作實現、順序表實現約瑟夫環問題資料結構
- CSS flex-shrinkCSSFlex
- vector::shrink_to_fit()
- 通過佇列實現棧OR通過棧實現佇列佇列
- web前端入門到實戰:css騷操作之表單驗證Web前端CSS
- 利用js編寫一個簡單的html表單驗證,驗證通過時提交資料(附原始碼)JSHTML原始碼
- 這個實驗來自於紅皮書,通過這個實驗可以很好的瞭解redefinevg和synclvodm的區別。
- oracle中通過decode實現行變列的二維表統計展示Oracle
- 【分散式鎖】通過MySQL資料庫的表來實現-V1分散式MySql資料庫
- 通過實驗理解PG邏輯結構:1 使用者(角色)
- Tomcat通過自帶的Cluster方式實現Session會話共享環境操作記錄TomcatSession會話
- 表的操作
- 通過 Route 配置的例子,學習SAP Cloud for Customer 的scoping操作Cloud
- 通過 Spring 框架如何進行JDBC操作呢?Spring框架JDBC
- 實驗四 棧和佇列的基本操作佇列
- 線上重定義的操作步驟__普通錶轉換為分割槽表的實驗案例
- LRU 實現 通過 LinkedHashMapHashMap
- 通過模板實現POI