Informix入門之 -空間管理
說起資料庫就不能不說資料庫的儲存,說儲存就不能不說資料庫對空間的管理。這裡我們主要談的是IDS對空間的管理的相關問題。
從物理上來說,IDS管理的主要是page,chunk;從邏輯上來說主要是extent,tablespace,dbsapce。連續的page組成extent,多個extent組成tablespace,dbspace用來邏輯的管理chunk,而每個tablespace又是建立在dbsapce上的。
Chunk:一個單位的物理磁碟空間,在9.4版本之前不應許超過2G。一個chunk由path,offset,size三部分組成。因此我們在使用onspaces命令來加chunk的時候這三個引數是必不可少的。理論上一個資料庫伺服器上最多有2048個儲存塊,但是實際上由UNIX核心規定的一個程式所能開啟的檔案數來確定的。如果是使用cooked file來做為儲存,那麼offset可以設定為0,如果使用raw device來做為儲存,那偏移量不能為0,至少第一個CHUNK的offset不能為0。
Page:是一最基本的I/O單位。一個page的大小是由OS來決定的,有2K的,也有4K的。我們拿2K的來舉例說明。一個page有2048個bit,頁頭由24bit組成,頁尾有一個4bit的時間戳,也就是說每一個page剩餘的空間只有2020個bit,另外在每一個page上還有一個槽表,一個槽表4bit,一條記錄對應一個槽表,這樣在每一個page上存放的記錄數就可以定下來。說這些的目的是為了說明在我們建表的時候儘量表不要建的太大,有的表一條記錄的大小就超過了一個page,這樣在讀取的效率上並不是太高。另外還有一個FILLFACTOR的引數決定了資料頁的填充程度,如果此值設定的不是太合理,經常上現節點分裂的情況,那對錶的讀取效率肯定是有影響的。
Extent:是磁碟上連續page的一組集合。在每個extent內的page都是連續的,在表中預設的extent的大小是16K,extent&的大小決定了表中資料存放的集中程度。如果資料存放的過與分散在做磁碟I/O的時間肯定會變長,一般的情況下每個表的extent的大小建議不要超過50,如果太大,就需要做合理的調整。另外不能不提的是在隨著extent數目的增長,每次分出的空間的大小是不不一樣的,在每到16的時候,就翻倍。例如第一個extent是16K,第17個extent就是32K,第33個就是64K了,在翻倍的增長。
Tablespace:是extent的邏輯集合。各個extent在物理上不一定是連續的。
Dbspace:是一組chunk的邏輯集合。一般是把裸裝置的chunk放在一個dbspace中,或者把一組熟檔案放在一組chunk中,也有的把裸裝置和熟檔案放在一組dbspace中,但不建議這麼做。
其實在dbsapce中又有三類,一類就是一般的存放資料的dbsapce,另一類就是tempdbspace,還有一種是blobspace。第一種我就不說了。我們先說blobsapce.
Blobspace:blobspace是一組邏輯組織的chunk,但是是用來儲存byte和text型別的資料。Blobspace中不能存放行或索引,只能存放儲存了blob的頁面和儲存了關於BLOB的系統資訊頁面。因為blobspace中的BLOB頁面的大小是在建立的時候指定的,所有一個blobspace中的所有BLOB頁面大小相同。對BLOB的寫,是沒有在緩衝池中緩衝的,因此BLOB的值不寫邏輯日誌檔案。當修改了BLOB的值之後,應該在磁碟上留出足夠的空間以放BLOB的初始值和修改值。
Tempdbspace:是一組臨時的dbspace。他在DBSPACETEMP引數中指定。需要在onspaces建立的時候加上-t的引數。對tempsaces的操作是不寫邏輯日誌的。在建立臨時表和做group by ,order by,使用join語句,建立index的時候都是需要臨時空間的。一般的情況下所有的tempspace的大小為正常業務資料的10%。如果太小了很大的操作就會出問題。
Select * from tab_a insert into temp tab_b是不寫到tempdbspace的。
Select * from tab_a insert into temp tab_b with no log才寫到tempdbspace。
從物理上來說,IDS管理的主要是page,chunk;從邏輯上來說主要是extent,tablespace,dbsapce。連續的page組成extent,多個extent組成tablespace,dbspace用來邏輯的管理chunk,而每個tablespace又是建立在dbsapce上的。
Chunk:一個單位的物理磁碟空間,在9.4版本之前不應許超過2G。一個chunk由path,offset,size三部分組成。因此我們在使用onspaces命令來加chunk的時候這三個引數是必不可少的。理論上一個資料庫伺服器上最多有2048個儲存塊,但是實際上由UNIX核心規定的一個程式所能開啟的檔案數來確定的。如果是使用cooked file來做為儲存,那麼offset可以設定為0,如果使用raw device來做為儲存,那偏移量不能為0,至少第一個CHUNK的offset不能為0。
Page:是一最基本的I/O單位。一個page的大小是由OS來決定的,有2K的,也有4K的。我們拿2K的來舉例說明。一個page有2048個bit,頁頭由24bit組成,頁尾有一個4bit的時間戳,也就是說每一個page剩餘的空間只有2020個bit,另外在每一個page上還有一個槽表,一個槽表4bit,一條記錄對應一個槽表,這樣在每一個page上存放的記錄數就可以定下來。說這些的目的是為了說明在我們建表的時候儘量表不要建的太大,有的表一條記錄的大小就超過了一個page,這樣在讀取的效率上並不是太高。另外還有一個FILLFACTOR的引數決定了資料頁的填充程度,如果此值設定的不是太合理,經常上現節點分裂的情況,那對錶的讀取效率肯定是有影響的。
Extent:是磁碟上連續page的一組集合。在每個extent內的page都是連續的,在表中預設的extent的大小是16K,extent&的大小決定了表中資料存放的集中程度。如果資料存放的過與分散在做磁碟I/O的時間肯定會變長,一般的情況下每個表的extent的大小建議不要超過50,如果太大,就需要做合理的調整。另外不能不提的是在隨著extent數目的增長,每次分出的空間的大小是不不一樣的,在每到16的時候,就翻倍。例如第一個extent是16K,第17個extent就是32K,第33個就是64K了,在翻倍的增長。
Tablespace:是extent的邏輯集合。各個extent在物理上不一定是連續的。
Dbspace:是一組chunk的邏輯集合。一般是把裸裝置的chunk放在一個dbspace中,或者把一組熟檔案放在一組chunk中,也有的把裸裝置和熟檔案放在一組dbspace中,但不建議這麼做。
其實在dbsapce中又有三類,一類就是一般的存放資料的dbsapce,另一類就是tempdbspace,還有一種是blobspace。第一種我就不說了。我們先說blobsapce.
Blobspace:blobspace是一組邏輯組織的chunk,但是是用來儲存byte和text型別的資料。Blobspace中不能存放行或索引,只能存放儲存了blob的頁面和儲存了關於BLOB的系統資訊頁面。因為blobspace中的BLOB頁面的大小是在建立的時候指定的,所有一個blobspace中的所有BLOB頁面大小相同。對BLOB的寫,是沒有在緩衝池中緩衝的,因此BLOB的值不寫邏輯日誌檔案。當修改了BLOB的值之後,應該在磁碟上留出足夠的空間以放BLOB的初始值和修改值。
Tempdbspace:是一組臨時的dbspace。他在DBSPACETEMP引數中指定。需要在onspaces建立的時候加上-t的引數。對tempsaces的操作是不寫邏輯日誌的。在建立臨時表和做group by ,order by,使用join語句,建立index的時候都是需要臨時空間的。一般的情況下所有的tempspace的大小為正常業務資料的10%。如果太小了很大的操作就會出問題。
Select * from tab_a insert into temp tab_b是不寫到tempdbspace的。
Select * from tab_a insert into temp tab_b with no log才寫到tempdbspace。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24955184/viewspace-772120/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Kubernetes 名稱空間入門
- INFORMIX的監控和管理命令ORM
- redis入門指南(四)—— redis如何節省空間Redis
- WindowsServerVersion1709管理之入門篇WindowsServer
- Go的棧空間管理Go
- 乾貨分享|優炫資料庫管理之表空間資料庫
- openGauss中如何管理表空間
- Oracle OCP(49):表空間管理Oracle
- 大資料匯入之MySql設計之空間換時間的設計變更大資料MySql
- 硬碟空間的管理和分割槽硬碟
- 智慧辦公~空間管理軟體
- mysql之 表空間傳輸MySql
- 深入淺出之切空間
- JavaScript之記憶體空間JavaScript記憶體
- Flutter 入門指北(Part 11)之狀態管理,BLoCFlutterBloC
- 2.6.8 設定UNDO空間管理方法
- sybase iq表空間管理常用語句
- Linux 磁碟掛載和swap空間管理Linux
- SYSAUX表空間清理之SM/OPTSTATUX
- 【DP】區間DP入門
- 《Flutter 入門經典》之“Flutter 入門 ”Flutter
- 表空間和資料檔案的管理
- SYSTEM 表空間管理及備份恢復
- Linux使用者空間記憶體管理Linux記憶體
- 【GiraKoo】Java Native Interface(JNI)的空間(引用)管理Java
- 2.5.3 建立本地管理的SYSTEM表空間
- [轉]geoServer 入門到實戰(安裝,釋出服務,wfs空間查詢)Server
- go 學習筆記之工作空間Go筆記
- 16、表空間 建立表空間
- 地理空間智慧與人工智慧:開啟未來地圖的智慧之門人工智慧地圖
- informix常用命令大全ORM
- 李飛飛「空間智慧」之後,上交、智源、北大等提出空間大模型SpatialBot大模型
- Oracle表空間的管理方式(LMT、DMT)--本地和字典管理Oracle
- MySQL空間最佳化(空間清理)MySql
- 2.5.5 使用自動Undo管理: 建立 Undo 表空間
- 深圳眾創空間,資源精細化管理
- 達夢表空間管理注意事項總結
- Flutter 入門 - 狀態管理Flutter
- Golang入門-Golang包管理Golang