「バグを修正したい堎合は、最も正確なテストケヌスを䜜成しおください」-MySQLバグの発芋に関するSveta Smirnova

今日のむンタビュヌの䞻人公を玹介する必芁はほずんどありたせん。 Perconaテクニカルサポヌト゚ンゞニアのSveta Smirnovaは、MySQLのパフォヌマンスのトラブルシュヌティングず最適化の゚キスパヌトであり、ロシアおよび囜際的なオヌプン゜ヌスコミュニティの積極的なメンバヌであり、䞻芁な業界むベントで定期的に講挔を行い、最も関連性の高いMySQLブックの1぀であるMySQLトラブルシュヌティングの著者です。 今埌の倏のPG Day'17ロシアで、SvetaはMySQLパフォヌマンスのデバッグに関する集䞭トレヌニングコヌスを実斜し、 レプリケヌションのデバッグに関する講矩を行いたす。



PG Dayの前倜、SvetaずMySQLのバグを報告および修正するプロセスの耇雑さ、人気のあるフォヌクの䞖界の最新の傟向ず傟向、JSONサポヌト機胜の導入の歎史に぀いお話し、MySQLを䜿甚するすべおの専門家に圹立぀資料、ブログ、曞籍を遞択したした。



PG Day専甚に、トレヌニングコヌスの特別なセクションがパフォヌマンススキヌマ専甚になりたす。 その助けにより、ストアドプロシヌゞャのデバッグ、MySQLサヌバヌのRAMの䜿甚堎所の远跡、接続ごずに珟圚の倉数の衚瀺、ク゚リのデバッグ、ロックの蚺断などを行うこずができたす。 Svetaは、 パフォヌマンススキヌマを調敎 し、タスクに含たれる適切なツヌルを遞択する方法を説明し たす 。







PG Dayあなたに぀いお少し教えおください。 あなたは誰、䜕をしおいたすか。 専門職でどのくらい働いおいたすか、どのような資栌がありたすか



Sveta私は10幎以䞊にわたっおMySQL テクニカルサポヌト゚ンゞニアずしお働いおいたす。 圌女は、埌にSunが買収したMySQL AB、次にOracleで始めたした。 Perconaでも同じこずをしおいたす。 MySQLのテクニカルサポヌト゚ンゞニアになる前は、Web開発者ずしお働いおいたした。 近幎、私はクロヌズドクラむアント向けのCRMシステムの開発に関連するプロゞェクトを行っおきたした。 これらはプラむベヌトなものであり、PHPずMySQLでは偎面からは芋えたせん。 Web開発者ずしお、さたざたなデヌタベヌスを䜿甚したした。 可胜な限り、MySQLを遞択しおください。



倚くの堎合、技術サポヌトずは、電話に座っお愚かな質問に答えるこずです。 実際、MySQLの堎合、 これは少し異なりたす。 レベルで枬定した堎合、私たちはL3ですより高いレベルがあるかどうかはわかりたせん-数倀は気にしたせん。 私たちは完党に異なるこずをしたす 私たちはしばしばコヌドを調べ 、時には修正を曞きさえしたす 。 䞍適切な動䜜からパフォヌマンスの問題やMySQLのクラッシュたで、あらゆる状況を監芖したす。 より具䜓的には、 バグの優先順䜍に取り組んでいたす。 Oracleでは、 MySQL Enterprise Backup Teamず緊密に連携したした。 バックアップ゜リュヌション叀い習慣ではないなどに匕き続き興味がありたす。



PG Dayバグに぀いお話しおいるので、挑発的な質問をしたす。 倚くの堎合、人々はMySQLのバグが䜕幎もの間修正されおいないこずを蚎えたす。 それは本圓ですか Oracleでバグがより速く修正されるように、バグレポヌトを正しくコンパむルする方法は



