プロアクティブなOracle Databaseパフォヌマンスの最適化

プロアクティブな最適化に぀いお最初に話すのは、䜕を最適化する必芁があるかわからないずいうこずです。 「それをしおください、私は䜕を知りたせん。」


プロアクティブな最適化の䞻な目暙


プロアクティブな最適化の䞻なタスクは、リアクティブな最適化のタスクずは異なり、次のずおりです。


最埌の瞬間が最も基本的です。 リアクティブ最適化の堎合、リ゜ヌス消費党䜓を削枛するタスクはありたせんが、機胜の応答時間を蚱容範囲内にするタスクのみがありたす。



バトルサヌバヌを䜿甚しおいる堎合、パフォヌマンスむンシデントの意味を理解できたす。 すべおを終了し、問題を迅速に解決する必芁がありたす。 RNKO Payment Center LLCは倚くの゚ヌゞェントず連携しおおり、できるだけ少ない問題を抱えるこずが非垞に重芁です。 HighLoad ++ SiberiaのAlexander Makarovは、パフォヌマンスむンシデントの数を倧幅に枛らすために䜕が行われたかを語りたした。 プロアクティブな最適化が助けになりたした。 そしお、戊闘サヌバヌで䜜成される理由ず方法に぀いおは、以䞋をお読みください。



講挔者に぀いおアレクサンダヌマカロフ AL_IG_Makarov 、Oracleデヌタベヌスの䞻任管理者、RNCO Payment Center LLC。 䜍眮にもかかわらず、そのような管理はほずんどありたせん。䞻なタスクは、特にパフォヌマンスの問題を解決するために、耇合䜓のメンテナンスずその開発に関連しおいたす。

戊闘デヌタベヌスの最適化はプロアクティブですか


たず、このレポヌトで「プロアクティブなパフォヌマンスの最適化」ず呌ばれる甚語を扱いたす。 プロアクティブな最適化ずは、アプリケヌションを起動する前であっおも問題領域の分析を実行するこずであるずいう芳点を満たせる堎合がありたす。 たずえば、十分なむンデックスがないか、ク゚リが非効率的なアルゎリズムを䜿甚しおおり、この䜜業はテストサヌバヌで実行されるため、䞀郚のク゚リは最適に機胜しないこずがわかりたす。

それにもかかわらず、RNCOの私たちは戊闘サヌバヌでこのプロゞェクトを行いたした。 私は䜕床も聞いた「どうしお 戊闘サヌバヌでそれを行いたす。぀たり、プロアクティブなパフォヌマンスの最適化ではありたせん」ここでは、ITILで培われたアプロヌチを思い出す必芁がありたす。 ITILの芳点から、次のものがありたす。


この意味で、私たちの行動は積極的です。 バトルサヌバヌで問題を解決しおいるずいう事実にもかかわらず、問題自䜓はただ発生しおいたせん。むンシデントは発生せず、実行せず、短時間でこの問題を解決しようずしたせんでした。

したがっお、このレポヌトでは、プロアクティブはITILの意味でのプロアクティブず理解されおおり 、パフォヌマンスむンシデントが発生する前に問題を解決したす。


基準点


RNKO「Payment Center」は、2぀の倧芏暡システムに察応しおいたす。


これらのシステムの負荷の性質は混圚しおいたすDSS + OLTP非垞に迅速に機胜するものがあり、レポヌトがあり、䞭皋床の負荷がありたす。

あたり頻繁ではなく、䞀定の頻床でパフォヌマンスの問題が発生するずいう事実に盎面したした。 バトルサヌバヌで䜜業する人は、それが䜕であるかを想像したす。 これは、この時点でクラむアントがサヌビスを受信できないか、䜕かがたったく機胜しないか、動䜜が非垞に遅いため、すべおを終了しお問題を迅速に解決する必芁があるこずを意味したす。

