首页 数据库 mysql教程 生产上数据库大量的latchfree导致的CPU资源耗尽的问题的解决

生产上数据库大量的latchfree导致的CPU资源耗尽的问题的解决

Jun 07, 2016 pm 04:06 PM
cpu 导致 数据库 资源

中午的时候,我们生产上的某个数据库,cpu一直居高不下 通过如下的sql语句,我们查看当时数据库的等待,争用的情况: select s.SID, s.SERIAL#, kill -9 || p.SPID, s.MACHINE, s.OSUSER, s.PROGRAM, s.USERNAME, s.last_call_et, a.SQL_ID, s.LOGON_TIME, a

中午的时候,我们生产上的某个数据库,cpu一直居高不下

\

通过如下的sql语句,我们查看当时数据库的等待,争用的情况:

select s.SID,
       s.SERIAL#,
       'kill -9 ' || p.SPID,
       s.MACHINE,
       s.OSUSER,
       s.PROGRAM,
       s.USERNAME,
       s.last_call_et,
       a.SQL_ID,
       s.LOGON_TIME,
       a.SQL_TEXT,
       a.SQL_FULLTEXT,
       w.EVENT,
       a.DISK_READS,
       a.BUFFER_GETS
  from v$process p, v$session s, v$sqlarea a, v$session_wait w
 where p.ADDR = s.PADDR
   and s.SQL_ID = a.sql_id
   and s.sid = w.SID
   and s.STATUS = 'ACTIVE'
 order by s.last_call_et desc;
登录后复制

从event可以看到,是latch 的争用导致的原因

\

通过如果的sql,查看是什么样的latch

select * from v$session_wait 
where event  like 'latch free';
 
登录后复制

\

P2就是 这个latch的name,通过v$latchname这个视图就可以知道哪个具体的latch

1:45:55 PM SQL> select * from v$latchname where latch#=164;
 
    LATCH# NAME                                                                   HASH
---------- ---------------------------------------------------------------- ----------
       164 simulator hash latch                                             2233208730
登录后复制


查看latch的历史情况

2:11:59 PM SQL> select name,gets,misses,sleeps from v$latch where sleeps >0 order by sleeps desc;
 
NAME                                                                   GETS     MISSES     SLEEPS
---------------------------------------------------------------- ---------- ---------- ----------
simulator hash latch                                             4827860212  135426899   10890947
cache buffers chains                                             1619822817 2850976006    4747728
gc element                                                       4660052091   25748270     175073
resmgr:schema config                                               91872524     153968      95708
ges resource hash list                                            174151449    1070556      55459
Real-time plan statistics latch                                    40953155     651496      44527
call allocation                                                     3301878     265908      43501
row cache objects                                                 336300485    4970324      19366
登录后复制


这个simulator hash latch已经是显著的latch部分

eagle在他的网站上有篇文章讲到了关于simulator这个

http://www.eygle.com/archives/2011/11/simulator_lru_latch.html

simulator意为模拟,也就是说当Oracle在内存中进行数据块处理时,实际上还会在预先分配的Buffer中进行相关信息记录,如DBA信息,当数据块被老化之后,下次读取时,如果请求的数据在Simulator内存中存在,则认为继续缓存该数据块是有意义的,通过监控并模拟统计这些操作,并对计算结果加权运算,就可以实现对于内存的调整建议。
在模拟过程中,也是通过Latch来实现的,相关的Latch就有 simulator lru latch 、 simulator hash latch等.

就Buffer Cache而言,如果系统中该类争用严重,则可以考虑关闭db_cache_advice,消除这部分内部操作对于性能的影响。
以下是一个相关BUG,在该Bug中,由于DB_CACHE_ADVICE的开启导致了严重的simulator lru latch的竞争:

Bug 5918642 Heavy latch contention with DB_CACHE_ADVICE on

This note gives a brief overview of bug 5918642.
The content was last updated on: 01-APR-2008
Click here for details of each of the sections below.

Affects:

Product (Component) Oracle Server (Rdbms)
Range of versions believed to be affected Versions < 11.2
Versions confirmed as being affected
  • 10.2.0.3
Platforms affected Generic (all / most platforms affected)

Fixed:

This issue is fixed in
  • 11.2 (Future Release)
  • 10.2.0.4 (Server Patch Set)
  • 11.1.0.7 (Server Patch Set)

Symptoms:

Related To:

  • Latch Contention
  • Waits for "latch free"
  • Performance Monitoring
  • DB_CACHE_ADVICE

Description

High simulator lru latch contention can occur when db_cache_advice is
set to ON if there is a large buffer cache.


Workaround:
  Set db_cache_advice to OFF