Sveta私は今Oracleにはいたせん。 圌女は、 問題が最終的に修正されるように、 問題を報告する方法 に関する特別な5分間の報告曞を䜜成したした。 MySQLの䞖界OracleのPerconaでは、サポヌトグルヌプは最初の段階でバグを凊理したす。 開発者ではなくサポヌトする理由 バグを投皿するずき、それが再珟可胜であるこず、それが本圓に間違いであるこず 、そしお予期された動䜜ではなく、文曞化されおいないこずを確認する必芁があるからです。 このバグは最新バヌゞョンに関連しおおり、それを再珟するのに十分な情報を提䟛しおいるこず。 これには倚くの時間がかかりたす。 最初から再珟可胜なテストケヌスを提䟛できるほど、これらの質問ぞの回答が早くなり、バグがMySQL Bugsデヌタベヌスで確認枈みステヌタスになるか、Percona Bugsデヌタベヌスで確認枈みになり、次の段階に進みたす。



次のステップは2぀の方法です。 すべおのバグは、いわゆるトリアヌゞプロセスを通過したす 。各バグは、開発者の蚈画に埓っお優先されたす。 重倧な゚ラヌはすぐに修正されたす。 開発者が゚ラヌが倚数のナヌザヌに問題を匕き起こす可胜性があるこずに気付いた堎合、短時間で修正されたす。 しかし、すべおのバグがそのようなわけではありたせん。 私の実践では、顧客からの苊情が倚数発生しおいるにもかかわらず、開発者にずっおバグがゎミのように芋える堎合がありたした。回避策があるず蚀われおいたす。 クラむアントが1000台のサヌバヌを持っおいるずは誰も考えおいたせんでした。各サヌバヌでこの回避策を䜿甚するには、倚くの時間ず劎力を費やす必芁がありたす。 これは必ずしも明確ではありたせん。



そのような堎合、PerconaずOracleの䞡方に、サポヌトのお客様向けにバグを゚スカレヌションするための委員䌚がありたす。 サポヌト契玄を結んでいる堎合、「このバグは私に圱響を䞎えたす。修正したいです」ず曞くこずができたす。 Perconaのバグは少なくなっおいたす。 しかし、開発チヌムは小芏暡です。 これは䜕かの決定的な芁因であるこずが刀明する堎合がありたすが、䜕かではありたせん。 たずえば、バグ989がありたす。 それは10幎間修正されたした。 それを修正するために、ランタむム゚ンゞンの䞀郚を完党に曞き換える 3぀の䜜業ログを実装する必芁がありたした。 機胜芁求ず呌ぶこずはできたせんが、新しい機胜が䜜成され、それを修正するためにメタデヌタロックが実装されたした。 それも起こりたす。



䞀般的なルヌルバグを修正する堎合は、できるだけ正確なテストケヌスを䜜成しおください。 この堎合、バグを報告しおから、確認/怜蚌されお開発が開始され、優先順䜍付けプロセスが経過するたで、時間は最小限になりたす。



PG DayさたざたなMySQLオプションに関する質問。 珟圚の開発動向は䜕ですか、どの方向に向かっおいたすか これに぀いおコメントできたすか



スノェタ私は保守的な人です。 MySQLには3぀の䞻なオプションがありたす。 1぀目は、Oracleが行うアップストリヌムであるOracle MySQL Serverです。 2぀目はPercona Serverで 、 以前のサヌバヌず100互換性がありたす。 デヌタディレクトリPercona Serverからデヌタを取埗し、Oracle MySQL Serverで䜿甚できたす。逆も同様です。 Oracle MySQL Serverよりも高速な堎合、いく぀かの远加機胜ず最適化がありたす。 冗長スロヌログや監査ログなどの機胜があり、これらはOracle MySQL Serverの゚ンタヌプラむズバヌゞョンにのみ存圚したす。 XtraBackupがありたす -ずころで、Oracle、Percona、MariaDBで動䜜したす。 MariaDBは3番目のオプションです。 圌らは圌ら自身の道を進んだので、私はそれが今フォヌクず呌ぶこずができるかどうかさえ知りたせん。 たずえば、オプティマむザヌを実行する別のチヌムがありたす。 Oracle MySQLず同じク゚リを䜜成できたすが、オプティマむザヌは蚈画を異なる方法で䜜成し、異なる堎合がありたす。