非垞に倚くの゚ヌゞェントずクラむアントが組織に結び぀いおいるため、これは私たちにずっお非垞に重芁です。 パフォヌマンスの問題を迅速に解決できない堎合、お客様は䜕らかの圢で苊しむこずになりたす。 たずえば、カヌドを補充したり、送金したりするこずはできたせん。 したがっお、これらのたれなパフォヌマンスむンシデントでさえ取り陀くために䜕ができるのか疑問に思いたした。 すべおをドロップしお問題を解決する必芁があるずきにモヌドで䜜業する-これは完党に正しいわけではありたせん。 スプリントを䜿甚しお、スプリント䜜業蚈画を䜜成したす。 パフォヌマンスむンシデントの存圚は、䜜業蚈画からの逞脱でもありたす。

あなたはそれに぀いお䜕かをしなければなりたせん

最適化アプロヌチ


プロアクティブな最適化のテクノロゞヌを考え、理解するようになりたした。 ただし、プロアクティブな最適化に぀いお説明する前に、叀兞的なリアクティブな最適化に぀いおいく぀か説明する必芁がありたす。

リアクティブ最適化


シナリオは単玔です。䜕かが起こったバトルサヌバヌがありたす。圌らはレポヌトを立ち䞊げ、クラむアントはステヌトメントを受け取り、この時点でデヌタベヌス䞊で進行䞭のアクティビティがあり、突然誰かが䜕らかの皮類のディレクトリを曎新するこずを決めたした。 システムの速床が䜎䞋し始めたす。 この時点で、クラむアントが来お、「私はこれたたはそれをするこずができたせん」ず蚀いたす-私たちは圌がこれをできない理由を芋぀ける必芁がありたす。

埓来のアクションアルゎリズム

  1. 問題を再珟したす。
  2. 問題箇所を芋぀けたす。
  3. 問題箇所を最適化したす。

リアクティブアプロヌチのフレヌムワヌク内での䞻なタスクは、根本原因自䜓を芋぀けおそれを排陀するこずではなく、システムを正垞に機胜させる方法です。 根本原因の陀去は埌で察凊できたす。 䞻なこずは、クラむアントがサヌビスを受信できるように、サヌバヌをすばやく埩元するこずです。

リアクティブ最適化の䞻な目暙


リアクティブ最適化では、2぀の䞻芁な目暙を区別できたす。

1. 応答時間を短瞮したす。

レポヌト、ステヌトメント、トランザクションの受信などのアクションは、スケゞュヌルされた時間に実行する必芁がありたす。 サヌビスの受信時間がクラむアントに受け入れられる境界に戻るこずを確認する必芁がありたす。 サヌビスは通垞より少し遅くなるかもしれたせんが、クラむアントにずっおはこれは蚱容範囲です。 その埌、パフォヌマンスむンシデントは解消されたず考え、根本原因の調査を開始したす。

2. バッチ凊理䞭の単䜍時間あたりの凊理枈みオブゞェクトの数の増加 。

トランザクションのバッチ凊理が進行䞭の堎合、パッケヌゞの1぀のオブゞェクトの凊理時間を短瞮する必芁がありたす。

リアクティブアプロヌチの長所

● さたざたなツヌルずテクニックが、リアクティブアプロヌチの䞻な利点です。

監芖ツヌルを䜿甚しお、問題が䜕であるかを盎接理解できたす。CPU、スレッド、メモリが䞍足しおいるか、ディスクシステムがスリップしおいるか、ログの凊理が遅いです。 Oracleデヌタベヌスの珟圚のパフォヌマンスの問題を調査するための倚くのツヌルずテクニックがありたす。

● 望たしい応答時間はもう1぀のプラスです。

そのような䜜業の過皋で、状況を蚱容可胜な応答時間にしたす。぀たり、状況を最小倀にたで䜎䞋させようずしたせんが、特定の倀に到達し、このアクションの埌、蚱容限床に到達したず考えられるため、終了したす。

リアクティブアプロヌチの短所


パフォヌマンスむンシデントがただ発生しおいない堎合の察凊方法は そのような状況を防ぐために、どのようにプロアクティブな最適化を実行できるかを定匏化しおみたしょう。

プロアクティブな最適化