登录后复制

当然,这个只是治标不治本的做法,这个是显现的表象的问题,根源的问题还是这个sql语句有问题

当一个数据块读入到sga中时,该块的块头(buffer header)会放置在一个hash bucket的链表(hash chain)中。该内存结构由一系列cache buffers chains子latch保护(又名hash latch或者cbc latch)。对Buffer cache中的块,要select或者update、insert,delete等,都得先获得cache buffers chains子latch,以保证对chain的排他访问。若在过程中发生争用,就会等待latch:cache buffers chains事件。

产生原因: 1. 低效率的SQL语句(主要体现在逻辑读过高) 在某些环境中,应用程序打开执行相同的低效率SQL语句的多个并发会话,这些SQL语句都设法得到相同的数据集,每次执行都带有高 BUFFER_GETS(逻辑读取)的SQL语句是主要的原因。相反,较小的逻辑读意味着较少的latch get操作,从而减少锁存器争用并改善性能。注意v$sql中BUFFER_GETS/EXECUTIONS大的语句。 2.Hot block 当多个会话重复访问一个或多个由同一个子cache buffers chains锁存器保护的块时,热块就会产生。当多个会话争用cache buffers chains子锁存器时,就会出现这个等待事件。有时就算调优了SQL,但多个会话同时执行此SQL,那怕只是扫描特定少数块,也是也会出现HOT BLOCK的。

SELECT P935.SEQUENCEID,
       null FA_SEQUENCEID,
       P935.ORDERID,
       P935.ORGORDERID,
       P935.PRODUCTNAME,
       P935.PRODUCTNUM,
       P935.ORDERTIME,
       P935.LASTUPDATETIME,
       P935.ORDERSTATUS,
       P935.MEMO,
       935 orderCode,
       P935.PAYERACCTCODE,
       P935.PAYERACCTTYPE,
       P935.PAYEEACCTCODE PLATACCTCODE,
       P935.PAYEEACCTTYPE PLATACCTTYPE,
       P936.PAYEEACCTCODE,
       P936.PAYEEACCTTYPE,
       EXT935.PAYER_DISPLAYNAME,
       EXT935.PAYER_NAME,
       EXT935.PAYER_IDC,
       EXT935.PAYER_MEMBERTYPE,
       EXT936.PAYER_DISPLAYNAME PLAT_DISPLAYNAME,
       EXT936.SUBMITNAME PLAT_NAME,
       EXT936.PAYER_IDC PLAT_IDC,
       EXT936.PAYER_MEMBERTYPE PLAT_MEMBERTYPE,
       EXT936.PAYEE_DISPLAYNAME,
       EXT936.PAYEE_NAME,
       EXT936.PAYEE_IDC,
       EXT936.PAYEE_MEMBERTYPE,
       P935.PAYEEDISPLAYNAME WEBSITENAME,
       CASE
         WHEN (SELECT count(*)
                 FROM PAYMENTORDER P936
                WHERE P936.Ordercode = 936
                  and P936.Orderstatus = 0
                  AND <span style="color:#ff0000;">P936.Relatedsequenceid = P935.SEQUENCEID</span>) > 0 THEN
          0
         ELSE
          1
       END AS SHARINGRESULT,
       CASE D935.Dealcode
         WHEN 210 then
          14
         else
          D935.DEALTYPE
       end PAYMETHOD,
       D935.DEALAMOUNT,
       G935.EXT1,
       G935.Ext2,
       G935.PAYERCONTACTTYPE,
       G935.PAYERCONTACT,
       NVL(D935.PAYEEFEE, 0) PAYEEFEE,
       NVL(D935.PAYERFEE, 0) PAYERFEE,
       nvl(MS936.PAYEEFEE, 0) PLATFORMFEE,
       P935.VERSION
  FROM PAYMENTORDER          P935,
       PAYMENTORDER          P936,
       DEAL                  D935,
       GATEWAYORDER          G935,
       MSGATEWAYSHARINGORDER MS936,
       PAYMENTORDEREXT       EXT935,
       PAYMENTORDEREXT       EXT936
 WHERE P936.ORDERCODE = 936
   AND P935.ORDERCODE = 935
   AND P936.RELATEDSEQUENCEID = to_char(P935.SEQUENCEID)
   AND P935.SEQUENCEID = G935.SEQUENCEID(+)
   AND P935.SEQUENCEID = D935.ORDERSEQID(+)
   AND P935.SEQUENCEID = EXT935.ORDERSEQID(+)
   AND P936.SEQUENCEID = EXT936.ORDERSEQID(+)
   AND P936.SEQUENCEID = MS936.SEQUENCEID(+)
   AND MS936.SHARINGTYPE = 1
   AND P935.SEQUENCEID = :1