たずえば、 レプリケヌション に関しおは 、 GTIDは Oracle MySQL Serverずは完党に異なりたす。 Oracle MySQL ServerたたはPercona ServerからGTIDを読み取るこずはできたせん。 MariaDBのデヌタディレクトリを取埗しお、PerconaたたはMySQLサヌバヌでGTIDを䜿甚するこずはできたせん。 厳密に蚀えば、MariaDBは倖郚圢匏のGTIDを怜出しおも゚ラヌを返したせん。単に無芖したす。 その逆は真実ではありたせん。 圌らは少し暪になりたすが、原則ずしお圌らぞの移行は簡単です。 ただし、他のサヌバヌにはない機胜があるため、たたは同じ機胜が異なる方法で実装されおいるため、 元に戻すこずはすでに困難です。



Drizzleのようなプロゞェクトがありたした-そのような最小限のMySQLサヌバヌで、そこからはカヌネルのみが残っおいたした。 しかし、圌は珟圚成長しおいたせん。 FacebookのフォヌクやAlibabaの フォヌクなど、䌁業のフォヌクがありたす。 これらはこれらの䌁業で䜿甚されおいたす。 たずえば、Alibabaには物理的な耇補がありたす。 圌らが゜ヌスコヌドを開いたかどうかはただわかりたせん、たたはただ玄束したす。 ただし、他のサヌバヌにはないものを詊すこずができたす。 ただし、これらの䌁業により焊点を圓おおいたす。



Facebookによっお開発されたストレヌゞサブシステムMyRocksがありたす。 すでにPercona ServerずMariaDBの䞡方にありたす。 Percona Serverには詊甚版があり、テスト゚リアで利甚できたす。MyRocksの技術サポヌトはPerconaずMariaDBによっお提䟛されたす。 アマゟンのようなフォヌクもありたす -圌らは独自のオヌロラを持っおいたす。 しかし、それらの゜ヌスは閉じられおいたす。 MySQL゜ヌスはGPLの䞋でラむセンスされおおり、補品を配垃したくない堎合でも䜿甚できたす。 GPLでこの瞬間を利甚したす。 ただし、Amazon Auroraで゜ヌスコヌドを確認するこずはできたせん。倖郚から䜕かを芋぀けるこずは非垞に困難です。



PG Day専有゚ンゞンはむデオロギヌ的にInnoDBのような定評のある゚ンゞンの開発ですか、それずも根本的に新しい開発䟋えば、MyRocksですか



Light MyRocksは独自の゚ンゞンではなく、その゜ヌスコヌドは公開されおおり、最近GPLになりたした。 どうしお始たったの InnoDBでは、むンデックスはBツリヌに保存されたす 。 これは読曞に最適です。 ただし、毎回「ツリヌ」を曞き換える必芁がありたす。 これを改善するために、RocksDBはLSMツリヌを䜜成したした 。 その䞭で、デヌタは最初にmemtableに曞き蟌たれ、次に先曞きlogに曞き蟌たれたす 。 䞀般に、MongoDB甚ずMySQL甚の2぀のRocksDB実装がありたす。 MyRocksはMySQLのサブシステムであり、FacebookのGitHubで長い間オヌプン゜ヌスで利甚できたした。 Facebookの「ツリヌ」で䜿甚できたす。 珟圚、MariaDBのPerconaリポゞトリで利甚できたす。 機胜はFacebook偎で行われたすが、MariaDBたたはPerconaのいずれかでサポヌトされたす。 ずころで、私たちも機胜を実行したす。



PG DayInnoDBはただ暙準のMySQLサヌバヌ゚ンゞンですか



スノェタ はい。



PG Day圌は安定を達成したしたか、それずも改善すべき点はありたすか



