本发明属于数据管理,具体涉及一种数据库服务避免oom的方法及系统。
背景技术:
1、oom(out of memory)是linux内核的一种内存管理机制,在系统可用内存较少的情况下,内核为保证系统可以持续运转,会挑选杀掉一些进程释放掉一些内存。一般oom的触发流程是,某进程想要分配物理内存,由于系统内存不足,触发缺页异常,内核去分配物理内存,发现物理内存不足,触发oom机制。
2、oom策略,linux下每个进程都有个oom权重,取值是-17到+15,取值越高,越容易被干掉。oom挑选杀哪个进程,是基于它的badness score。计算badness core的原则是,尽可能少杀进程来尽可能释放出足够多的内存,同时不去杀那些耗费内存很多的无辜进程。badness score的计算会用到进程的内存消耗,cpu耗时(user time+system time),运行时间,以及oom_adj值(可以简单的理解成系统的优先级)。简言之,进程耗费的内存越多,得分就越高;进程运转的时刻越长,得分就越低。
3、数据库服务通常都会占用大量的内存,在触发系统oom时,很大概率会被系统服务oom-killer给杀掉。传统避免oom的手段,大多数都是通过修改系统参数,比如:进程的badness值,或者修改一些参数,影响badness值。属于头痛医头,脚痛医脚,治标不治本的方法。没有从本质上解决问题。
技术实现思路
1、发明目的:为解决现有避免oom的手段无法从本质上解决数据库服务很大概率会被系统服务oom-killer给杀掉的问题,本发明公开了一种数据库服务避免oom的方法及系统,通过自我约束内存使用量,限制内存使用量,会话、会话组管理等机制,可以有效的管控oom发生,减少服务器宕机,提升系统的健壮性,提升系统平均故障时间。在高竞争内存消耗时,可以保证低竞争内存会话任务的正常执行,提升系统的吞吐量和用户体验。
2、技术方案:一种数据库服务避免oom的方法,包括以下步骤:
3、步骤1:根据当前的数据库服务进程的内存使用量和用户配置的最大内存使用量,计算当前内存水位;
4、步骤2:依据当前的数据库服务进程的内存状态和当前内存水位,确定数据库服务进程的新的内存状态;
5、步骤3:依据新的内存状态,做出相应的操作,包括:释放当前的数据库服务进程中的指定会话;
6、步骤4:休眠若干时间,并重新回到步骤1。
7、进一步的,所述的当前的数据库服务进程的内存使用量来自数据库服务内存管理模块。
8、进一步的,所述的当前的数据库服务进程的内存使用量通过内存分配库提供的接口获取。
9、进一步的,所述的当前的数据库服务进程的内存使用量通过系统的api接口获取。
10、进一步的,所述步骤2具体包括:
11、所述内存状态按照级别从低到高依次包括正常状态、黄色预警状态、橙色预警状态和红色预警状态;
12、当当前的数据库服务进程的内存状态为正常状态时,若当前内存水位达到第一水位阈值,则直接进入红色预警状态;若当前内存水位达到第二水位阈值,则进入橙色预警状态;若当前内存水位达到第三水位阈值,则进入黄色预警状态;否则依然为正常状态;
13、当当前的数据库服务进程的内存状态为黄色预警状态时,若当前内存水位达到第一水位阈值,则直接进入红色预警状态;若当前内存水位达到第二水位阈值,则进入橙色预警状态;若当前内存水位小于第四水位阈值,则返回到正常状态;否则依然为黄色预警状态;
14、当当前的数据库服务进程的内存状态为橙色预警状态时,若当前内存水位达到第一水位阈值,则进入红色预警状态;若当前内存水位小于第三水位阈值,则进入到黄色预警状态;否则依然为黄色预警状态;
15、当当前的数据库服务进程的内存状态为红色预警状态时,若当前内存水位小于第二水位阈值,则进入到橙色预警状态,否则依然为红色预警状态;
16、从大到小设置第一水位阈值、第二水位阈值、第三水位阈值和第四水位阈值。
17、进一步的,步骤3具体包括:
18、当新的内存状态为正常状态,则进入步骤4;
19、当新的内存状态为黄色预警状态时,则释放当前的数据库服务进程中最耗内存的会话;
20、当新的内存状态为橙色预警状态时,则释放每个会话组中最耗内存的会话;
21、当新的内存状态为红色预警状态时,则遍历当前的数据库服务进程中所有会话,释放消耗内存超过设定阈值的所有会话。
22、进一步的,当新的内存状态为橙色预警状态时,且当前的数据库服务进程中无会话组时,释放多个会话。
23、进一步的,在会话组中,使用有序链表维护会话的消耗内存顺序。
24、进一步的,在会话组中,通过大顶堆数据结构维护会话的消耗内存顺序。
25、本发明公开了一种数据库服务避免oom的系统,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现一种数据库服务避免oom的方法。
26、有益效果:本发明与现有技术相比,具有以下优点:
27、(1)本发明方法,通过内存自我约束机制,可以有效的控制数据库服务进程的内存使用量,可以有效避免被oom-killer杀掉的情景;
28、(2)采用本发明方法,对小内存事务友好,使小内存事务可以不受影响,即使处于高竞争状态,也能维持低耗内存的会话执行,提升系统的健壮性和用户体验,只会处理那些耗内存的查询,有效的提升系统的服务能力;
29、(3)比起传统的通过影响badness等避免oom的方法,本发明方法可以在本质上有效避免oom;
30、(4)比起传统的修改系统参数等避免oom的方法,虽然oom不会发生了,但系统处于低效运作或者卡死状态,本发明方法可以避免修改系统参数,无侵入性,可以高效的对用户提供服务。
1.一种数据库服务避免oom的方法,其特征在于:包括以下步骤:
2.根据权利要求1所述的一种数据库服务避免oom的方法,其特征在于:所述的当前的数据库服务进程的内存使用量来自数据库服务内存管理模块。
3.根据权利要求1所述的一种数据库服务避免oom的方法,其特征在于:所述的当前的数据库服务进程的内存使用量通过内存分配库提供的接口获取。
4.根据权利要求1所述的一种数据库服务避免oom的方法,其特征在于:所述的当前的数据库服务进程的内存使用量通过系统的api接口获取。
5.根据权利要求1所述的一种数据库服务避免oom的方法,其特征在于:所述步骤2具体包括:
6.根据权利要求5所述的一种数据库服务避免oom的方法,其特征在于:步骤3具体包括:
7.根据权利要求6所述的一种数据库服务避免oom的方法,其特征在于:当新的内存状态为橙色预警状态时,且当前的数据库服务进程中无会话组时,释放多个会话。
8.根据权利要求6所述的一种数据库服务避免oom的方法,其特征在于:在会话组中,使用有序链表维护会话的消耗内存顺序。
9.根据权利要求6所述的一种数据库服务避免oom的方法,其特征在于:在会话组中,通过大顶堆数据结构维护会话的消耗内存顺序。
10.一种数据库服务避免oom的系统,其特征在于:包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现权利要求1至9任意一项所述的一种数据库服务避免oom的方法。