ホームページ データベース 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 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

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にはvectorが搭載されています。

リークにより、Intel Arrow Lake-U、-H、-HX、-S の主要な仕様が明らかに リークにより、Intel Arrow Lake-U、-H、-HX、-S の主要な仕様が明らかに Jun 15, 2024 pm 09:49 PM

IntelArrowLake は、LunarLake と同じプロセッサ アーキテクチャに基づいていると予想されており、つまり、Intel の新しい Lion Cove パフォーマンス コアが経済的な Skymont 効率コアと組み合わされることになります。

AM4 は死ぬことを拒否、ニュースによると AMD は最大 4.8GHz のクロックで動作する Ryzen 9 5900XT/7 5800XT を発売するとのこと AM4 は死ぬことを拒否、ニュースによると AMD は最大 4.8GHz のクロックで動作する Ryzen 9 5900XT/7 5800XT を発売するとのこと Jun 05, 2024 pm 09:43 PM

6 月 1 日のこの Web サイトのニュースによると、ソースの @CodeCommando が本日ツイートし、Computex2024 イベントでの AMD の今後のプレゼンテーション資料のスクリーンショットを共有しました。ツイートの内容は「AM4 は決して死ぬことはない」であり、添付の写真には 2 つの新しいものが示されていました。 Ryzen5000XTシリーズプロセッサ。スクリーンショットによると、次の 2 つの製品が示されています。 Ryzen95900XTR Ryzen95900XT は、AMD の Ryzen95950X よりもわずかに遅いクロック速度を持つ、比較的ハイエンドに位置する新しい 16 コア AM4 プロセッサです。 Ryzen75800XT AMD の既存の Ryzen75800X プロセッサの高速バージョンです。両方のプロセッサのクロックは最大 4.8G です。

Intel Z890マザーボードにはThunderbolt 4が標準搭載される見込みで、Arrow Lake-Sプロセッサコアディスプレイにはさまざまなサイズが含まれると報じられています。 Intel Z890マザーボードにはThunderbolt 4が標準搭載される見込みで、Arrow Lake-Sプロセッサコアディスプレイにはさまざまなサイズが含まれると報じられています。 May 07, 2024 pm 05:10 PM

5 月 7 日のこのサイトのニュースによると、ブロガーの Jinzhu Upgrade Package は最近、Intel の次世代デスクトップ プロセッサ ArrowLake-S シリーズには複数のバージョンのコア グラフィックスが含まれ、サポートする Z890 マザーボードには Thunderbolt が搭載される予定であるというニュースを伝えました。 4インターフェースを標準装備。最新のニュースによると、ArrowLake-S シリーズ CPU は GT1 仕様コア ディスプレイを使用し、最大 4 つの Xe コア (つまり 64EU) を搭載します。しかし、インテルは依然として、ローエンド製品でその中核となるディスプレイ技術を「誇示し」、Xeコアを3つ、あるいは2つしか搭載していないモデルを排除するつもりだ。現在発売されている Core Ultra5125H プロセッサには、Meteor Lake-P シリーズ製品よりも少ない 7 つの Xe コアしか搭載されていません。

Intel CPU サイズとコアのスケジューリングの問題、12 世代を超える CPU サイズとコアの最適化設定 Intel CPU サイズとコアのスケジューリングの問題、12 世代を超える CPU サイズとコアの最適化設定 Jun 19, 2024 am 01:42 AM

Inteli5-12600 以降の CPU、i5-13400 以降の CPU には、「大きいコアと小さいコア」のスケジューリングの問題により、P コア パフォーマンス コア (大きいコア) と E コア エネルギー効率コア (小さいコア) が搭載されています。実際、システムは現在のシーンに対処するために、古い CPU をディスパッチする必要はないと考えています。古いコアが休んでいて動作していません。以下のエディターでは、この問題を解決する方法を説明します。デスクトップに新しいテキスト ドキュメントを作成し、次の内容をコピーして 1.reg として保存し、右クリックして結合します。 WindowsRegistryEditorVersion5.00[HKEY_LOCAL_MACHINE\SY]

Intel、LGA9324 Oak Stream-AP プラットフォームが Diamond Rapids Xeon プロセッサをサポートしていることを確認 Intel、LGA9324 Oak Stream-AP プラットフォームが Diamond Rapids Xeon プロセッサをサポートしていることを確認 Aug 22, 2024 am 11:16 AM

8月22日の当サイトのニュースによると、Xプラットフォームユーザーの포시포시さん(@harukz5719)は、Intelが公式WebサイトのDESIGN-iNTOOLSstoreにLGA9324-OKS-APプラットフォームの電源テストに適したアダプタボードを2枚掲載していることに気づいた。 ▲REDバージョンに加えてBLUバージョンのアダプターボードもインテルはこれら2製品の説明で、LGA9324-OKS-APOakStreamプラットフォームがDiamondRapidsをサポートしていると書いており、これはXeon 6以降の次世代Xeonパフォーマンスコア「GraniteRapids」の存在を明確に裏付けています。プロセッサと対応するプラットフォーム。 DiamondRapids プロセッサーと OakStream プラットフォームに関する最新情報

Intel 第 13 世代および第 14 世代プロセッサの安定性の問題の解決策 Intel 第 13 世代および第 14 世代プロセッサの安定性の問題の解決策 Jun 18, 2024 pm 06:01 PM

第 13 世代と第 14 世代のプロセッサでは、ゲームのクラッシュ、ブルー スクリーン、コンピューターの自動再起動などの障害が発生していましたが、以前は nvidia のグラフィック カードが原因であると考えられていましたが、最近ではインテルのプロセッサが原因であることが判明しました。マザーボードと BIOS システムのメーカーは、第 13/14 世代プロセッサの安定性の問題を非難しました。 Intel も解決策を提案しています。以下のエディターで見てみましょう。第13世代および第14世代Coreプロセッサーの電圧、周波数、消費電力、安定性に関する600および700シリーズのマザーボードのBIOSの設定オプションが誤って設定されているか、設定値が公式の範囲外である可能性があります。インテルによって許可されているため、プロセッサーの動作が不安定になるか、そのリスクが高まります (下図を参照)。

iOS 18では、紛失または破損した写真を復元するための新しい「復元」アルバム機能が追加されます iOS 18では、紛失または破損した写真を復元するための新しい「復元」アルバム機能が追加されます Jul 18, 2024 am 05:48 AM

Apple の最新リリースの iOS18、iPadOS18、および macOS Sequoia システムでは、さまざまな理由で紛失または破損した写真やビデオをユーザーが簡単に回復できるように設計された重要な機能が写真アプリケーションに追加されました。この新機能では、写真アプリのツール セクションに「Recovered」というアルバムが導入され、ユーザーがデバイス上に写真ライブラリに含まれていない写真やビデオがある場合に自動的に表示されます。 「Recovered」アルバムの登場により、データベースの破損、カメラ アプリケーションが写真ライブラリに正しく保存されない、または写真ライブラリを管理するサードパーティ アプリケーションによって失われた写真やビデオに対する解決策が提供されます。ユーザーはいくつかの簡単な手順を実行するだけで済みます

See all articles