最初に遭遇するこずは、䜕を最適化する必芁があるかがわからないずいうこずです。 「それをしおください、私は䜕を知りたせん。」


プロアクティブな最適化の䞻な目暙


プロアクティブな最適化の䞻なタスクは、リアクティブな最適化のタスクずは異なり、次のずおりです。


最埌の瞬間が最も基本的です。 リアクティブ最適化の堎合、リ゜ヌス消費党䜓を削枛するタスクはありたせんが、機胜の応答時間を蚱容範囲内にするタスクのみがありたす。

デヌタベヌスでボトルネックを芋぀ける方法


この問題に぀いお考え始めるず、すぐに倚くのサブタスクが発生したす。 以䞋を実行する必芁がありたす。


テスト耇合䜓でこれらの問題をシミュレヌトしようずするず、テストサヌバヌで発生した問題は戊闘のものずは関係がないずいう事実に遭遇する可胜性がありたす。 これには倚くの理由がありたす。テストサヌバヌは通垞匱いずいう事実から始たりたす。 テストサヌバヌを戊闘サヌバヌの正確なコピヌにするこずができれば良いのですが、ナヌザヌアクティビティや最終的な負荷に圱響するさたざたな芁玠を正確に再珟する必芁があるため、負荷が同じ方法で再珟されるこずは保蚌されたせん。 この状況をシミュレヌトしようずするず、抂しお、バトルサヌバヌでたったく同じこずが起こるこずを誰も保蚌したせん。

あるケヌスで新しいレゞストリが到着したために問題が発生した堎合、別のケヌスでは、ナヌザヌが倧芏暡な゜ヌトを行う巚倧なレポヌトを起動したために発生する可胜性がありたす。その結果、システムの速床が䜎䞋し始めたした。 ぀たり、理由は異なる可胜性があり、垞に予枬できるずは限りたせん。 したがっお、ほずんど最初からテストサヌバヌでボトルネックを怜玢する詊みを攟棄したした 。 私たちは戊闘サヌバヌずそれに䜕が起こっおいるかに䟝存しおいたした。

この堎合の察凊方法 そもそも䞍足しおいる可胜性が最も高いリ゜ヌスを理解しおみたしょう。

デヌタベヌスのリ゜ヌス消費の削枛


私たちが自由に䜿える工業団地に基づいお、 リ゜ヌスの最も頻繁な䞍足はディスク読み取りずCPUで芳察されたす 。 したがっお、そもそもこれらの領域の匱点を正確に探したす。

2番目の重芁な質問䜕かを探す方法は
質問は非垞に重芁です。 Oracle Enterprise EditionではDiagnostic Packオプションを䜿甚したすが、 AWRレポヌト Oracleの他の゚ディションではSTATSPACKレポヌトを䜿甚できたす ずいうツヌルが芋぀かりたした。 PostgreSQLにはアナログがありたす-pgstatspack、 Andrey Zubkovのpg_profileです 。 私が理解しおいるように、最埌の補品が登堎し、昚幎だけ開発を開始したした。 MySQLの堎合、同様のツヌルは芋぀かりたせんでしたが、MySQLの専門家ではありたせん。

アプロヌチ自䜓は、特定の皮類のデヌタベヌスに関連付けられおいたせん。 レポヌトからシステム負荷に関する情報を取埗できる堎合は、これから説明する手法を䜿甚しお、 任意のベヌスでプロアクティブな最適化の䜜業を実行できたす 。

䞊䜍5぀の操䜜の最適化


ペむメントセンタヌRSCOで開発および䜿甚しおいるプロアクティブな最適化テクノロゞヌは、4぀の段階で構成されおいたす。

ステヌゞ1。AWRレポヌトを可胜な限り最倧期間受け取りたす。

週のさたざたな曜日の負荷を平均化するには、可胜な限り最倧の時間が必芁です。 たずえば、先週のレゞストリは火曜日にRBS-Retail Bankに到着し、凊理が開始され、終日平均玄2〜3回の負荷がかかりたす。 他の日には、負荷はより少なくなりたす。

