達夢資料庫之初始化頁大小對於表及表空間的影響分析
在DM資料庫中,頁大小可以為 4KB、 8KB、 16KB 或者 32KB,使用者在建立資料庫時可以根據實際情況選擇需要的頁大小, 預設大小為 8KB,該引數值在資料庫初始化完成後,是 無法進行更改的,只能重新初始化資料庫進行更改。
初始化頁大小的選擇不僅影響表空間資料檔案的大小選擇,也會對錶中每個欄位及每條記錄產生限制,頁大小對字元資料型別實際最大長度及每行記錄、表空間資料檔案大小的影響如下表所示( 此表資料僅供參考,因部署環境、資料庫版本、字元選擇等因素,表中資料會存在一定的差異):
資料庫頁大小 |
每個字元型別欄位實際最大長度(位元組) |
每行記錄除大欄位外其他欄位總長度(位元組) |
表空間單個資料檔案的最小(MB)/最大大小(MB) |
4K |
1938 |
2047 |
16/ 8388608 |
8K |
3878 |
4095 |
32/ 16777216 |
16K |
8000 |
8195 |
64/ 33554432 |
32K |
8188 |
16176 |
128/ 67108864 |
在進行表設計的時候,每條記錄總長度不能大於頁面大小的一半,所以當表中出現的欄位值較大時,就會壓縮其他欄位佔用的空間。如果系統中存在或者以後可能存在含有較長的字串型別的表或者列的數量比較多(疊加的字串長度較長),建議該引數設定為 16 或者 32。
達夢資料庫是以簇為最小的物理單元,為資料庫分配物理儲存空間,簇大小可以設定為16或者32,預設為16,每個簇的大小=頁大小x頁數(簇大小引數設定的值),所以頁大小設定越大,資料檔案的物理大小就會越大,在系統執行時,每次從磁碟調入記憶體的資料單位也就越大,磁碟的IO量也就越大,所以在規劃資料庫前期,需要慎重考慮資料庫頁大小及簇大小的選擇。
以下為測試過程(測試環境為Linux7 DM7環境32KB初始頁大小):
SQL> select * from v$version; LINEID BANNER ---------- --------------------------------------------------------------- 1 DM Database Server x64 V7.6.0.199-Build(2019.09.16-112854)ENT 2 DB Version: 0x7000a used time: 4.269(ms). Execute id is 3. SQL> select para_name,para_value from v$dm_ini where para_name = 'GLOBAL_PAGE_SIZE'; LINEID para_name para_value ---------- ---------------- ---------- 1 GLOBAL_PAGE_SIZE 32768 used time: 9.836(ms). Execute id is 4. SQL> select para_name,para_value from v$dm_ini where para_name = 'GLOBAL_EXTENT_SIZE'; LINEID para_name para_value ---------- ------------------ ---------- 1 GLOBAL_EXTENT_SIZE 32 used time: 8.067(ms). Execute id is 5. SQL>
1、 頁大小對錶空間的影響測試
頁大小為32KB,表空間的最小大小為128MB,小於128MB將無法成功建立表空間,測試過程如下。 SQL> create tablespace test datafile '/opt/dmdbms/data/db_test_standby/dbteststan/test01.dbf' size 127; create tablespace test datafile '/opt/dmdbms/data/db_test_standby/dbteststan/test01.dbf' size 127; [-2410]:Error in line: 1 Data file [/opt/dmdbms/data/db_test_standby/dbteststan/test01.dbf] size is invalid. used time: 0.633(ms). Execute id is 0. SQL> SQL> create tablespace test datafile '/opt/dmdbms/data/db_test_standby/dbteststan/test01.dbf' size 128; executed successfully used time: 77.732(ms). Execute id is 11. SQL>
如測試過程所示,當表空間的大小小於128MB時,無法完成表空間建立,並列印出size is invalid錯誤提示,其實頁大小限制的是單個資料檔案的最小大小,因為每個表空間至少需要包含一個資料檔案,所以也就對錶空間的大小形成了限制,如下測試過程,我們給test表空間新增資料檔案。
SQL> alter tablespace test add datafile '/opt/dmdbms/data/db_test_standby/dbteststan/test02.dbf' size 127; alter tablespace test add datafile '/opt/dmdbms/data/db_test_standby/dbteststan/test02.dbf' size 127; [-2410]:Error in line: 1 Data file [/opt/dmdbms/data/db_test_standby/dbteststan/test02.dbf] size is invalid. used time: 0.737(ms). Execute id is 0. SQL> alter tablespace test add datafile '/opt/dmdbms/data/db_test_standby/dbteststan/test02.dbf' size 128; executed successfully used time: 61.880(ms). Execute id is 12. SQL>
2、 頁大小對錶的欄位大小的影響測試
SQL> create table t1(a varchar2(8189)); create table t1(a varchar2(8189)); [-6121]:Error in line: 1 Precision is out of range. used time: 0.757(ms). Execute id is 0. SQL> SQL> create table t1(a varchar2(8188)); executed successfully used time: 7.876(ms). Execute id is 21. SQL> SQL> SQL> declare 2 v_a varchar2(8188); 3 v_sql varchar2(8188); 4 begin 5 v_a:='a'; 6 for i in 1..8187 7 loop 8 v_a:=v_a||'a'; 9 end loop; 10 v_sql:='insert into t1(a) values ('''||v_a||''')'; 11 print(v_sql); 12 execute immediate v_sql; 13 commit; 14 end 15 / DMSQL executed successfully used time: 46.135(ms). Execute id is 22. SQL> SQL> set SERVEROUT on SQL> declare 2 v_a varchar2(8188); 3 v_sql varchar2(8188); 4 begin 5 v_a:='a'; 6 for i in 1..8189 7 loop 8 v_a:=v_a||'a'; 9 end loop; 10 v_sql:='insert into t1(a) values ('''||v_a||''')'; 11 print(v_sql); 12 execute immediate v_sql; 13 commit; 14 end 15 / declare v_a varchar2(8188); v_sql varchar2(8188); begin v_a:='a'; for i in 1..8189 loop v_a:=v_a||'a'; end loop; v_sql:='insert into t1(a) values ('''||v_a||''')'; print(v_sql); execute immediate v_sql; commit; end [-6169]:Column [a] out of length. used time: 43.767(ms). Execute id is 0. SQL>
以上測試過程基於的是32KB頁大小的環境,所以對比結果不是太明顯,即便在建立表時宣告的列最大長度為8188,如果是8KB的初始頁大小,插入列值大於3878個位元組,依然會提示記錄超長錯誤提示資訊。
3、 頁大小對錶的單條記錄最大長度的影響測試
SQL> create table t2(a varchar2(8188),b varchar2(8188)); executed successfully used time: 5.060(ms). Execute id is 28. SQL> SQL> declare 2 v_a varchar2(8188); 3 v_sql varchar2(8188); 4 begin 5 v_a:='a'; 6 for i in 1..8087 loop 7 v_a:=v_a||'a'; 8 end loop; 9 v_sql:='insert into t1(a) values ('''||v_a||''')'; 10 execute immediate v_sql; 11 commit; 12 end; 13 / DMSQL executed successfully used time: 42.331(ms). Execute id is 29. SQL> SQL> SQL> declare 2 v_a varchar2(8188); 3 v_sql varchar2(8188); 4 begin 5 v_a:='a'; 6 for i in 1..8088 loop 7 v_a:=v_a||'a'; 8 end loop; 9 v_sql:='insert into t2(a,b) values ('''||v_a||''','''||v_a||''')'; 10 execute immediate v_sql; 11 commit; 12 end; 13 / declare v_a varchar2(8188); v_sql varchar2(8188); begin v_a:='a'; for i in 1..8088 loop v_a:=v_a||'a'; end loop; v_sql:='insert into t2(a,b) values ('''||v_a||''','''||v_a||''')'; execute immediate v_sql; commit; end; [-6169]:Column [a] out of length. used time: 43.480(ms). Execute id is 0. SQL>
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31403259/viewspace-2687231/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [轉帖]達夢資料庫-統計資料表資料量及空間表大小資料庫
- 達夢資料庫表空間等空間大小查詢方法總結資料庫
- 達夢資料庫表空間管理方法及實戰演示資料庫
- SYSAUX表空間滿對資料庫的影響以及解決措施UX資料庫
- 如何獲取 PostgreSQL 資料庫中的表大小、資料庫大小、索引大小、模式大小、表空間大小、列大小SQL資料庫索引模式
- 達夢(DM)資料庫的表空間建立和遷移維護資料庫
- 檢視Oracle資料庫表空間大小,是否需要增加表空間的資料檔案Oracle資料庫
- DB2頁大小、表大小和表空間大小限制DB2
- 達夢資料庫系統表空間資料檔案遷移過程資料庫
- Oracle資料庫表空間的資料檔案大小上限。Oracle資料庫
- 轉載-表空間和資料檔案offline的影響分析
- 達夢資料庫DSC架構下ASM擴容及表空間擴容實施資料庫架構ASM
- PostgreSQL:表空間-->資料庫-->表SQL資料庫
- 表空間中有資料也可以壓縮表空間(資料檔案)大小
- 達夢資料庫基礎---表資料庫
- 如何檢視Oracle資料庫表空間大小(空閒、已使用),是否要增加表空間的資料檔案...Oracle資料庫
- 在資料庫之間移動表空間資料庫
- Oracle查詢表佔磁碟空間大小及移動表空間Oracle
- ASM時的OFM特性對影的建資料檔名的影響及為SYSTEM表空間的資料檔案使用別名ASM
- 查詢表的大小及表空間的使用情況
- oracle 回收表空間的資料檔案大小Oracle
- 關於資料庫開啟大頁對效能的影響資料庫
- 表資料的儲存對索引的影響索引
- 【TABLESPACE】使用 CASCADE CONSTRAINTS選項刪除表空間時對資料庫物件影響的探查AI資料庫物件
- 表的storage (MINEXTENTS 屬性對truncate後表大小的影響
- Oracle - 資料庫的例項、表空間、使用者、表之間關係Oracle資料庫
- 達夢資料庫如何將Excel表的資料複製到表中資料庫Excel
- 達夢表空間管理注意事項總結
- 檢視資料庫表空間資料庫
- oracle清除資料庫表空間Oracle資料庫
- 刪除資料庫表空間資料庫
- 達夢7資料庫初始化資料庫
- 對oracle資料表空間的計算Oracle
- 表空間大小查詢
- oracle中的資料庫、使用者、方案、表空間、表物件之間的關係Oracle資料庫物件
- 【SQL】查詢及修改資料庫預設表空間SQL資料庫
- 改變資料庫undo表空間資料庫
- 資料庫物件遷移表空間資料庫物件