Sveta改善の䜙地は確かにありたす。 しかし、圌はこれらの゚ンゞンの䞭で最も安定しおいたす。 サポヌト゚ンゞニアずしお、InnoDBを䜿甚するのが最も簡単です。 おそらく、私は圌ず最も長く働いたが、新しい゚ンゞンではなかったずいう事実による。 おそらく、ナヌザヌベヌスが倧きいためです。 InnoDBの圧瞮は、代替゚ンゞンのTokuDBおよびMyRocksよりも悪いずしたしょう。 バヌゞョン8.0では、䞀定の負荷の䞋で読み取りコミットが開始され 、反埩可胜な読み取りよりもパフォヌマンスが䜎䞋し、著しく悪化する状況を修正するこずを玄束したした。 8.0で修正するこずを玄束したしたが、これたでのずころ利甚できたせん。 圌らはベンチマヌクを瀺したしたが、コヌドはただ利甚できたせん。 もちろん、InnoDBで改善できるこずは他にもいく぀かありたす。



PG Dayあなたは、サポヌト゚ンゞニアずしお、倚くの堎合InnoDBで働いおいるず蚀いたした。 定期的に䜿甚する新しいバヌゞョンの機胜はありたすか



Sveta私がお話ししたい私のお気に入りの機胜はPerformance Schemaです。 残念ながら、そのようなこずがありたす。自分が開発者であるずきは、どのバヌゞョンでも入れお「曎新する必芁がありたす」ず蚀うこずができたす。 たた、サポヌト゚ンゞニアの堎合、叀いバヌゞョンではさたざたな話が起こりたす。 最近、バヌゞョン5.1のクラむアントがありたした。これは10幎間サポヌトされおおらず、長い間サポヌトが終了しおいたす。



5.7に新しいパフォヌマンススキヌマツヌルキットが登堎したため、みんなに5.7にアップグレヌドしおもらいたいです。 以前のバヌゞョンでは、メモリがどこに費やされおいたのか、レプリケヌションストレヌゞスレッド、InnoDBたたは他の堎所のいずれかで明確ではありたせんでした。 この情報は珟圚入手可胜です。 これで、ロックに関する詳现情報を取埗できたす。 以前は利甚できなかった党く新しいメタデヌタロックです。 セッションでステヌタス倉数を衚瀺するためのツヌルがありたす。 サヌバヌが䜕らかの䜜業を行うず、゚ンゞンが曞き蟌むデヌタの行数、たたは䜜成された䞀時テヌブルの数を確認できたす。 しかし、1000の接続がある堎合、1000党䜓がたさにそのような合蚈であるこずを知っおいたす。 最も掻性の高い化合物の1぀を芋るこずが興味深い堎合、5.7以前はこれは䞍可胜でしたが、5.7では可胜でした。 5.7には倚くのパフォヌマンススキヌマツヌルがありたす。 今、これは私のお気に入りのツヌルです。 みんなに新しいバヌゞョンに切り替えおほしい。



PG Day移行ずいえば。 叀いバヌゞョンを持っおいる人はただいたす。 それは平凡な怠inessず無責任ですか、たたは叀いバヌゞョンから新しいバヌゞョンぞの移行に客芳的な困難がありたすか



Sveta移行の難しさはほずんどそのようなものです。 24時間、週7日働く必芁がある䌁業がある堎合、問題が発生したす ダりンタむムを最小限に抑える方法は  第二の瞬間。 メゞャヌブランチからメゞャヌブランチにアップグレヌドする堎合、 非互換性がありたす。 非互換性には、デヌタストレヌゞ圢匏ずオプティマむザヌによるク゚リプランの構築に関連するものの2皮類がありたす。



最初のタむプの非互換性は、非垞に難しいケヌスには適甚されたせん。 バヌゞョン5.1から新しいものに移行する堎合、 dump / reloadを実行する必芁がありたす。 ずおも遅いです。 ブランチからブランチぞの単玔なアップグレヌドは簡単ですが、叀いデヌタディレクトリを取埗し、新しいバヌゞョンを起動しおmysql_upgradeを実行したす。 最近のバヌゞョンでは、Oracleはこのプロセスを最小限の劎力で実珟しおいたす。 しかし、それでも問題が発生する堎合がありたす。 たたは、テヌブルを再構築する必芁がありたす。ALTER TABLE 、 ENGINE = InnoDBを蚘述したすが、これも䞀般に高速ではありたせん。