システムにいく぀かの仕様があるこずがわかっおいる堎合-ある日には負荷が倧きく、ある日には-少ない堎合、これらの期間のレポヌトを個別に受信し、特定の時間間隔を最適化する堎合は個別に䜜業する必芁がありたす。 サヌバヌの党䜓的な状況を最適化する必芁がある堎合は、その月の倧きなレポヌトを取埗しお、サヌバヌのリ゜ヌスが実際に消費しおいるものを確認できたす。

時には非垞に予期しない状況が発生したす。 たずえば、CFT Bankの堎合、レポヌトサヌバヌキュヌをチェックする芁求は䞊䜍10にある可胜性がありたす。 さらに、このリク゚ストは公匏であり、ビゞネスロゞックを実行したせんが、実行に関するレポヌトがあるかどうかのみをチェックしたす。

ステヌゞ2.セクションを芋たす


SQLの残りのセクションは、必芁に応じお調査されたす。

ステヌゞ3.芪操䜜ずそれに䟝存する芁求を決定したす。

AWRレポヌトには個別のセクションがあり、Oracleのバヌゞョンに応じお、これらの各セクションに15以䞊の䞊䜍ク゚リが衚瀺されたす。 しかし、AWRレポヌトのこれらのク゚リOracleは混乱を瀺しおいたす。
たずえば、芪操䜜があり、その䞭に3぀の䞊䜍ク゚リがある堎合がありたす。 AWRレポヌトのOracleは、芪操䜜ずこれら3぀のク゚リの䞡方を衚瀺したす。 したがっお、このリストを分析し、特定の芁求が参照する操䜜を確認しお、グルヌプ化する必芁がありたす。

ステヌゞ4。䞊䜍5぀のオペレヌションを最適化したす。

このようなグルヌプ化の埌、出力は最も難しい操䜜を遞択できる操䜜のリストになりたす。 5぀の操䜜に制限されおいたす芁求、぀たり操䜜ではありたせん。 システムがより耇雑な堎合は、さらに倚くを取るこずができたす。

䞀般的なク゚リ蚭蚈゚ラヌ


この手法の適甚䞭に、兞型的な蚭蚈゚ラヌの小さなリストをたずめたした。 いく぀かの゚ラヌは非垞に単玔であるため、そうではないようです。

● むンデックスの欠劂→フルスキャン
たずえば、戊闘スキヌムに関するむンデックスがないなど、非垞に偶発的なケヌスがありたす。 むンデックスなしで長時間のク゚リが迅速に機胜する特定の䟋がありたした。 しかし、フルスキャンが行われ、テヌブルサむズが埐々に倧きくなるに぀れお、ク゚リの動䜜が遅くなり、四半期ごずに少し時間がかかりたした。 結局、私たちは圌に泚意を払いたしたが、むンデックスがそこにないこずがわかりたした。

● 倧芏暡な遞択→フルスキャン
2番目のよくある間違いは、倧量のデヌタサンプル-フルスキャンの兞型的なケヌスです。 フルスキャンは、正圓な理由がある堎合にのみ䜿甚する必芁があるこずを誰もが知っおいたす。 たずえば、フィルタリング条件をpl / sqlコヌドからク゚リに転送する堎合など、フルスキャンが実行できない堎合がありたす。

● 無効なむンデックス→ロングむンデックスレンゞスキャン
たぶんこれは最も䞀般的な間違いです。䜕らかの理由で、圌らは非垞に少ないず蚀っおいたす-いわゆる非効率的なむンデックス長いむンデックススキャン、長いむンデックス範囲スキャン。 たずえば、レゞ​​ストリ甚のテヌブルがありたす。 芁求では、この゚ヌゞェントのすべおのレゞストリを怜玢し、最終的に、たずえば特定の期間、特定の番号、特定のクラむアントなどのフィルタヌ条件を远加しようずしたす。 このような状況では、むンデックスは通垞、䜿甚の普遍性の理由から「゚ヌゞェント」フィヌルドにのみ構築されたす。 結果は次の図になりたす。たずえば、䜜業の最初の幎には、゚ヌゞェントはこのテヌブルに100個の゚ントリを持ち、来幎はすでに1,000個、別の幎には10,000個の゚ントリがありたす。 時間が経぀ず、これらのレコヌドは100,000になりたす。リク゚ストでは、゚ヌゞェント識別子だけでなく、この堎合は日付による远加のフィルタヌも远加する必芁があるため、リク゚ストの動䜜が遅くなるこずは明らかです。 そうしないず、この゚ヌゞェントのレゞストリの数が増えおいるため、サンプルサむズが幎々増加するこずがわかりたす。 この問題はむンデックスレベルで察凊する必芁がありたす。 デヌタが倚すぎる堎合は、パヌティション分割の方向をすでに考えおおく必芁がありたす。

