memlock过低导致的数据库性能问题

今天在一台备库机器上准备搭建active data guard ,在主库上做配置的时候,发现主库的反应有些慢,主要的感觉就是敲命令的时候似乎都有些停顿。
带着疑问查看了下数据库的负载情况,发现连进来的用户很少,数据库负载也很低,归档每天切换不到20次
但是使用top命令查看的时候还是能够看到kswapd1的身影,这个进程是一个性能出现问题的标志,因为在之前的一个项目中因为配置hugepage出现问题,结果导致系统出现了严重的swap现象,当时的top 进程就是kswapd这样的进程。
我按照top进程的时间简单查看了下。
Tasks: 289 total,   1 running, 282 sleeping,   0 stopped,   6 zombie
Cpu(s):  7.7%us,  7.7%sy,  0.0%ni, 84.6%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  65996212k total, 65804840k used,   191372k free,     2768k buffers
Swap: 16771776k total,  5473276k used, 11298500k free, 13392336k cached
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND 
  827 root      10  -5     0    0    0 S  0.0  0.0 393:54.67 [kswapd1]
 6176 oracle    18   0 18.2g  52m  48m S  0.0  0.1 313:30.37 ora_dia0_xxxx
  826 root      10  -5     0    0    0 S  0.0  0.0 262:21.47 [kswapd0]   
 6190 oracle    16   0 18.2g 462m 459m S  0.0  0.7 198:13.92 ora_mmon_xxxx
 3654 root      34  19     0    0    0 S  0.0  0.0  67:30.61 [kipmi0]   
 6180 oracle    16   0 18.3g  11g  11g S  0.0 17.7  43:07.78 ora_dbw0_xxxx
 6192 oracle    15   0 18.2g 104m 102m S  0.0  0.2  42:29.52 ora_mmnl_xxxx
 6184 oracle    16   0 18.2g 613m 613m S  0.0  1.0  30:04.32 ora_ckpt_xxxx   
 6182 oracle    16   0 18.2g  75m  75m S  0.0  0.1  23:53.08 ora_lgwr_xxxx 
 6186 oracle    15   0 18.2g 855m 853m S  0.0  1.3  13:33.32 ora_smon_xxxx
 6162 oracle    15   0 18.2g  29m  28m S  0.0  0.0   8:08.11 ora_pmon_xxxx    
 2773 root      10  -5     0    0    0 S  0.0  0.0   5:43.35 [kjournald]                                               
 6354 oracle    15   0 18.2g 358m 352m S  0.0  0.6   4:01.47 ora_cjq0_xxxx
 3473 root      11  -4 92888  780  556 S  0.0  0.0   2:42.97 auditd      
 6302 oracle    15   0 18.3g  42m  22m S  0.0  0.1   2:08.43 ora_arcf_xxxx 
 6276 oracle    15   0 18.3g  42m  22m S  0.0  0.1   2:08.10 ora_arc4_xxxx
 6318 oracle    15   0 18.3g  42m  22m S  0.0  0.1   2:06.25 ora_arcn_xxxx
 6290 oracle    15   0 18.3g  42m  22m S  0.0  0.1   2:05.30 ora_arca_xxxx
 6274 oracle    15   0 18.3g  42m  22m S  0.0  0.1   2:04.12 ora_arc3_xxxx
 6304 oracle    15   0 18.3g  42m  22m S  0.0  0.1   2:03.83 ora_arcg_xxxx
 6286 oracle    15   0 18.3g  42m  22m S  0.0  0.1   2:02.99 ora_arc9_xxxx
 6326 oracle    15   0 18.3g  42m  22m S  0.0  0.1   2:02.70 ora_arcp_xxxx
 6330 oracle    15   0 18.3g  42m  22m S  0.0  0.1   2:02.26 ora_arcq_xxxx
 6278 oracle    15   0 18.3g  42m  22m S  0.0  0.1   2:02.00 ora_arc5_xxxx
对于一个内存有60多G的系统来说,只有一个数据库实例,而且实例的sga大小可以看出来大概在18G左右,反应有些慢确实有些不合理。
不过直接来看,发现这里面有一个问题比较明显就是存在很多的归档进程 arc这样的进程,一般的系统中就2~4个左右,这个似乎有些多了。
自己也暗自庆幸,好像发现问题的原因了。带着疑问查看了数据库的归档配置参数LOG_ARCHIVE_MAX_PROCESSES竟然是30,从官方文档来看,就是最高值了。
简单确认之后就开始修改这个参数,从30改到了4个。
从top命令的情况来看,似乎swap有了一些改进,也确实腾出了一些内存空间
top - 17:12:45 up 81 days, 21:08,  3 users,  load average: 0.09, 0.39, 0.49
Tasks: 287 total,   1 running, 280 sleeping,   0 stopped,   6 zombie
Cpu(s):  0.1%us,  0.1%sy,  0.0%ni, 99.8%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  65996212k total, 65803376k used,   192836k free,     4588k buffers
Swap: 16771776k total,  5470956k used, 11300820k free, 13424524k cached

