[转帖]NUMA导致的Oracle性能问题

numa,导致,oracle,性能,问题 · 浏览次数 : 0

小编点评

## 问题分析与解决方案 **背景:** * Oracle 版本: 11.2.0.4 * OS 版本: OEL5.8 **问题:** * 一条主业务 SQL 语句在新主库执行时间由之前的毫秒级别完成变成了 20-60 秒不等。 **优化过程:** * 优化过程发现存在大量物理读,分析表明可能是缓存问题。 * 使用 `sga` 参数调整 SGA 大小,重启数据库后问题依然出现,说明可能存在其他问题。 * 通过设置 `numa=off` 等参数禁用 NUMA,问题得到解决。 **解决方案:** 1. **分析性能瓶颈:** 确定实际问题所在,可以分析 `v$sgainfo` 等监控信息,以及使用工具如 `sql_performance_profile` 查看性能变化。 2. **调整 SGA 大小:** 将 SGA 设置至 80GB,尽量满足性能需求。 3. **确认 NUMA 问题:** 检查 `NUMActl` 的运行结果,并确保 `numa=off` 参数设置正确。 4. **优化 SQL 语句:** 分析 SQL 语句,检查是否存在性能瓶颈,并进行优化。 5. **监控性能:** 定期监控数据库性能,及时发现并解决问题。 **其他建议:** * 建议参考官方文档和相关资源,深入了解 NUMA 和 `numa=off` 等参数的影响。 * 建议使用性能分析工具,例如 `sql_performance_profile`,分析 SQL 语句的执行计划和性能瓶颈。 * 建议在遇到问题时,及时寻求专业帮助,例如咨询数据库专家或社区论坛。

正文

https://www.cnblogs.com/realcp1018/p/6903721.html

 

背景简介:

Oracle版本:11.2.0.4   OS 版本:OEL5.8

在一次Oracle的Dataguard正常switchover过程中,遇到了一个极其诡异的问题,一条主业务的SQL语句在新主库的执行时间由之前的毫秒级别完成变成了20-60秒不等,为避免高峰业务超时必须尽快进行优化,否则只能走回退方案。

优化过程:

其实这个语句在之前将备库切换为snapshot备库做测试时表现是非常良好的,但是切换之后立马出了问题。在备库实际执行后获取到的执行计划与在主库一模一样,如下:

获取执行计划的语句如下:(语句出自ITPUB大神版主lfree)

1
2
3
4
5
select *
from
table(dbms_xplan.display_cursor(NVL('&1',NULL),
      NULL,
      'ALL ALLSTATS LAST PEEKED_BINDS cost partition -projection -outline &2'));

这里的参数1和2全部设置为空即可,此语句可以查出当前会话中上一个执行过语句的真实执行计划。

此SQL中不涉及视图,所以这个执行计划是非常好的,在主库执行也是毫秒级别的,因此同样的执行计划在备库却非常慢就很值得思考了。

接下来我利用set autot工具得到了执行此SQL后的统计信息,发现存在大量物理读。这里就很搞笑了,真实执行计划中不存在表扫描,所以出现这么多的物理读一定是回表操作特别多,那么为什么回表?显然内存不够。

于是我将SGA加大至80GB(比主库还大20GB),重启数据库再查,问题依旧。

我依然坚信是缓存的问题,那么必须要搞清为何数据未被缓存至内存,对Oracle数据库来说大多有2个原因:

1、数据太多,内存太小。

2、不是热点数据,被LRU刷出内存。

首先排除第二条,原主库60G的SGA都可以,现在80G的SGA没理由不可以。

此外注意到一个现象,v$sgainfo中的buffer pool在接近30GB时有一个很长时间的停顿,然后才慢慢增长至接近70G(剩余部分属于sharedpool等)。

于是突然想到NUMA的问题,果然:

numactl --hardware的运行结果:

这就尴尬了,在/etc/grub.conf的kernel一行后添加了numa=off,重启服务器后果然问题被解决。

事后查看数据库日志找到了如下信息:

.

因此可以确认是操作系统未关闭NUMA特性引起的(只设置数据库禁用NUMA的隐含参数是无用的,Oracle在11GR2之后已经默认禁用NUMA,但只是数据库级别)。

关于Oracle NUMA的相关信息,参考官网文档:Oracle NUMA Usage Recommendation (文档 ID 759565.1)

名词解释:

什么是NUMA:

NUMA模式是一种分布式存储器访问方式,处理器可以同时访问不同的存储器地址,大幅度提高并行性。 NUMA模式下,处理器被划分成多个"节点"(node), 每个节点被分配有的本地存储器空间。 所有节点中的处理器都可以访问全部的系统物理存储器,但是访问本节点内的存储器所需要的时间,比访问某些远程节点内的存储器所花的时间要少得多。