● 䞍芁な配垃コヌドブランチ
これも奜奇心is盛なケヌスですが、それにもかかわらず、起こりたす。 䞊䜍のク゚リを芋るず、奇劙なク゚リがいく぀かありたす。 私たちは開発者のずころに来お、「私たちはいく぀かのリク゚ストを芋぀けたした。それを理解し、それに぀いお䜕ができるか芋おみたしょう。」 開発者は考え、しばらくしおから次のように蚀いたす。「このコヌドのブランチはシステム䞊にあるべきではありたせん。 この機胜は䜿甚したせん。」 次に、開発者は、コヌドのこのセクションを回避するために、特別な蚭定をオンにするこずをお勧めしたす。

ケヌススタディ


ここで、実際の実践から2぀の䟋を怜蚎したす。 䞊䜍のク゚リを凊理する堎合、もちろん、たず最初に、耇雑で操䜜が非垞に倧きく、自明ではない䜕かがあるはずであるずいう事実に぀いお考えたす。 実際、これは垞にそうではありたせん。 非垞に単玔なク゚リが䞊䜍の操䜜に該圓する堎合がありたす。

䟋1


select * from (select o.* from rnko_dep_reestr_in_oper o where o.type_oper = 'proc' and o.ean_rnko in (select l.ean_rnko from rnko_dep_link l where l.s_rnko = :1) order by o.date_oper_bnk desc, o.date_reg desc) where ROWNUM = 1 

この䟋では、ク゚リは2぀のテヌブルのみで構成されおおり、これらは重いテヌブルではなく、わずか数癟䞇のレコヌドです。 それは簡単に思えたすか ただし、リク゚ストはトップにヒットしたす。

圌の䜕が悪いのかを考えおみたしょう。

以䞋は、Enterprise Manager Cloud Controlの写真です。このリク゚ストの統蚈に関するデヌタですOracleにはそのようなツヌルがありたす。 このリク゚ストには通垞の負荷があるこずがわかりたす䞊のグラフ。 暪の数字1は、平均しお1぀のセッションのみが実行されおいるこずを瀺したす。 緑の図は、 リク゚ストがCPUのみを䜿甚しおいるこずを瀺しおいたす。



ここで䜕が起こっおいるのかを理解しおみたしょうか



䞊の衚は、リク゚ストに関する統蚈を含む衚です。 ほが70䞇回の打ち䞊げ-これは誰も驚かないでしょう。 ただし、12月15日の最初の読み蟌み時間から12月22日の最埌の読み蟌み時間たでの時間間隔前の図を参照は1週間です。 1秒あたりの開始回数を数えるず、 ク゚リは1秒ごずに平均しお実行されるこずがわかりたす 。

さらに調べたす。 ク゚リの実行時間は0.93秒です。 1秒未満、それは玠晎らしいこずです。 私たちは喜ぶこずができたす-芁求は重いものではありたせん。 それにもかかわらず、圌はトップを叩きたした。぀たり、圌は倚くのリ゜ヌスを消費したす。 どこで倚くのリ゜ヌスを消費したすか

テヌブルには、論理読み取り甚の行がありたす。 1回の起動には玄8,000ブロックが必芁であるこずがわかりたす通垞、1ブロックは8 KBです。 1秒に1回動䜜するリク゚ストは、メモリから玄64 MBのデヌタをロヌドするこずがわかりたした。 ここで䜕かが間違っおいたす。理解する必芁がありたす。

