SAP HANA Database 維運管理作業
這一篇我們來介紹關於HANA Database一些日常操作管理
Start and Stop Services
這是最基本的操作了,HANA一般在OS Level 是用 “sapstartsrv”ˊ這個服務來啟動整個HANA system,包括了 Name Server / index server / pre-processor等等服務並且是需要是<sid>adm帳號的權限來操作。
在OS Level 的command 有兩種啟動與關閉服務
上圖中sapcontrol command 中的00是instance number,另外你也可以使用Cockpit來實現相同的目的,可參考下面示意圖
上圖示計畫係的維護,但若是因為OS或硬體或其他問題造成的就需要做一些log的判斷甚至要把整個log dump給SAP原廠判斷。
關閉HANA DB的選項,有兩種選項
immediately — 這個選項表示會立刻關閉所有服務,正在進行的transactions會被放棄或是rollback.
Softly-timeout — 這個選項是指HANA DB會等待5分鐘(當然可以自行調整)的時間讓所有的transaction完成(並不會再有新的transaction進入)。五分鐘過後就會採用immediately的方式關服務。
另外也可以使用SQL command開啟與關閉服務,命令如下
•ALTER SYSTEM START DATABASE <tenant name>
- ALTER SYSTEM STOP DATABASE <tenant name>
若是Scale out(distributed)架構的HANA可採用如下命令
HANA DB的設定
相關的設定都在HANA的configuration file中,並且只能使用HANA相關的tool去修改不可直接在OS中修改,否則可能會有非預期的狀況發生。因為HANA參數檔案很多,通常都是會被分為group或layers.基本上有四類
上面的default 參數的設定只有在兩種狀況下才能修改,一種是來自SAP原廠的建議另一種是來自SAP Notes的文件。修改這些參數的部分可以在Cockpit修改,修該Database layer的參數最少要有 INIFILE ADMIN的系統權限才可以,而修改DB相關參數之後服務要重啟,相關細節可以參考SAP Notes 2036111.
每一個Database(不論是system DB or tenant DB)都會有以下的參數檔
–attributes.ini
–docstore.ini
–dpserver.ini
–esserver.ini
–executor.ini
–extensions.ini
–global.ini
–indexserver.ini
–multidb.ini
–scriptserver.ini
–xsengine.ini
接著介紹幾個比較重要的參數
上圖參數是指整個HANA System可以用多少的記憶體(這還跟你買的license 等級有關),而changleable是指設定立即生效不用重啟服務。
上圖參數指HANA DB多久一次將memory 中的 DATA寫入到硬碟。 0表示永不寫入(這大都用在非正式環境上)
上圖參數指HANA DB需不需要自動將log備份(沒有啟用也大都用在非正式環境)
上圖參數指HANA DB的log要不要覆寫,若選用複寫哪麼這一個DB將無法將資料回復到某個時間點。
上圖參數指HANA DB的在memory的log buffer,這視乎你的DB workload來調整。
相關的參數檔案路徑
如果是Global parameters會在:
/usr/sap/<SID>/SYS/global/hdb/customer/config/
若是個別的server則會在:
/usr/sap/<SID>/HDB<instance>/<host name>/
每個SID會有自己客製化的參數檔,如下圖
日常性工作
在完成了初始化的設定與有資料開始運作後,我們需要做一次Full backup包含 System DB / Tenant DB / system backup(包含設定檔。
以及System Replication
使用 Cockpit的SQL Console
將Database加入 Database Explorer
哪將DB加入Database Explorer的用意甚麼呢?最主要我們可以監控哪一個Application or SQL statements 最消耗資源(根據我們預先定義好的Threshold)
Tables的日常維運
因為HANA有兩種型態的tables,使用情境如下圖。Row store 用在OLTP Applications 而Column store用在OLAP Applications.
你還可以把這兩種不同型態的table互相轉換,SQL command如下
SQL → ALTER TABLE <table name> ALTER TYPE <ROW or COLUMN>;
在Column Store中,HANA在多核心CPU中使用不同的核心處理不同的Column所以可以達到大規模平行處理資料的能力,甚至若有一個column也能分開由不同的CPU來處理資料。
另外Column可以藉由多主機(scale out)架構來分散(partition)的方式來處理加快處理速度。效益如下
• Distribute across HANA nodes
• Load balancing
• Parallel processing
• Higher performance of delta merge
• Easier maintenance of very large tables
另外Partition有三種模式
Round robin :
資料平均分配在每一台主機上
Hash:
使用雜湊方式(加一些key value)分散資料
Range:
使用一些特定值來分散資料,例如日期或row 的範圍。
若我們要crate 一個分散式的tabel, SQL statements範例如下
CREATE COLUMN TABLE TEST_PARTITION (A INT, B INT, C INT, PRIMARY KEY (A,B)) PARTITION BY RANGE (A) (PARTITION 1 <= VALUES <10,PARTITION 10 <= VALUES <20,PARTITION VALUE = 50, PARTITION OTHERS)
上面的範例是使用Range type的,完成後可以在Cockpit上觀察到相關資訊
Trace Configuration
在維運中 trace configuration是作為triubleshooting 及錯誤分析,以釐清root cause.常用的 Traces有以下幾種(有些預設是沒有開啟的)
我們會再幾種不同的工具中看到這些Trace file
1. OS Level :
Trace Directories — /usr/sap/<SID>/HDB<instance No.>/<host name>/trace
2. HANA Cockpit
HANA Cockpit console → Database Explorer
3. HANA Web IDE
https://<host name>:43##/sap/hana/ide/trace
4. HANA Studio
HANA Studio console → Administration → Diagnosis Files
若要設定這些Traces的參數則必須要有 TRACE Admin的系統權限,若是"kernel profile”這個還需要附加有 SAP_INTERNAL_HANA_SUPPORT的role. 例如我們要開啟SQL trace, SQL statement如下(當然你也可以在HANA studio或是 cockpit 中的Database explorer設定)
ALTER SYSTEM ALTER CONFIGURATION (‘indexserver.ini’, ‘SYSTEM’) SET (‘sqltrace’, ‘trace’) = ‘on’ WITH RECONFIGURE
另外預設這些沒有trace沒有打開的是因為開啟後會對效能造成一定的影響,所以在解決問題後記得把它們給關閉。
另外若該DB沒有反應的話我們需要透過Cockpit來查看,你會cockpit中的 “Troubleshoot Unresponsive System”來查看。裡面的幾種資訊方便我們診斷
●Connections
●Transactions
●Blocked Transactions
●Threads