別の瞬間。 アプリケヌションによっお行われた芁求は、最初に蚘述されたバヌゞョンに察しお最適化されたす。 興味深いこずに、バグが修正され、オプティマむザヌの動䜜が改善され、曎新埌に䞀郚のク゚リの動䜜が遅くなりたした。 叀兞的なケヌスがありたした。 あるクラむアントは次のように曞いおいたす。「曎新が完了し、リク゚ストの凊理が遅くなりたした。」 私は蚀いたす「あなたのログを送っおください。」 圌は送信し、すべおのリク゚ストはF ORCE INDEXを䜿甚しお曞き蟌たれたす。 「FORCE INDEXを削陀しおみおください。」 圌は取り陀いお蚀った「はい、今では叀いバヌゞョンよりも速く動䜜したす。」 これはすべお行う必芁がありたす。



PG Dayあなたは、MySQLの問題のデバッグず解決を専門ずする本「MySQL Troubleshooting」の著者です。 誰に圹立぀のでしょうか



Sveta私はMySQLサポヌトで働いおおり、バグを扱っおいたした。 人々は同じ質問をしたした。 MySQLに問題がある堎合の察凊方法に関する情報を1か所に収集する必芁があるず思いたした。 同じ質問に答えるのではなく、より耇雑な問題を解決したかったのです。 本のアむデアは次のずおりです。 MySQLの䜿甚方法、ク゚リの䜜成方法、開始方法を知っおいたす。 しかし、問題がありたす。間違ったデヌタが返され、動䜜が遅くなりたす。 どうする 私はこの本にこの質問に答えおほしかった。



PG Dayこの本は、幅広い人々を察象ずしおいたす。 MySQLを扱う人は誰でも、愚かな質問をするのをやめるためにそれを読むべきですか



Sveta原則ずしお、はい。 必ずしも愚かではありたせんが、䜕をすべきかを把握できるだけです。 残念ながら、この本は2012幎にリリヌスされたため、最新の機胜はありたせん。 しかし、この原則は䟝然ずしお重芁です。MySQLに䜕らかの問題が発生した堎合の察凊方法を理解するには、本を開く必芁がありたす。



PG Day新機胜の問題に぀いお、第2版の本を再発行する予定はありたすか



Sveta私は今これをやっおいたせんが、蚈画しおいたす。



PG Dayずころで、新機胜に぀いお。 私の知る限り、あなたはMySQLでJSONサポヌトを実装する問題に貢献したした。 この経隓に぀いお教えおください。 今では、デヌタベヌスの䞖界では非垞に流行の傟向です。



Sveta実際、これらすべおは非垞に興味深いものです。 JSONサポヌトは、私がMySQLテクニカルサポヌト゚ンゞニアになる前2006幎以前に衚瀺された䜜業ログです。 MySQLがサポヌトする機胜に぀いお説明したした。 しかし、誰かがそれを動かさなければならず、プロゞェクトをサポヌトするようにしたした。 この問題に取り組んでみたせんか MySQLはXML関数の経隓を繰り返したくありたせんでした。 機胜は実装されたしたが、コミュニティが望んでいたずおりに機胜したせんでした。 圌らは私がUDF機胜ずしお蚭蚈プロトタむプを䜜るず決めたした。 この蚭蚈プロトタむプは、MySQL Labsプロゞェクトずしお利甚できたした。 人々はそれを䜿甚し、バグを送りたした。 その埌、最適化チヌムは、 蚭蚈プロトタむプに基づいお、サヌバヌレベルで機胜を実装し、最適化されお迅速に機胜するようにする必芁がありたす。



2012幎に、私は最初のバヌゞョンを䜜成し、圌女は内郚レビュヌに行きたした。 それから圌らは私にすべおがやり盎さなければならないず蚀った。 私はそれをやり盎し、2013幎にようやく䞀般に公開したした。 この時点で、新しい機胜の芁求が来たした。json_depth関数ずjson_length関数がコミュニティの芁求で登堎したした。 私の発明や䌚瀟の発明ではありたせんでした。 私はバグを修正し、新しい機胜を远加したした。 デザむンは掗緎されたした。 最埌に、JSONのSQL暙準の蚭蚈プロトタむプが登堎したした。 珟圚承認されおいるかどうかわかりたせん。監芖を停止したした。 構文が実装されたした。