蚈画を芋おみたしょうフルスキャンがありたす。 それでは先に進みたしょう。

  Plan hash value: 634977963 ------------------------------------------------------------------- | Id | Operation | Name | ------------------------------------------------------------------- | 0 | SELECT STATEMENT | | |* 1 | COUNT STOPKEY | | | 2 | VIEW | | |* 3 | SORT ORDER BY STOPKEY | | | 4 | NESTED LOOPS | | | 5 | TABLE ACCESS BY INDEX ROWID| RNKO_DEP_LINK | |* 6 | INDEX UNIQUE SCAN | UK_RNKODEPLINK$S_RNKO | |* 7 | TABLE ACCESS FULL | RNKO_DEP_REESTR_IN_OPER | ------------------------------------------------------------------- Predicate Information (identified by operation id): 1 - filter(ROWNUM=1) 3 - filter(ROWNUM=1) 6 - access("L"."S_RNKO"=:1) 7 - filter(("O"."TYPE_OPER"='proc' AND "O"."EAN_RNKO"="L"."EAN_RNKO")) 

rnko_dep_reestr_in_operテヌブルには500䞇行しかなく、行の平均の長さは150バむトです。 しかし、接続しおいるフィヌルドに十分なむンデックスがないこずが刀明したした。サブク゚リは、ean_rnkoフィヌルドを介しおリク゚ストに接続されおいたす。

さらに、たずえ圌が珟れおも、実際には状況はあたり良くありたせん。 その長いむンデックススキャン長いINDEX RANGE SCANが発生したす。 ean_rnkoは、゚ヌゞェントの内郚識別子です。 ゚ヌゞェントのレゞストリは蓄積され、このリク゚ストが遞択するデヌタの量は毎幎増加し、リク゚ストは遅くなりたす。

解決策 ean_rnkoおよびdate_regフィヌルドのむンデックスを䜜成し、このリク゚ストで日付ごずにスキャンの深さを制限するように開発者に䟝頌したす。 その埌、少なくずもある皋床、ク゚リのパフォヌマンスがほが同じ境界にずどたるこずを保蚌できたす。これは、サンプルサむズが䞀定の時間間隔に制限され、テヌブル党䜓を読み取る必芁がないためです。 これは非垞に重芁なポむントです、䜕が起こったのか芋おください。


最適化埌、動䜜時間は100分の1秒未満0.93でしたになり、ブロック数は平均で8.5になりたした-それは以前の1000分の1になりたした。

䟋2


 select count(1) from loy$barcodes t where t.id_processing = :b1 and t.id_rec_out is null and not t.barcode is null and t.status = 'u' and not t.id_card is null 

通垞、ク゚リトップには耇雑なものが予想されるずいう話から話を始めたした。 䞊蚘は、1぀のテヌブルに移動する「耇雑な」ク゚リの䟋です。たた、䞊䜍のク゚リにも入りたした:) ID_PROCESSINGフィヌルドにむンデックスがありたす。
このク゚リにはIS NULL条件が3぀あり、ご存じのずおり、このような条件にはむンデックスが付けられおいたせんこの堎合はむンデックスを䜿甚できたせん。 さらに、ID_PROCESSINGおよびSTATUSによる等䟡タむプの条件は2぀しかありたせん。

おそらく、このク゚リを芋る開発者は、たずID_PROCESSINGずSTATUSにむンデックスを䜜成するこずをお勧めしたす。 しかし、遞択されるデヌタの量倚くのデヌタがあるを考えるず、この゜リュヌションは機胜したせん。

ただし、リク゚ストは倚くのリ゜ヌスを消費したす。぀たり、動䜜を速くするには䜕かをする必芁がありたす。 理由を理解しおみたしょう。


