oracle11g之create table儲存引數initial和表空間autoallocate或uniform的關係
背景
建表可以指定initial及next即分別指定初始區及再次分配區的大小,這些引數與區分配管理模式autoallocate及uniform又有何關係呢?本文我們來回答這個問題。
結論
1,建立表時指定initial的優先順序要高於所屬表空間指定的autoallocate或者uniform的區管理模式2,表指定的initial時,表的初始區分配大小,會分為2個情況
基於autoallocate區管理模式時,表的初始區分配大小,因為ORACLE分配的區大小有64K,1M,8M,64M;從官方文件可知,會從這4個區中選最接近initial指定的值的最大值,剛好就是1M的區
採用四捨五入計算區的大小及個數
基於uniform區管理模式,表的初始區如何分配,取決於建表時指定的initial及建立表空間時指定的uniform區大小,所以這裡表的初始區大小為3m,可見是由2個因素決定初始區如何分配;
可見雖是由2個因素確定表的初始區分配大小,主要因素仍是所屬表空間uniform大小,且採用四捨五入方式分配區個數及大小
測試
1,資料庫版本
SQL> conn scott/system
Connected.
SQL> select * from v$version where rownum=1;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
2,先看下基於本地管理表空間的autoallocate區管理模式下,建立表時指定initial,會如何表現?
SQL> select default_tablespace from user_users;
DEFAULT_TABLESPACE
------------------------------------------------------------
USERS
SQL> select tablespace_name,initial_extent,next_extent,extent_management,allocation_type,segment_space_management from user_tablespaces where tablespace_name='USERS';
TABLESPACE_NAME INITIAL_EXTENT NEXT_EXTENT EXTENT_MANAGEMENT ALLOCATION_TYPE SEGMENT_SPAC
------------------------------ -------------- ----------- -------------------- ------------------ ------------
USERS 65536 LOCAL SYSTEM AUTO
SQL> create table t_initial_1(a int,b int) storage(initial 5m);
Table created.
SQL> select segment_name,extent_id,blocks,bytes from user_extents where segment_name='T_INITIAL_1';
no rows selected
SQL> insert into t_initial_1 values(1,1);
1 row created.
SQL> commit;
Commit complete.
可見initial指定初始分配的共計區大小
SQL> select segment_name,extent_id,blocks,bytes/1024/1024 initial_mb from user_extents where segment_name='T_INITIAL_1';
SEGMENT_NAME EXTENT_ID BLOCKS INITIAL_MB
------------------------------ ---------- ---------- ----------
T_INITIAL_1 0 128 1
T_INITIAL_1 1 128 1
T_INITIAL_1 2 128 1
T_INITIAL_1 3 128 1
T_INITIAL_1 4 128 1
但為何會分配共計5個1m的區呢,因為對於autoallocate的區管理模式,ORACLE分配的區大小有64K,1M,8M,64M;從官方文件可知,會從這4個區中選最接近initial指定的值的最大值,剛好就是1M的區,
所以會分配5個區,下面的測試正好驗證這一點
SQL> drop table t_initial_1 purge;
Table dropped.
SQL> create table t_initial_1(a int,b int) storage(initial 72k);
Table created.
SQL> insert into t_initial_1 values(1,1);
1 row created.
SQL> commit;
Commit complete.
SQL> select segment_name,extent_id,blocks,bytes/1024 initial_kb from user_extents where segment_name='T_INITIAL_1';
SEGMENT_NAME EXTENT_ID BLOCKS INITIAL_KB
------------------------------ ---------- ---------- ----------
T_INITIAL_1 0 8 64
T_INITIAL_1 1 8 64
SQL> drop table t_initial_1 purge;
Table dropped.
SQL> create table t_initial_1(a int,b int) storage(initial 9m);
Table created.
SQL> insert into t_initial_1 values(1,1);
1 row created.
SQL> commit;
Commit complete.
SQL> select segment_name,extent_id,blocks,bytes/1024/1024 initial_mb from user_extents where segment_name='T_INITIAL_1';
SEGMENT_NAME EXTENT_ID BLOCKS INITIAL_MB
------------------------------ ---------- ---------- ----------
T_INITIAL_1 0 1024 8
T_INITIAL_1 1 128 1
3,再看下基於本地管理表空間的iniform區管理模式下,建立表時指定initial,會如何表現?
可見基於uniform區管理模式的初始區分配大小為3m
SQL> select tablespace_name,initial_extent,next_extent,extent_management,allocation_type,segment_space_management from user_tablespaces where tablespace_name='TBS_UNIFORM';
TABLESPACE_NAME INITIAL_EXTENT NEXT_EXTENT EXTENT_MANAGEMENT ALLOCATION_TYPE SEGMENT_SPAC
------------------------------ -------------- ----------- -------------------- ------------------ ------------
TBS_UNIFORM 3145728 3145728 LOCAL UNIFORM AUTO
SQL> select 3145728/1024/1024 initial_mb from dual;
INITIAL_MB
----------
3
對於uniform區管理模式,表的初始區如何分配,取決於建表時指定的initial及建立表空間時指定的uniform區大小,所以這裡表的初始區大小為3m,可見是由2個因素決定初始區如何分配
SQL> create table t_initial_2(a int,b int) tablespace tbs_uniform storage(initial 72k);
Table created.
SQL> insert into t_initial_2 values(1,1);
1 row created.
SQL> commit;
Commit complete.
SQL> select segment_name,extent_id,blocks,bytes/1024/1024 initial_mb from user_extents where segment_name='T_INITIAL_2';
SEGMENT_NAME EXTENT_ID BLOCKS INITIAL_MB
------------------------------ ---------- ---------- ----------
T_INITIAL_2 0 384 3
可見雖是由2個因素確定表的初始區分配大小,主要因素仍是所屬表空間uniform大小,且採用四捨五入方式分配區個數及大小
SQL> drop table t_initial_2 purge;
Table dropped.
SQL> create table t_initial_2(a int,b int) tablespace tbs_uniform storage(initial 4m);
Table created.
SQL> insert into t_initial_2 values(1,1);
1 row created.
SQL> commit;
Commit complete.
SQL> select segment_name,extent_id,blocks,bytes/1024/1024 initial_mb from user_extents where segment_name='T_INITIAL_2';
SEGMENT_NAME EXTENT_ID BLOCKS INITIAL_MB
------------------------------ ---------- ---------- ----------
T_INITIAL_2 0 384 3
T_INITIAL_2 1 384 3
SQL> drop table t_initial_2 purge;
Table dropped.
SQL> create table t_initial_2(a int,b int) tablespace tbs_uniform storage(initial 20m);
Table created.
SQL> insert into t_initial_2 values(1,1);
1 row created.
SQL> commit;
Commit complete.
SQL> select segment_name,extent_id,blocks,bytes/1024/1024 initial_mb from user_extents where segment_name='T_INITIAL_2';
SEGMENT_NAME EXTENT_ID BLOCKS INITIAL_MB
------------------------------ ---------- ---------- ----------
T_INITIAL_2 0 384 3
T_INITIAL_2 1 384 3
T_INITIAL_2 2 384 3
T_INITIAL_2 3 384 3
T_INITIAL_2 4 384 3
T_INITIAL_2 5 384 3
T_INITIAL_2 6 384 3
7 rows selected.
個人簡介
8年oracle從業經驗,具備豐富的oracle技能,目前在國內北京某專業oracle服務公司從事高階技術顧問。
服務過的客戶:
中國電信
中國移動
中國聯通
中國電通
國家電網
四川達州商業銀行
湖南老百姓大藥房
山西省公安廳
中國郵政
北京302醫院
河北廊坊新奧集團公司
專案經驗:
中國電信3G專案AAA系統資料庫部署及最佳化
中國聯通4G資料庫效能分析與最佳化
中國聯通4G資料庫效能分析與最佳化
中國聯通CRM資料庫效能最佳化
中國移動10086電商平臺資料庫部署及最佳化
湖南老百姓大藥房ERR資料庫sql最佳化專案
四川達州商業銀行TCBS核心業務系統資料庫模型設計和RAC部署及最佳化
四川達州商業銀行TCBS核心業務系統後端批處理儲存過程功能模組編寫及最佳化
北京高鐵訊號監控系統RAC資料庫部署及最佳化
河南宇通客車資料庫效能最佳化
中國電信電商平臺核心採購模組表模型設計及最佳化
中國郵政儲蓄系統資料庫效能最佳化及sql最佳化
北京302醫院資料庫遷移實施
河北廊坊新奧data guard部署及最佳化
山西公安廳身份證審計資料庫系統故障評估
國家電網上海災備專案4 node rac+adg
貴州移動crm及客服資料庫效能最佳化專案
貴州移動crm及客服務資料庫sql稽核專案
深圳穆迪軟體有限公司資料庫效能最佳化專案
貴州移動crm及客服資料庫效能最佳化專案
貴州移動crm及客服務資料庫sql稽核專案
深圳穆迪軟體有限公司資料庫效能最佳化專案
聯絡方式:
手機:18201115468
qq : 305076427
qq微博: wisdomone1
新浪微博:wisdomone9
qq群:275813900
itpub部落格名稱:wisdomone1 http://blog.itpub.net/9240380/
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9240380/viewspace-1814743/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 表空間uniform size和 autoallocate的區別ORM
- oracle11g之create table儲存引數minextents和maxextents含義之系列四Oracle
- oracle11g之create table儲存引數buffer_pool含義及作用系列三Oracle
- create table之storage選項initial和其它
- 關於表空間和表的關係
- dual表與create table語句的關係
- [DB2]表空間之DMS、自動儲存的DMS表空間DB2
- SAP庫存表之間的邏輯關係
- 得到表的記錄數和佔用的儲存空間指令碼指令碼
- MySQL 引數- Innodb_File_Per_Table(獨立表空間)MySql
- 測試表的空間壓縮與表空間的關係
- 【儲存管理】表空間概念
- table/segment/extent/block之間關係BloC
- Oracle資料庫儲存結構之間的關係Oracle資料庫
- 表在表空間中的儲存情況
- 【儲存管理】建立永久表空間
- innodb表空間儲存結構
- Oracle - 資料庫的例項、表空間、使用者、表之間關係Oracle資料庫
- FAILGROUP和REDUNDANCY之間的關係關係!AI
- oracle中用Create Table建立表時,Storage中引數的含義!Oracle
- local管理的表空間下autoallocate方式extent的分配原則
- oracle 修改表空間儲存路徑Oracle
- oracle中的資料庫、使用者、方案、表空間、表物件之間的關係Oracle資料庫物件
- 儲存過程、觸發器與事務之間的關係儲存過程觸發器
- PostgreSQL-表空間、資料庫、使用者之間的關係(七)SQL資料庫
- Oracle表空間建立引數解析Oracle
- 【IMPDP】使用 TRANSFORM選項去掉表空間和儲存子句ORM
- 測試oracle表空間自動擴充套件特性與分配固定size的關係(儲存屬性)Oracle套件
- t_c_b_s之後臺儲存過程_更新表間關係小記儲存過程
- 刪除表空間及所有指向關係
- 表空間自動擴充套件 AUTOALLOCATE 的擴充套件規律套件
- PostgreSQL儲存智慧-空間聚集儲存SQL
- Oracle 表空間 建立引數 說明Oracle
- tablespace和datafile之間的關係
- tcbs_批量儲存過程_輸出引數out與異常的關係儲存過程
- sqlldr和external table的關係!SQL
- Synology群暉NAS儲存正確建立儲存池和儲存空間的方法
- 淺述Oracle使用者表空間關係Oracle