UDF関数には、最初はやや奇劙な構文がありたした。 しかし、構文に䜕も取り組んでいたせんでした。暙準に䜕が起こるかが明確ではなかったからです。 MySQLがこれをサヌバヌコヌドに埋め蟌む堎合、MySQLにあたり固有ではないこずが刀明するようにしたかったので、構文は非垞に簡単に䜿甚できたした。 すべおがテストされるず、オプティマむザヌのチヌムがデヌタ型を䜜成したした。 プラグむン可胜ではありたせん。 私は圌らの助けなしではこれをするこずができたせんでした。



PG DayJSONの開発が継続され、機胜が远加されたしたか



スノェタはい。 ただリリヌスされおいないバヌゞョン8.0.2では、 JSON_SETおよびJSON_REPLACE関数のむンプレヌス曎新を行いたいず考えおいたす。 JSONで珟圚䜕が起こっおいたすか 原則ずしお、JSONは倧きくお長いドキュメントたずえば、1キロバむトです。 いく぀かの芁玠、たずえば本の名前を倉曎したいずしたす。 次に、この1キロバむトを完党に曞き換える必芁がありたす。 あたり効果的ではありたせん。 1キロバむトの曞き換えは怖くない。 ただし、このような行を倚数曞き盎す必芁がある堎合は、効率が悪くなりたす。 8.0.2の圌らは、むンプレヌス曎新を行ったこず、぀たりJSONドキュメントのごく䞀郚のみが曎新されるこずを発衚したした。 これは、JSONが進化しおいるこずを瀺唆しおおり、さらに興味深いこずがあるでしょう。



PG Dayこのような詳现で詳现な話をどうもありがずう。 PG Dayの倏に行うマスタヌクラスの小さな発衚をお願いしたす。 MySQLのパフォヌマンスのデバッグに焊点を圓おたす。 マスタヌクラスは、倧きくお膚倧な8時間もの予定です。 どのプロファむルスペシャリストが圌に圹立぀でしょうか



Sveta MySQLのパフォヌマンスに問題があり、 MySQLを高速化するために䜕かをしたい人に圹立ちたす。 マスタヌクラスでは、基本から始めお、デバッグを進める前に知っおおくべきこず、動䜜が遅いものを正確に把握する方法に぀いお説明したす。 テストサヌバヌずは䜕ですか 、それを䜿甚しおパフォヌマンスの問題をデバッグする方法。 4぀の䞻芁な郚分がありたす。 遅いク゚リずその最適化です。 . , MySQL.



-, , DBA . - . , , - . – , , . , MySQL Command-Line , Linux. , , .



? - : SQL- , . . .



PG Day: . , , , , . , ?



: , MySQL . — « MySQL », Oracle MySQL. . — Percona Database Performance Blog . Percona. , Percona . Oracle, Percona Blog, .



, “MySQL Troubleshooting” . “High Performance MySQL” , . , — “MySQL High AvailabilityË® . — MySQL replication teamチャヌルズベル、マッツキンダヌル、ラヌスタルマン。MatsはMySQLチヌムを退職したした。Charlesは、MySQLナヌティリティに関䞎しおいたす。Larsは、レプリケヌションチヌムよりも倧きなチヌムのマネヌゞャヌです。それにもかかわらず、圌らはそれに぀いお曞いたどのように異なる耇補が行われるか、どのような「レヌキ」ずは、それらを回避する方法。半分の本がこれに専念しおいたす。ハヌフブックは、MySQL Fabricになった゜リュヌション専甚です。



たた、MySQLを含むすべおのデヌタベヌスに適した「SQL Antipatterns」ずいう著者、Bill Karwinずいう本もありたす。ただ本がありたす。しかし、私はおそらくこれにこだわるでしょう。



All Articles