䞊蚘の統蚈は1日間のものであり、5分ごずにリク゚ストが開始されるこずがわかりたす。 䞻なリ゜ヌス消費は、CPUずディスクの読み取りです。 ク゚リの開始数の統蚈を瀺すグラフの䞋では、すべおが順調であるこずがわかりたす-開始数は時間ずずもにほずんど倉化したせん-かなり安定した状況です。


さらに詳しく芋るず、ク゚リの実行時間が非垞に倧きく倉化するこずがありたす-数回、これはすでに重芁です。


次に考えおみたしょう。

Oracle Enterprise ManagerにはSQL監芖ナヌティリティがありたす。 このナヌティリティを䜿甚するず、リク゚ストによるリ゜ヌスの消費をリアルタむムで確認できたす。


䞊蚘は問題のあるリク゚ストのレポヌトです。 たず、[実際の行]列のINDEX RANGE SCAN䞋の行が1700䞇行を瀺しおいるこずに泚目しおください。 おそらく怜蚎する䟡倀がありたす。

実装蚈画をさらに芋るず、蚈画の次の項目の埌、これらの1700䞇行のうち、1705だけが残っおいるこずがわかりたす。 最終サンプルでは、​​玄0.01が残っおいたす。぀たり、明らかに非効率的で、䞍芁な䜜業が行われたした 。 さらに、この䜜業は5分ごずに行われたす。 ここに問題がありたす したがっお、このリク゚ストは䞊䜍ク゚リにヒットしたす。

この重芁な問題を解決しおみたしょう。 そもそもそれ自䜓を請うむンデックスは非効率的であるため、トリッキヌな䜕かを考え出し、IS NULLの条件を砎る必芁がありたす。

新しいむンデックス


開発者ず盞談し、考えお、この決定に至りたした。ID_PROCESSING列が含たれる機胜むンデックスを䜜成したした。これは、リク゚ストに同等の条件があり、他のすべおのフィヌルドをこの関数の匕数ずしお含めたした。

 create index gc.loy$barcod_unload_i on gc.loy$barcodes (gc.loy_barcodes_ic_unload(id_rec_out, barcode, id_card, status), id_processing);  function loy_barcodes_ic_unload( pIdRecOut in loy$barcodes.id_rec_out%type, pBarcode in loy$barcodes.barcode%type, pIdCard in loy$barcodes.id_card%type, pStatus in loy$barcodes.status%type) return varchar2 deterministic is vRes varchar2(1) := ''; begin if pIdRecOut is null and pBarcode is not null and pIdCard is not null and pStatus = 'U' then vRes := pStatus; end if; return vRes; end loy_barcodes_ic_unload; 

この関数のタむプは決定論的です。぀たり、同じパラメヌタヌセットに察しお垞に同じ答えを返したす。 この関数は垞に1぀の倀、この堎合は「U」を垞に返すようにしたした。 これらのすべおの条件が満たされるず、満たされない堎合は「U」が発行されたす-NULL。 このような機胜むンデックスにより、デヌタを効果的にフィルタリングできたす。

このむンデックスを適甚するず、次の結果が埗られたした。



ここでは、1぀の列が1぀のスナップショットであり、デヌタベヌスの30分ごずに行われたす。 私たちは目暙を達成し、この指暙は本圓に効果的です。 定量的な特性を芋おみたしょう。

平均リク゚スト統蚈

前に

埌

経過時間、秒

143.21

60.7

CPU時間、秒

33.23

45.38

バッファ取埗ブロック

6`288`237.67

1`589`836

ディスク読み取りブロック

266`600.33

2`680


動䜜時間は2.5倍枛少し、リ゜ヌスの消費バッファ取埗-箄4枛少したした。ディスクから読み取られたデヌタブロックの数は非垞に倧幅に枛少したした。

積極的な最適化の結果


私達は受け取った


パフォヌマンスむンシデントは10倍枛少したした 。 これは䞻芳的な量であり、以前は、RBS-Retail Bankの耇合斜蚭で月に1〜2回発生しおいたしたが、今では事実䞊忘れおいたした。

これにより問題が発生したす。゜フトりェアパフォヌマンスの問題はどうでしょうか。 私たちはそれらに盎接察凊したせんでしたか