UNION
SELECT P938.SEQUENCEID,
       P935.SEQUENCEID FA_SEQUENCEID,
       P938.ORDERID,
       P938.ORGORDERID,
       P935.PRODUCTNAME,
       P935.PRODUCTNUM,
       P938.ORDERTIME,
       P938.LASTUPDATETIME,
       P938.ORDERSTATUS,
       P938.MEMO,
       938 orderCode,
       P938.PAYERACCTCODE,
       P938.PAYERACCTTYPE,
       P938.PAYEEACCTCODE PLATACCTCODE,
       P938.PAYEEACCTTYPE PLATACCTTYPE,
       P938.PAYEEACCTCODE,
       P938.PAYEEACCTTYPE,
       EXT938.PAYER_DISPLAYNAME,
       EXT938.PAYER_NAME,
       EXT938.PAYER_IDC,
       EXT938.PAYER_MEMBERTYPE,
       EXT938.PAYEE_DISPLAYNAME PLAT_DISPLAYNAME,
       EXT938.SUBMITNAME PLAT_NAME,
       EXT938.PAYEE_IDC PLAT_IDC,
       EXT938.PAYEE_MEMBERTYPE PLAT_MEMBERTYPE,
       EXT938.PAYEE_DISPLAYNAME,
       EXT938.PAYEE_NAME,
       EXT938.PAYEE_IDC,
       EXT938.PAYEE_MEMBERTYPE,
       P935.PAYEEDISPLAYNAME WEBSITENAME,
       null SHARINGRESULT,
       D938.DEALTYPE PAYMETHOD,
       D938.DEALAMOUNT,
       G935.EXT1,
       G935.Ext2,
       G935.PAYERCONTACTTYPE,
       G935.PAYERCONTACT,
       NVL(D938.PAYEEFEE, 0) PAYEEFEE,
       NVL(D938.PAYERFEE, 0) PAYERFEE,
       0 PLATFORMFEE,
       P935.VERSION
  FROM PAYMENTORDER    P935,
       PAYMENTORDER    P938,
       DEAL            D938,
       GATEWAYORDER    G935,
       PAYMENTORDEREXT EXT938
 WHERE P935.ORDERCODE = 935
   AND P938.ORDERCODE = 938
   AND P938.RELATEDSEQUENCEID = to_char(P935.SEQUENCEID)
   AND P935.SEQUENCEID = G935.SEQUENCEID(+)
   AND P938.SEQUENCEID = D938.ORDERSEQID(+)
   AND P938.SEQUENCEID = EXT938.ORDERSEQID(+)
   AND P935.SEQUENCEID = :2
登录后复制

分析上面的sql,上面标红的地方,等号左边是varchar2的数据类型,括号右边是number的数据类型,会导致数据类型的隐式转换,造成极大的性能影响

联系研发,修改了sql语句,问题解决

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

144 核心,3D 堆叠 SRAM:富士通详细介绍下一代数据中心处理器 MONAKA 144 核心,3D 堆叠 SRAM:富士通详细介绍下一代数据中心处理器 MONAKA Jul 29, 2024 am 11:40 AM

本站7月28日消息,据外媒TechRader报道,富士通详细介绍了计划于2027年出货的FUJITSU-MONAKA(以下简称MONAKA)处理器。MONAKACPU基于“云原生3D众核”架构,采用Arm指令集,面向数据中心、边缘与电信领域,适用于AI计算,能实现大型机级别的RAS1。富士通表示,MONAKA将在能效和性能方面实现飞跃:得益于超低电压(ULV)工艺等技术,该CPU可实现2027年竞品2倍的能效,冷却无需水冷;此外该处理器的应用性能也可达对手2倍。在指令方面,MONAKA配备的矢量

泄漏揭示了英特尔 Arrow Lake-U、-H、-HX 和 -S 的关键规格 泄漏揭示了英特尔 Arrow Lake-U、-H、-HX 和 -S 的关键规格 Jun 15, 2024 pm 09:49 PM

英特尔ArrowLake预计将基于与LunarLake相同的处理器架构,这意味着英特尔全新的LionCove性能核心将与经济的Skymont效率核心相结合。而LunarLake仅作为ava推出

AM4 拒绝死亡,消息称 AMD 将推出 Ryzen 9 5900XT /7 5800XT:主频最高 4.8GHz AM4 拒绝死亡,消息称 AMD 将推出 Ryzen 9 5900XT /7 5800XT:主频最高 4.8GHz Jun 05, 2024 pm 09:43 PM

