RAC DB SGA超过100g的最佳实践和建议
版本说明:
本文档中相关信息适用于任何平台
Oracle数据库企业版11.2.0.3及以上
目的:
本文编写的目的,提供在RAC每个实例(注意, rac 在整个集群中采用均匀大小的 SGAs)中用户设置非常大的SGA(例如100GB)的最佳实践和建议。此文档是根据 Oracle在全球RAC客户的经验进行编译和维护的。
本文档不能取代Oracle 文档集,而是作为是一个补充。对Oracle文档的阅读、理解以及参考是必须的,以便为本说明未明确解决的任何问题提供答案。
所有建议都应由您自己的运行小组仔细审阅, 并且只有在经过潜在收益与相关风险评估后才应执行。风险评估只能通过对系统、应用程序和业务环境的详细了解下进行。
由于每个客户环境都是唯一的, 因此任何 oracle 数据库实现 (包括 oracle rac 的实现) 的成功都取决于成功的测试环境。oracle 支持已确定 100 gb 作为大的基线, 这将受益于本说明中提供的建议。然而, 这仅仅是一个基线, 小的SGAs(较小的)也受益于这些建议。因此, 本说明中的任何建议都必须使用一个测试环境进行彻底的测试和验证, 这是在生产环境中实施之前的一个生产环境的副本, 以确保与所提建议没有负面影响。
范围:
本文适用于所有新的和现有的RAC的实现。
只适用于RAC数据库,因为这里列出的大多数参数仅用于RAC数据库。
描述:
注意, 本说明中提出的建议是在使用SGA为1TB和2.6TB的数据库方面经验的结果。
同时, SGA为100GB和300GB的数据库也受益于这些建议
初始参数:
a、 设置参数 _lm_sync_timeout为1200
设置这个参数是防止重构时和DRM超时,它是一个静态参数,支持滚动重启。
b、 设置参数 _ksmg_granule_size 为134217728
设置此项将减少查找数据块的资源所需的时间。它是一个静态参数, 支持滚动重启。
c、 设置shared_pool_size 为 总SGA大小的15%或者更大
例如,如果SGA大小为1TB,这个共享池大小应该至少为150GB。这是一个动态参数。
d、 设置参数 _gc_policy_minimum为15000
如果DRM通过参数setting _gc_policy_time=0禁用,这个参数是不需要设置的。_gc_policy_minimum 为动态参数,_gc_policy_time参数是静态参数,不支持滚动重启设置。禁用DRM,这个参数可以动态设置,来替代_gc_policy_time,_lm_drm_disable 。
e、 设置参数 _lm_tickets为5000
默认值为1000,为避免在重新配置期间出现问题分配更多的tickets(用户发送信息)。它是一个静态参数,支持滚动重启,当增加这个参数值时支持滚动重启,但是在减少时,需要冷启动。
f、 设置参数gcs_server_processes为分配的lms进程默认值的两倍
LMS进程的默认数量取决于服务器拥有的CPUs(内核)的数量。因此,请参考Oracle数据库参考指南中初始化参数部分的gcs_server_processes。确认服务器的lms进程的默认数量,请确保服务器上的所有数据库的lms进程总数少于服务器上的CPUs(内核)总数。可以参考文档558185.1,它是一个静态参数,支持滚动重启。
附:gcs_server_processes默认值算法(参考Oracle11gR2 参考指南)
如果CPUs数为1-3,默认值为1
如果CPUs数为4-15,默认值为2
如果CPUs数大于16,算法为2+(CPUs/32),如果结果包括分数,忽略。例如,CPUs为20,然后就是2+(20/32),就等于2个GCS进程。如果CLUSTER_DATABASE等于false,值为0。如果ASM,值为1。 参数范围1-36。
Oracle RAC 多个实例可以设置不同的值。
推荐一下补丁:
11.2.0.3.5 DB PSU或者更高版本,建议解决已知大SGA大小的问题。
在Linux系统中SGA大约4TB, 以下bug
BUG 18780342 - LINUX SUPPORT FOR > 4TB SGA
翻译自MOS:Best Practices and Recommendations for RAC databases with SGA size over 100GB (Doc ID 1619155.1)