1. SybaseIQ體系結構 SybaseIQ數據庫包括服務器進程、數據庫空間和服務器文件,其中數據庫空間指:元數據存儲catalog store,IQ主數據存儲iq store,臨時數據存儲temporary store。如下圖所示。
1.1.
數據庫服務器 Sybase IQ 數據庫服務器(Server)是運行在一台主機上的操作系統進程,是 Sybase IQ 數據庫系統的核心,用戶連接到Sybase IQ服務器訪問Sybase IQ 數據庫中的數據。單台的硬件服務器下,SybaseIQ采用“一個服務器一個數據庫”的架構,在Multiplex架構下,屬於“多個服務器一個數據庫”。一台硬件服務器可以安裝多個SybaseIQ數據庫,不推薦在一個服務器上安裝多個數據庫。
1.1.1.
Sybase ASA和SybaseIQ Sybase ASA (Adaptive Server Anywhere)是獨立於SybaseIQ的另一個按行存儲的關系型數據庫,是Sybase信息移動解決方案的一個核心產品,主要用於移動設備數據庫,屬於小型數據庫產品。SybaseIQ的數據庫元數據管理采用了ASA引擎,Sybase ASA負責SybaseIQ的元數據的存儲管理,數據庫連接調度庫,查詢解析,系統安全和組件集成服務(Component Integration Services)。基於SybaseIQ的程序開發與基於Sybase ASA的程序類似。
1.1.2.
CIS用戶接口 基於Sybase數據庫產品直接的數據庫互連訪問,可以通過其產品內嵌的CIS功能實現,不需要額外產品支持,通過Open Client方式實現遠程數據庫的數據加載和isql方式的數據庫訪問,需要配置open client接口文件。UNIX和Linux方式文件存放在用戶的主目錄,文件名為interfaces,Windows下文件名為sql.ini。以下文件是一個CIS接口配置文件樣板,配置了兩個服務器,其中服務器asiqdemo,IP為158.77.123.168端口為2638 ;服務器test,IP為158.77.123.244端口為2688:
[asiqdemo]
master=TCP,158.77.123.168,2638
query=TCP,158.77.123.168,2638
[test]
master=TCP,158.77.123.244,2688
query=TCP,158.77.123.244,2688
1.2.
數據庫構成 1.2.1.
數據庫空間 SybaseIQ以數據庫空間方式將應用級別在多個磁盤上分布式存儲用戶數據,一個數據庫空間可能是一個操作系統文件或者一個磁盤的原始分區。數據庫空間中同時存儲用戶數據或者用於用戶啟動、恢復、備份和事務管理的內部數據結構。
SybaseIQ數據庫建立成功後,將缺省建立如下幾個數據庫文件
<數據庫名>.db是元數據庫空間,包含描述數據庫的系統表和存儲過程,按照Sybase另一個數據庫ASA標准描述,數據庫空間名是SYSTEM。
<數據庫名>.iq 是IQ存儲,存儲SybaseIQ的數據表和索引, IQ存儲的第一個數據庫空間名是IQ_SYSTEM_MAIN。
<數據庫名>.iqtmp 是初始化的臨時存儲,包含查詢生成的臨時表,臨時存儲的第一個數據庫空間名是IQ_SYSTEM_TEMP。
Multiplex架構的查詢服務器上的用戶還可以建立本地存儲空間,它的用途與主數據存儲類似,但是只能被建立它的查詢服務器使用。用戶可以在數據庫建立期間建立所有的數據庫空間,也可以在數據庫建立後添加數據庫空間。
其中元數據存儲必須以文件形式存在,IQ存儲、臨時存儲和本地存儲可以是文件或者裸設備形式。
元數據存儲
每個數據庫對應一個元數據表空間,只能放在文件系統上,文件名形如“<數據庫名>.db”,這個文件隨數據庫對象增加動態增長,包括所有需要管理的IQ 數據庫信息,系統表元數據存儲,系統和用戶的存儲過程。元數據空間的邏輯名是 SYSTEM。
元數據存儲采用Sybase按行存儲的數據庫Sybase ASA,其數據庫頁面通常是4K (4096 byte),其頁面大小在建立數據庫時指定。
通常元數據存儲中包括如下系統表,完整的系統表列表可以參考SybaseIQ的產品手冊:
SYSIQCOLUMN:數據庫中的所有表和視圖的字段信息;
SYSIQFILE:數據庫操作系統文件列表;
SYSIQINDEX:數據庫的索引信息;
SYSIQTABLE:數據庫中的所有表和視圖信息;
這些系統表數據可以通過
DBISQL客戶端或者 Sybase Central浏覽。
IQ存儲
SybaseIQ的數據以壓縮的索引方式存儲在磁盤上的數據 ,也包括SybaseIQ的事務日志,采用(free list)方式管理分配空間,free list指明已經分配給IQ存儲的磁盤頁面。IQ存儲是一種預分配的空間,它也可以通過預先計劃的形式進行空間擴充。當數據庫首次建立時,將建立一個數據庫空間。每個數據庫只有一個IQ存儲(IQ STORE),但是可以包括多個數據庫空間(dbspaces),數據庫空間可以是裸設備或者文件系統,IQ存儲的第一個數據庫空間邏輯名稱為 IQ_SYSTEM_MAIN。
在規劃數據庫空間時,IQ存儲的總空間可以按照源數據的75%規劃。其數據存儲的空間耗費與數據類型、數據重復值,以及IQ索引的類型和數量有關。
多個IQ存儲的數據庫空間,會提升系統性能,IQ存儲數據庫空間的個數與CPU有關,一般要求 3+CPU數量(內核個數)/10,對於Multiplex環境CPU數量是指所有服務器的CPU數量的總和。IQ存儲的數據庫空間可以在系統運行後,由具有DBA權限的用戶添加,對於單點的SybaseIQ可以采用命令行方式或者Sybase Central方式添加,對於Multiplex方式的SybaseIQ,必須通過Sybase Central方式添加。
IQ存儲的數據庫層面的空間分配按照IQ頁面分配,IQ頁面大小在數據庫建立時由用戶通過建立數據庫的語句指定。數據庫建立後,其IQ頁面大小不允許修改。IQ頁面大小可以是64KB,128KB,256KB或者512KB。
推薦的IQ PAGE SIZE大小是數據庫中最大表寬的兩倍。數據必須是2的倍數,數據從65536到524288。
64KB (IQ PAGE SIZE 65536):最大表的記錄數10億條,單個表大小大小不超過8TB。 對應32位系統64KB IQ page size性能最好。
128KB (IQ PAGE SIZE 131072)對於64-位平台的數據庫最大表記錄條數超過10億條記錄不超過40億條記錄,單表大小可超過8TB 。128KB 是缺省的IQ page size。
256KB (IQ PAGE SIZE 262144) 對於64-位平台的數據庫最大表記錄條數超過40億條記錄,單表大小可超過8TB 。
臨時存儲
在數據加載和數據查詢時需要使用臨時存儲。在數據加載和數據刪除時,臨時存儲用來建立和修改字段上的HG索引和優化的FP索引。數據查詢時,臨時存儲用來進行數據排序,以及分組和表連接處理。數據庫建立時,會建立一個初始化的臨時存儲的數據庫空間,臨時存儲的第一個數據庫空間的邏輯名是IQ_SYSTEM_TEMP。臨時存儲可以是文件系統方式或者裸設備方式,其文件系統方式的擴展名一般是.iqtmp,裸設備方式時,也建議建立類似命名規則的符號連接。
多個的臨時存儲的數據庫空間,會提升系統性能,一般要求臨時存儲的空間是IQ存儲的20%,個數與CPU有關系,一般要求 3+CPU數量(內核個數)/10。臨時存儲的數據庫空間可以在系統運行後,由DBA添加,對於單點的SybaseIQ可以采用命令行方式或者Sybase Central方式添加,對於Multiplex方式的SybaseIQ,必須通過Sybase Central方式添加臨時存儲的數據庫空間。
1.2.2.
數據庫文件 服務器消息日志(IQ Message Log)
每個Sybase IQ服務器對應一個IQ信息日志文件,此文件只能存放在文件系統上,是可以顯示的文本文件,SybaseIQ消息日志文件包括:錯誤信息,狀態信息,插入、刪除信息,執行計劃等。
數據庫建立成功正常啟動後,第一個連接的用戶建立此文件。其缺省文件名是“<數據庫名>.iqmsg”。
元數據庫事務日志(Catalog Store Transaction Log)
SybaseIQ元數據存儲就是一個Sybase ASA數據庫,用於存儲SybaseIQ的元數據,是一個傳統的按行存儲的OLTP數據庫。元數據庫事務日志文件名形如“<數據庫名>.log”,用於元數據事務管理,,實現元數據事務的回滾或者前滾。文件是二進制格式。是一個由SybaseDBMS管理的一個緩慢增長的文件(可能會到百兆)。
對此文件的清理必須通過數據庫命令,不可以直接作操作系統層面文件清理。
IQ服務器日志(IQ Server Logs)
Sybase IQ服務器在每次啟動時創建一個服務器日志文件存放啟動信息,服務器日志文件存放於目錄$ASDIR/logfiles。
對於Windows下:
IQ_startup_nt.log只記錄服務器啟動參數
server_name.00n.srvlog:n是服務器啟動的次數。其它的服務器信息送到NT 控制台窗口。這些信息能通過數據庫啟動配置文件.cfg中的配置選項 -o 選項保存到指定文件上
對於Unix和Linux平台服務器,每次服務器啟動時會產生兩個日志文件:
IQ_Server_name.00n.stderr 和 IQ_Server_name.00n.srvlog 其中n 指服務器的啟動次數。
IQ_Server_name.00n.srvlog 在數據庫服務器啟動時建立,顯示其啟動時間,檢查點,服務器錯誤信息,數據庫表加載、刪除提示信息。
文件IQ_Server_name.00n.stderr會在數據庫的每次啟動時建立一個新文件,記載服務器啟動日志和某些特定參數。
1.2.3.
數據庫構成圖 下圖是一個多機架構的SybaseIQ的構成示意圖,一個數據庫有一個或者多個實例,每一個實例有自己的元數據存儲(mydb.db)、臨時存儲(mydb.iqtmp)、元數據事務日志(mydb.log)、服務器消息日志(mydb.iqmsg),一個寫服務器實例和多個查詢服務器實例共享一個IQ存儲(mydb.iq)