SAP HANA — Multitenant DB 管理與功能特點
這一篇講述Multitenant DB的功能特徵與管理,從新增tenant DB到監控高可用性與效能以及日常DB admin的工作。
新增 Tenant DB
使用cockpit 工具
在create 過程中會有以下的程序會在背景工作中執行
1. DB會分配到一個獨立的 system local ID
2. 如果你沒有指定這個DB要分配在那些主機上(scale out架構),系統會根據它的演算法做最佳化的分配.另外這個DB的通訊port 沒有指定的話,系統也會挑選剩下可用的port.
3. data and log volumns會被create出來在相對應的主機上
4. 接下來這個DB會被紀錄上system DB的 M_DATABASES的TABLE中
5. daemon.ini 檔案會被更新, index server與其相關的服務被啟動
6.最後該DB可以在如上圖的 Database Management中被看見。
使用 SQL command
語法:
CREATE DATABASE <database_name > [ AT [ LOCATION ] ‘< port_number > ] ‘ ]SYSTEM USER PASSWORD <password>
例如:
CREATE DATABASE test SYSTEM jason PASSWORD hana2021;
在create tenant DB時需要有以下的系統權限
•DATABASE ADMIN
•DATABASE START/DATABASE STOP
•BACKUP ADMIN
剛剛提到在scale out的架構下,tenant DB的運作可以分散到不同的主機(如下圖)
在create DB時有些選項需要注意
1. 每個tenant DB在OS layer可以由不同的 User/Group來執行,這是為了實現每一個tenant DB在運作時可以高度隔離實現安全性的方式之一。
2. 可以選擇create之後不要馬上啟動該DB(預設是啟動的)
使用cockpit開啟或關閉tenant DB(如下圖)
使用SQL command開啟或關閉tenant DB
語法:
啟動: ALTER SYSTEM START DATABASE < database_name>
關閉: ALTER SYSTEM STOP DATABASE < database_name > [IMMEDIATE[WITH COREFILE ]]
重新命名與刪除
這兩項工作有以下事項必須確認
1. 必須要有DATABASE ADMIN 權限
2. 重新命名時DB需要被關閉
3. 若有system replication(這個功能請參考其他篇章)必須停止。也就是說system replication原來的replication要停止並刪除然後重新註冊再跑一次。
4. 該DB沒有啟用 dynamic tiering
使用cockpit工具
使用SQL command
先使用 dhbsql進入consoles
>hdbsql -n <hostname> -i <instance_number> -u <user_name> -d <database_name>
進入後下達如下指定
>RENAME DATABASE <current_database_name> TO <new_database_name>
若該DB服務沒停止這一個command就無法執行。
若更名成功後,在scale out的架構下。在每一台主機的相對應folder name也會自動更名。
刪除DB
使用cockpit
其中保留備份目錄是 SPS01之後的版本才有的。
使用SQL Command
語法:
DROP DATABASE < database_name > [ DROP BACKUPS]
當然刪除後期相對應主機的資料也會刪除(你會看到folder還存在,但裡面已經是空的)
Tenant DB的資源分配
我們可以控制每一個tenant DB的CPU/Memory的使用量。memeoy是用絕對值來控制。例如這個DB可以分配到256G的memory 資源。而CPU則是可以使用多少核心數,例如我們有四顆8核心的共32 core CPU.以這個方式進行分配
Cross-Database Access
雖然前面有提及每一個Tenant DB可以使用OS中不同的USER/GROUP來達到高度隔離,但有時候有些跨Tenant DB狀況仍免不了,像是要產生報表資料之類。SAP HANA提供的跨Tenant DB-Cross-Database SELECT的功能,這個功能預設是沒有打開的。
如果在 Tenant DB “A”要去access Tenant DB “C”,在另一端的DB C會開放下列物件(object)被access.
●Schemas
●Rowstore and columnstore tables (not including virtual tables)
●SQL views (not including monitoring views)
●Graphical calculation views
○If they only use supported object types as data sources
○If they don’t use procedure-based analytic privileges
●Synonyms
在這一個過程中大多會需要用到資源管理(workload management)其他的篇章會提到這一部分。重點在於在啟用這一個功能時要考慮到被呼叫遠端tenant DB的日常工作不能因為其他DB的呼叫而可能會影響日常工作的效能故需要用workload management來管控此一作業。
但使用這個功能會有幾種狀況需要注意
狀況一:
如果遠端的tenant DB的 views/procedure/synonyms這幾個object有異動(例如刪除後重新create),在執行cross-db的作業時會得到 invalidated view or invalidated procedure,這是因為Cross-Database access只有 read-only的權限。在遠端的DB有結構上的異動不會通知到其他的tenant DB,所以我們必須重新create一次Cross-Database Access的作業
狀況二:
不支援多層次的cross-database access(如下圖)
狀況三:
要連結多個tenant DB需要相關的tenant DB同時對其他有關的Tenant DB開啟cross-database access.如下圖
上圖中, DB 1 與 DB 2 及 DB 3 個別開啟的corss-database access功能,但沒有 DB 2 to DB 3也開啟。所以從 DB 1要從另兩個DB讀取資料就會無法讀取。可能會收到"execution plan aborted or current operation canceled by request and transaction rolled back"類似的錯誤訊息。
雖然我們可以有很多個tenant DB給不同的DBA管理(假設我們有一個 DBA team),身為公司的DB最高管理者你可能還是希望有些菜鳥DBA不要去動到該tenant DB的重要設定,SAP HANA就提供了這樣的功能。叫做 Configuration change backlist(在設定檔 multidb.ini的readonly_parameters區域中).
在做這設定之前有兩個必要條件需要有,一個是system DB要註冊到cockpit管理工具,另一個是要有infile admin的權限。
我們有兩個layer可以選擇
當然你可以客製化那些參數 Tenant DB Admin不能動那些可以,但HANA已經有一些預設參數是無法變動的,如下圖