top - 17:17:39 up 81 days, 21:13,  3 users,  load average: 0.01, 0.17, 0.36
Tasks: 261 total,   1 running, 254 sleeping,   0 stopped,   6 zombie
Cpu(s):  0.1%us,  0.0%sy,  0.0%ni, 99.9%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  65996212k total, 65271068k used,   725144k free,     5768k buffers
Swap: 16771776k total,  4940324k used, 11831452k free, 13427832k cached

但是swap还是比较高,对于这样一个配置还不错的系统,swap应该很低,接近于0.
带着疑问开始尝试使用addm来分析指定时间段的数据库情况,但是从报告来看得到的信息还是比较少,报告中说系统有大量的paging现象,但是原因不明,建议调大内存,调内存在这个问题里面
还是站不住脚的。对于报告中的sql语句,也是相对的,因为这个库的使用人数极少,运行的sql语句也不多。sql带来的影响非常有限。

这个时候数据库日志是一个很好的参考,因为从v$database可以看出数据库是在5月份重启的,所以就查看当时启动以来的一些日志,所幸的是一查就有了一些收获。
在启动的时候还是抛出了一些警告。
而且从警告信息来看,应该是内核参数出了问题。
Starting ORACLE instance (normal)
Memlock limit too small: 32768 to accommodate segment size: 4194304
Memlock limit too small: 32768 to accommodate segment size: 44040192
Memlock limit too small: 32768 to accommodate segment size: 44040192
Memlock limit too small: 32768 to accommodate segment size: 46137344
Memlock limit too small: 32768 to accommodate segment size: 67108864
Memlock limit too small: 32768 to accommodate segment size: 67108864
。。。。。
****************** Large Pages Information ***************** 
Total Shared Global Region in Large Pages = 0 KB (0%)
Large Pages used by this instance: 0 (0 KB)
Large Pages unused system wide = 24576 (48 GB) (alloc incr 64 MB)
Large Pages configured system wide = 24576 (48 GB)
Large Page size = 2048 KB
RECOMMENDATION:
  Total Shared Global Region size is 18 GB. For optimal performance,
  prior to the next instance restart increase the number
  of unused Large Pages by atleast 0 2048 KB Large Pages (0 KB)
  system wide to get 100% of the Shared
  Global Region allocated with Large pages

这个库没有配置huge page,large_page也没有配置,至少没有生效。
metalink中的文章1511239.1也给出了比较详细的解释,就是memlock的配置问题。
使用ulimit 来查看。
$ ulimit -l
32
这个和警告信息是一致的。
而从oracle的解释和建议来看,这个值还是应该比内存配置略小,也就是要配置的足够大。
可以在/etc/security/limits.conf  修改memlock的值。比如64G的内存,就可以这么配置
*   soft   memlock    60397977*   hard   memlock    60397977

然后重新登录即可。这样就需要重启数据库实例,需要和开发进行协调来完成了,期待看到极大的性能改进。

时间: 2024-10-27 00:32:50

memlock过低导致的数据库性能问题的相关文章

不让链化现象影响数据库性能

正常情况下往表中新建记录时,数据库系统会将数据写入到块并会像这行记录提供一个ROWID值.这个值记录了这条记录在硬盘上存储的位置.在更新某条记录的时候,也是如此.数据库系统会根据ROWID的值将需要更新的记录从硬盘中读取到块中;然后更新完毕后,再将块中的记录保存到硬盘对应的位置.更新过程中,ROWID列的值通常情况下不会改变. 但是如果一个块的容量不能够容纳一条记录.也就是会所,当单个数据块没有足够的空间来保存新建的一行记录或者更新的某行记录时,就会发生链化现象.到一个数据库的容量不足以容纳一条

数据库性能分析及调整一例

数据|数据库|性能 故障现象2004年6月8日上午10:00,内蒙古巴盟网通用户反映在OSS系统界面"话单查询"里查询单个用户五天的话单特别慢,查询很长时间无结果. 例如:在OSS系统界面"综合查询"内点击"收费"-〉"话单查询",键入"用户号码,起始时间:2004-01-01 00:00:00,结束时间:2004-06-01 23:00:00",点击查询后,IE进度条缓慢,很长时间不返回结果.故障分析经过

SQL Server数据库性能的优化

