TimesTen記憶體片段(高水位)回收步驟詳解
記憶體是TimesTen記憶體資料庫中最重要的資源,就好比我們熟悉的Oracle資料庫中只有一個System資料表空間一樣;遺憾的是TimesTen的記憶體資源不單類似Oracle資料庫只有一個System資料表空間一樣的特例,TimesTen的不單只有一個資料表空間,還是一個不支援線上擴容更不能自動擴充的資料表空間。TimesTen的擴容很簡單,只需要修改sys.odbc.ini中的PermSize參數並重新裝載即可,但是畢竟記憶體資源是有限的,我們在實際營運中,經常會出現為了回收記憶體而需要進行記憶體片段回收,類似Oracle對錶空間的記憶體片段回收,但是由於TimesTen記憶體片段回收並不能像Oracle的資料表空間高水位回收那麼智能,為了協助有需要的童鞋,分享實際營運中的記憶體片段回收方法。
一、遷移並重建主節點,對主節點進行記憶體片段回收
l 使用TT記憶體庫內建的ttMigrate工具遷移備節點記憶體庫
1、停止備節應用及其他進程
a)、檢查應用進程
ps -fu timesten ##除了TT資料庫進程,其餘進程全部停止
b)、檢查備節點的其他進程
ttstatus
c)、停止備節點的TTSERVER進程
ttdaemonadmin -stopserver ##這裡需要注意是否多個DSN
d)、核查主備節點checkpoint進程是否全部完成
call ttckpthistory
停止主備節點複製進程:
ttadmin -repstop $DSN
2、使用ttMigrate工具遷移備節點記憶體資料庫
ttMigrate -c $DSN /ttbackup/m$DSNstandby.dat
l 刪除備節點DSN
1、備份TT記憶體庫對象的建立指令碼
ttSchema $DSN
2、unload備節點DSN
call ttckpt; ##unload前先做兩次checkpoint
call ttckpt;
ttadmin -ramunload $DSN
3、刪除備節點DS
ttdestroy $DSN
4、停止daemon,檢查記憶體段釋放情況
ttdaemonadmin -stop ##這裡停止daemon需要注意是否有多個DSN
ipcs -map |grep timesten
ps -fu timesten
topas
l 採用之前遷移的備份檔案重建備節點DS
1、使用ttisql拉起執行個體
ttdaemonadmin -start
ttisql $DSN ##這裡需要確定autocreate參數是否等於1
Command> host ttadmin -rampolicy manual $DSN
2、使用管理帳號把之前遷移出去的備節點備份遷移回來
ttMigrate -r -connstr "dsn=$DSN;uid=timesten" /ttbackup/m$DSNstandby.dat
3、啟動主備節點的複製進程並檢查主備複製
主節點:
ttadmin -repstart $DSN
call ttrepstatget;
call ttlogholds; ##這裡的目的是檢查主節點是否出現長事務,引起主備節點不同步
備節點:
ttadmin -repstart $DSN
Command> call ttRepStateGet;
< STANDBY, NO GRID >
1 row found.
4、檢查記憶體片段是否釋放,檢查主備複製是否正常
備節點:
Command> dssize m;
Command> call ttblockinfo;
ttadmin -noautoreload $DSN ##設定不自動載入
ttstatus -debug|grep -i auto
主節點:
call ttbookmark;
ttstatus
檢查主備節點的tterror.log日誌
二、主備切換,遷移並重建主節點記憶體庫
檢查主節點記憶體庫是否正常,檢查複製進程是否正常。
檢查主備同步是否正常
1、停止主備節點的複製進程
停止主備節點複製進程:
ttadmin -repstop $DSN
l 刪除新備節點DSN
1、備份備節點對象的建立指令碼
ttSchema $DSN
2、unload備節點DSN。
call ttckpt; ##unload前先做兩次checkpoint
call ttckpt;
ttadmin -ramunload $DSN
3、刪除備節點DS
ttdestroy $DSN
4、停止daemon,檢查記憶體段釋放情況
ttdaemonadmin -stop ##這裡停止daemon需要注意是否有多個DSN
ipcs -map |grep timesten
ps -fu timesten
topas
l 使用重建備機指令碼直接重建備機(新的備節點)
1、使用重建備機指令碼直接重建備機
參考《重建備機操作》
2、啟動新備節點的複製進程
ttadmin -repstart $DSN
Command> call ttRepStateGet;
< STANDBY, NO GRID >
1 row found.
3、檢查高水位是否釋放,檢查新主備複製是否正常
新備節點:
Command> dssize m;
Command> call ttblockinfo;
ttadmin -noautoreload $DSN ##
ttstatus -debug|grep -i auto
新主節點:
call ttbookmark;
ttstatus
檢查主備節點的tterror.log日誌
4、新備節點高水位回收已完成,啟動並檢查業務是否正常運行。
至此,主備節點的記憶體片段回收操作已經完成。
注意事項:
1、在實施備節點記憶體片段回收操作如果出現備節點IDLE,可以檢查主節點是否存在長事務,如果存在長事務,先處理長事務。
2、在實施過程中如果出現任何異常,採用緊急重建備機的方式回退。
3、在11.2.1.x版本中存在記憶體片段回收後無法進入主備模式的情況,建議進行記憶體片段回收前分析是否可以正常進入主備模式。