Welcome 微信登录

首页 / 数据库 / MySQL / 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)、检查备节点的其他进程ttstatusc)、停止备节点的TTSERVER进程ttdaemonadmin -stopserver ##这里需要注意是否多个DSNd)、核查主备节点checkpoint进程是否全部完成call ttckpthistory停止主备节点复制进程:ttadmin -repstop $DSN2、使用ttMigrate工具迁移备节点内存数据库ttMigrate -c $DSN /ttbackup/m$DSNstandby.datl  删除备节点DSN1、备份TT内存库对象的创建脚本ttSchema $DSN2、unload备节点DSNcall ttckpt;  ##unload前先做两次checkpointcall ttckpt;ttadmin -ramunload $DSN3、删除备节点DSttdestroy $DSN4、停止daemon,检查内存段释放情况ttdaemonadmin -stop   ##这里停止daemon需要注意是否有多个DSNipcs -map |grep timestenps -fu timestentopasl  采用之前迁移的备份文件重建备节点DS1、使用ttisql拉起实例ttdaemonadmin -startttisql $DSN ##这里需要确定autocreate参数是否等于1Command> host ttadmin -rampolicy manual $DSN2、使用管理账号把之前迁移出去的备节点备份迁移回来ttMigrate -r -connstr "dsn=$DSN;uid=timesten"  /ttbackup/m$DSNstandby.dat3、启动主备节点的复制进程并检查主备复制主节点:ttadmin -repstart $DSNcall ttrepstatget;call ttlogholds;    ##这里的目的是检查主节点是否出现长事务,引起主备节点不同步备节点:ttadmin -repstart $DSNCommand> 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 $DSNl  删除新备节点DSN1、备份备节点对象的创建脚本ttSchema $DSN2、unload备节点DSN。call ttckpt;  ##unload前先做两次checkpointcall ttckpt;ttadmin -ramunload $DSN3、删除备节点DSttdestroy $DSN4、停止daemon,检查内存段释放情况ttdaemonadmin -stop   ##这里停止daemon需要注意是否有多个DSNipcs -map |grep timestenps -fu timestentopasl  使用重建备机脚本直接重建备机(新的备节点)1、使用重建备机脚本直接重建备机参考《重建备机操作》 http://www.linuxidc.com/Linux/2016-04/130375.htm2、启动新备节点的复制进程ttadmin -repstart $DSNCommand> 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版本中存在内存碎片回收后无法进入主备模式的情况,建议进行内存碎片回收前分析是否可以正常进入主备模式。更多Oracle相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12本文永久更新链接地址