server|数据|数据库|性能|优化 编者按:数据库性能优化和数据库管理系统密切相关,不同的数据库管理系统在具体操作上有很大不同.继本报连续在2003年第48期.49期上刊登<Sybase数据库性能调优>和<Oracle服务器性能调整攻略>,分别讨论了Sybase和Oracle数据库管理系统以后,本期我们将具体介绍SQL Server数据库的性能优化方法. 数据库是企业信息的核心,其应用水平的高低直接影响到企业管理水平.选择了一个高性能的数据库产品不等于就有一个好的数据库应用系统

数据库性能调优技术

一.概述 随着数据库在各个领域的使用不断增长,越来越多的应用提出了高性能的要求.数据库性能调优是知识密集型的学科,需要综合考虑各种复杂的因素:数据库缓冲区的大小.索引的创建.语句改写等等.总之,数据库性能调优的目的在于使系统运行得更快. 调优需要有广泛的知识,这使得它既简单又复杂. 说调优简单,是因为调优者不必纠缠于复杂的公式和规则.许多学术界和业界的研究者都在尝试将调优和查询处理建立在数学基础之上. 称调优复杂,是因为如果要完全理解常识所依赖的原理,还需要对应用.数据库管理系统.操作系统以及硬

数据重组让大型机数据库性能更加强大

性能管理的许多实例已经告诉我们,系统性能缓慢危害不亚于系统直接崩溃一天,但在大型机上调整数据库却相对轻松许多,只需花很少的时间通常就能获得较大的性能提升. 随着时间的推移,厂商已经增加了许多无需用户干预的方式来执行数据库重组,使得重组变得更加容易被用户忽视,直到数据库响应慢得他们无法接受,管理员想知道为什么新数据库的响应速度没有达到他们的预期,本文将介绍重组时的注意事项,以减少让你头疼的麻烦事. 关于数据库优化 数据库重组修复数据存储次佳选择 - 一个和死亡.税收一样不可避免的问题,从你启动数据

oracle数据库性能调优技术:索引调优

一.概述 随着数据库在各个领域的使用不断增长,越来越多的应用提出了高性能的要求.数据库性能调优是知识密集型的学科,需要综合考虑各种复杂的因素:数据库缓冲区的大小.索引的创建.语句改写等等.总之,数据库性能调优的目的在于使系统运行得更快. 调优需要有广泛的知识,这使得它既简单又复杂. 说调优简单,是因为调优者不必纠缠于复杂的公式和规则.许多学术界和业界的研究者都在尝试将调优和查询处理建立在数学基础之上. 称调优复杂,是因为如果要完全理解常识所依赖的原理,还需要对应用.数据库管理系统.操作系统以及硬

历年双11实战经历者:我们是如何做数据库性能优化及运维-CloudDBA和天象

8月24日阿里云数据库技术峰会上,阿里云高级DBA专家玄惭带来面对超大规模的数据库集群,尤其是在每年像双11这样重大促销活动中,阿里云是如何进行运维和优化的.本文主要介绍了天象和CloudDBA两个产品,包括他们的起源.基于系统画像仓库的应用.产品化等,最后对RDS产品的可诊断性建设和可运维性建设作了补充.   随着云数据库时代的到来,它的运维体系不仅仅包括保持数据库集群的稳定,同时我们还要关注用户体验.在业务上,体量大,用户各类,例如有公有云小客户,也有企业大客户,每类客户的需求都各式不一,众

对Oracle数据库性能优化技术的研究

大型关系数据库Oracle已经广泛应用于各行各业,如政府.交通.公安.电信.金融.能源等部门,并已逐渐成为企业信息化建设的重要数据库平台,但随着 Oracle 数据库规模的扩大,数据库用户人数的增加,数据库性能问题越来越突出,因此,有必要对 Oracle 数据库性能进行调整与优化, 使之在满足需求条件下,系统性能达到最佳和系统开销最小. 1.性能优化目标 1.1 缩短响应时间 响应时间是指从用户提交SQL语句到数据库返回结果集的第一行数据所需要的时间,缩短响应时间可以通过减小系统服务时间或用户等

《Oracle数据库性能优化方法论和最佳实践》——1.7 Oracle性能优化的神话和误区

1.7 Oracle性能优化的神话和误区 Oracle性能优化工作是Oracle数据库科学最为神秘莫测的领域,自然也就会流传着各种传言和八卦.本书最主要的目的就是真正使Oracle性能优化成为一门严谨的科学,使任何阅读并且理解本书内容的读者可以比较简单地完成Oracle性能优化工作,使自己在其他人面前成为"巫师"或"神秘的对象".1.7.1 艺术和科学 从百度.Google等网站搜索"性能优化艺术",会出现大量的条目,部分Oracle性能优化的图