--OK,注意这几个字:大幅提高并行性。Oracle数据库绝大多数时候进程都是串行的,除非特意设置并行度,而SQL Server也只有超过cost阈值才会并行,因此数据库服务器应该禁用NUMA。

关于NUMA更加详细的信息参考:

https://www.ibm.com/developerworks/cn/linux/l-numa/index.html

https://technet.microsoft.com/zh-cn/library/ms178144(v=sql.105).aspx

http://www.cnblogs.com/yubo/archive/2010/04/23/1718810.html

建了一个数据库和编程的交流群,用于交流和提升能力,目前主要专注于Golang/Java/Python以及TiDB数据库,群号:231338927,建群日期:2019.04.26。 如发现博客错误,可直接留言指正,感谢。

与[转帖]NUMA导致的Oracle性能问题相似的内容:

[转帖]NUMA导致的Oracle性能问题

https://www.cnblogs.com/realcp1018/p/6903721.html 背景简介: Oracle版本:11.2.0.4 OS 版本:OEL5.8 在一次Oracle的Dataguard正常switchover过程中,遇到了一个极其诡异的问题,一条主业务的SQL语句在新主库

[转帖]关于linux:NUMA架构下的内存延迟区别测试

https://lequ7.com/guan-yu-linuxnuma-jia-gou-xia-de-nei-cun-yan-chi-qu-bie-ce-shi.html 当初的服务器物理机CPU个别都是多个CPU,核数也是十几甚至几十核。内存几十GB甚至是上百G,也是由许多的内存条组成的。那么我这

[转帖]Intel关NUMA的内存编址

https://zhuanlan.zhihu.com/p/454928730 最近在做某国产化平台相关的适配, 不管NUMA的性能和实现方式都和Intel有较大不同, 作为比较对象, 理解Intel的NUMA实现是很有必要的. 虽然从软件角度, 打开NUMA会带来额外的复杂度, 但是从硬件角度, 关

[转帖]Oracle数据库开启NUMA支持

NUMA简介 NUMA(Non Uniform Memory Access Architecture,非统一内存访问)把一台计算机分成多个节点(node),每个节点内部拥有多个CPU,节点内部使用共有的内存控制器,节点之间是通过互联模块进行连接和信息交互。因此节点的所有内存对于本节点所有的CPU都是

[转帖]华为openGauss 鲲鹏NUMA架构优化

https://www.modb.pro/db/31086 图 1 鲲鹏NUMA架构优化图 openGauss根据鲲鹏处理器的多核NUMA架构特点,进行针对性一系列NUMA架构相关优化,一方面尽量减少跨核内存访问的时延问题,另一方面重分发挥鲲鹏多核算力优势,所提供的关键技术包括重做日志批插,热点数据

[转帖]【银河麒麟V10】【服务器】numa技术

目录 1、numa介绍 2、numa工具安装 3、numa查看 4、numa测试 5、numa打开与关闭 6、补充:服务器SMP、NUMA、MPP三大体系结构介绍 (1)、 SMP(Symmetric Muti-Processor) (2)、NUMA(Non-Uniform Memory Acces

[转帖]CPU性能监控之三-----非Numa架构的进程绑定

CPU性能监控之三 非Numa架构的进程绑定 https://blog.51cto.com/hl914/1557740 上一篇重点在Numa架构下如果绑定,这篇就说说在非numa架构下常用的绑定吧。 使用taskset这个命令进行绑定,这个命令无法对内存进行限制,所以,如果有特殊需要,也可以使用Nu

[转帖]服务器体系(SMP, NUMA, MPP)与共享存储器架构(UMA和NUMA)

1 3种系统架构与2种存储器共享方式 1.1 架构概述 从系统架构来看,目前的商用服务器大体可以分为三类 对称多处理器结构(SMP:Symmetric Multi-Processor) 非一致存储访问结构(NUMA:Non-Uniform Memory Access) 海量并行处理结构(MPP:Ma

[转帖]服务器体系(SMP, NUMA, MPP)与共享存储器架构(UMA和NUMA)

《Linux内存管理:转换后备缓冲区(TLB)原理》 《内存管理:Linux Memory Management:MMU、段、分页、PAE、Cache、TLB》 《Memory Management Concepts overview(内存管理基本概念)》 《NUMA - Non Uniform M

[转帖]十年后数据库还是不敢拥抱NUMA?

https://zhuanlan.zhihu.com/p/387117470 导语 在2010年前后MySQL、PG、Oracle数据库在使用NUMA的时候碰到了性能问题,流传最广的这篇 MySQL – The MySQL “swap insanity” problem and the effect