最埌のスケゞュヌルに戻りたす。 芚えおいれば、フルスキャンが行われ、メモリに倚数のブロックを保存する必芁がありたした。 芁求は定期的に実行されたため、これらのブロックはすべおOracleキャッシュに栌玍されおいたした。 珟時点でデヌタベヌスで高負荷が発生した堎合、たずえば誰かが積極的にメモリを䜿甚し始めた堎合、デヌタブロックを保存するためにキャッシュが必芁になるこずがわかりたす。 したがっお、リク゚ストのデヌタの䞀郚は混み合っおしたいたす。぀たり、物理的な読み取りを行う必芁がありたす。 物理的な読み取りを行うず、ク゚リの実行時間はすぐに倧幅に増加したす。

論理読み取りはメモリを䜿甚しお動䜜しおいるため、高速で発生し、ディスクぞのアクセスは遅くなりたす時間、ミリ秒を芋るず。 運がよく、オペレヌティングシステムのキャッシュたたはアレむキャッシュにこのデヌタがある堎合、それはただ数十マむクロ秒になりたす。 Oracleのキャッシュからの読み取りははるかに高速です。

フルスキャンを削陀するず、このような倚数のブロックをキャッシュバッファヌキャッシュに保存する必芁がなくなりたした。 これらのリ゜ヌスが䞍足しおいる堎合、リク゚ストは倚少安定しおいたす。 叀いむンデックスのような倧きなサヌゞはもうありたせん。

プロアクティブな最適化の抂芁


Oracleデヌタベヌスで統蚈を取埗するための倚くのツヌルがありたす。


これらのツヌルの䞀郚はコン゜ヌルで機胜したす。぀たり、Enterprise Managerに関連付けられおいたせん。

統蚈を収集するためのOracleツヌルの䟋


  • 䞊のグラフは、このリク゚ストで動䜜するセッションの数を瀺しおいたす。
  • 巊のブロックは、このリク゚ストがどこから起動され、どのモゞュヌルにあるかを瀺しおいたす。
  • å·Šäž‹-共有プヌルの䜿甚に関する情報。
  • 右偎の図は、システム内の埅機むベントを瀺しおいたす。 この堎合、CPUのみです。
  • 右䞋-最も興味深い-パフォヌマンスの問題を分析するずきに最も重芁な品質特性を備えたプレヌト。



SQL-Monitoringは、すべおがリアルタむムでどのように芋えるかを瀺したす緑色の歯車が回転しおいる堎合、ク゚リは珟圚動䜜しおいたす。


䞊蚘は、SQL監芖レポヌトの内郚コンテンツです。 リアルタむムで、実行するク゚リ行ず読み取る行数が衚瀺されたす[実際の行]列。 この堎合、INDEX RANGE SCANはすでに500䞇をカりントしおいたす。



テキスト監芖ツヌルSQL監芖レポヌト。䞀郚の情報すべおではないがありたす。


ボヌナス RNCO「ペむメントセンタヌ」およびCFT の専門家は、ノボシビルスクでの䌚議の準備が敎っおおり、いく぀かの有甚なレポヌトを䜜成し、実際の出口ラゞオを線成したした。 2日間、専門家、講挔者、䞻催者がCFTラゞオを蚪れたした。 ゚ントリを含めるこずで、シベリアの倏に戻るこずができたす。ブロックぞのリンクは次のずおりです。Kubernetes長所ず短所 。 デヌタサむ゚ンスず機械孊習 DevOps

既に11月8日ず9日であるモスクワのHighLoad ++では、さらに興味深いこずがありたす。 このプログラムには、専門家のアドバむスを共有し、驚きの䜕かを芋぀けるパヌトナヌからの、負荷の高いプロゞェクト、マスタヌクラス、䌚議、むベントに関する䜜業のあらゆる偎面に関するレポヌトが含たれおいたす。 最も興味深いものに぀いお曞き、 ニュヌスレタヌであなたに通知したす、接続しおください

Source: https://habr.com/ru/post/J428491/


All Articles