本站6月1日消息,消息源@CodeCommando今天发布推文,分享了AMD即将在Computex2024活动中的部分演示文档截图,推文内容为“AM4永不消亡”,配图展示了两款新的Ryzen5000XT系列处理器。根据截图内容显示以下两款产品:Ryzen95900XTRyzen95900XT定位相对高端,这是一款全新的16核AM4处理器,其时钟速度略低于AMD的Ryzen95950X。Ryzen75800XT它是AMD现有Ryzen75800X处理器的更快变体,这两款处理器的主频最高可达4.8G

intel cpu大小核调度问题,12代以上CPU大小核优化设置 intel cpu大小核调度问题,12代以上CPU大小核优化设置 Jun 19, 2024 am 01:42 AM

Inteli5-12600及以上CPU,i5-13400及以上CPU都有P-Core性能核(大核)和E-Core能效核(小核),因“大小核”的调度问题,导致某些游戏掉帧、卡顿,还不如之前的老CPU,其实是系统觉得应付当前场景,小弟就能搞定,没必要出动大哥,所以大核一直在休息没有干活导致。下面小编教大家如何解决这个问题。在桌面上新建一个文本文档,复制下面内容,另存为1.reg,然后右键合并。WindowsRegistryEditorVersion5.00[HKEY_LOCAL_MACHINE\SY

消息称英特尔 Z890 主板有望标配雷电 4 ,Arrow Lake-S 处理器核显包含多种规模 消息称英特尔 Z890 主板有望标配雷电 4 ,Arrow Lake-S 处理器核显包含多种规模 May 07, 2024 pm 05:10 PM

本站5月7日消息,博主金猪升级包近日爆料,称英特尔下一代桌面处理器ArrowLake-S系列的核显将包含多个版本,同时配套的Z890主板有望标配雷电4接口。根据目前消息,ArrowLake-S系列CPU将采用GT1规格的核显,拥有至多4个Xe-core(即64EU)。不过英特尔还是将在低阶产品的核显上“秀刀法”,切出仅包含3个乃至2个Xe-core的型号。对低阶产品降级核显规模是英特尔的惯例,目前已推出的酷睿Ultra5125H处理器就仅包含7个Xe-core,低于MeteorLake-P系列产

英特尔​13代14代处理器稳定性问题解决方案 英特尔​13代14代处理器稳定性问题解决方案 Jun 18, 2024 pm 06:01 PM

13代14代处理器出现游戏崩溃、蓝屏死机、电脑自动重启等故障,之前怀疑是nvidia显卡导致,后nvidia查询后是英特尔处理器的锅,最近英特尔将第13/14代处理器稳定问题归咎于主板和BIOS系统制造商。现英特尔也提出了解决方法,下面与小编一起看看吧。600和700系列主板BIOS中涉及13代和14代酷睿处理器电压、频率、功耗和稳定性方面的设置选项,不正确设置、或者设置值超出英特尔官方所允许的范围之外,均有可能会导致、或者增加处理器运行不稳定的风险,英特尔方面的推荐设置如下(请参阅下图):【C

英特尔确认 LGA9324 Oak Stream-AP 平台,支持 Diamond Rapids 至强处理器 英特尔确认 LGA9324 Oak Stream-AP 平台,支持 Diamond Rapids 至强处理器 Aug 22, 2024 am 11:16 AM

本站8月22日消息,X平台用户포시포시(@harukaze5719)注意到,英特尔在其官网DESIGN-iNTOOLSstore上架了两款适用于LGA9324-OKS-AP平台供电测试的转接板。▲BLU版本转接板,此外还有RED版本英特尔在这两款产品的描述中写到,LGA9324-OKS-APOakStream平台支持DiamondRapids,正面证实了至强6“GraniteRapids”后的下代至强性能核处理器与对应平台的存在。目前有关DiamondRapids处理器和OakStream平台的

消息称 AMD Krackan Point CPU 隶属 Ryzen AI 300 系列,明年推出 消息称 AMD Krackan Point CPU 隶属 Ryzen AI 300 系列,明年推出 Jul 11, 2024 pm 01:36 PM

本站7月3日消息,博主金猪升级包近日在微博动态下方的回应中表示,AMDKrackanPoint处理器隶属RyzenAI300产品线,将于明年推出。AMD在2024台北国际电脑展上发布了RyzenAI300处理器,目前推出的两款产品均基于StrixPoint系列,核心规格如下:AMDRyzenAI9HX370:12核(4×Zen5+8×Zen5c)CPU,16CU规模RDNA3.5架构Radeon890M核显;AMDRyzenAI9365:10核(4×Zen5+6×Zen5c)CPU,12CU规模

See all articles