sql >> データベース >  >> RDS >> Mysql

最高のMySQLパフォーマンスチューニングツール?

    悪いニュース:これを支援するGUIツールがありますが、それは熟練した幅広い仕事です。したがって、すべてを網羅しているわけではありません。コマンドラインのstuff/sqlステートメントなどを使用する必要がある可能性があります。私は実際にコマンドラインツールを使用しただけです。私が知っている/使用したことの概要を少し説明します:

    まず、優れたデータベース設計が必要です。デザインが悪いと、ここまでしか手に入れることができません。これには、正規化と、フィールドに適切なタイプを使用することが含まれます。この点は、あなたが求めているものではなく、少し脇に置いておくと思うので、ここに残しておきます。

    MySQLクエリキャッシュが設定され、機能していることを確認し、可能であればRAMをもう少し増やし、重要なクエリがmysqlによるキャッシュを妨げるようなことをしていないことを確認します。たとえば、クエリでNOW()関数を使用すると、明らかな理由でこれが実行されます。NOWは毎秒変更されます。代わりに、タイムスタンプをSQLに入れ、最も近い分/時間/日(逃げることができる最大の期間)までの時間を使用して、mysqlがキャッシュのメリットを享受できるようにすることができます。

    最適化を開始するには:selectの前に「EXPLAIN」を付けると、クエリがどのように実行されているかを確認し、それを改善する方法を特定できます。出力の解釈を学ぶ: http://dev.mysql .com / doc / refman / 5.0 / en / using-explain.html 多くの場合、新しいインデックスを追加したり、既存のインデックスに列を追加したりして、状況を改善することができます。ただし、クエリを再構築する必要がある場合もあります。

    MySQLでパフォーマンスを改善することから始めるのは(問題のクエリが何であるかをまだ知らないと仮定して)、遅いクエリログをチェックすることです-それはx秒より長くかかるすべてのクエリをファイルに記録します。

    これをまだログに記録していない場合の構成を含む概要は、次のとおりです。 http://dev.mysql.com/doc/refman/5.0/en/slow-query-log.html --long_query_timeを1日程度0に設定すると、すべてのクエリが時間とともにここに記録されるため、パフォーマンスがどこに向かっているのかを正確に把握するのに便利な方法であることがわかりました。しかし、私はすぐには行きません!また、そのままにしないでください。ログが大量になる可能性があります。

    数日間のログ記録を取得したら、ここからmysqlsla(mysql slow log analyser)を見つけました: http: //hackmysql.com/mysqlsla 良いツールです。

    クエリログの分析を遅くするだけではありません。マニュアルを読んでください。ただし、低速ログの場合の説明:低速クエリログには大量のデータが含まれている可能性があるため、全体として最もコストがかかるクエリを特定するのは難しい場合があります。たとえば、実行回数と2つのクエリのタイミングを考慮してください。 where句のIDが異なるだけで、実際には同じです。

    MySQLslaはこれをすべて行います。ログを介して実行され、where句で同じ/異なる値を持つクエリをグループ化できます。次に、(デフォルトで)合計実行時間の観点から上位10個のクエリを表示します。これには多くの場合驚きがありますが、通常は最も生産的な開始点です。最も高価なクエリを使用してEXPLAINを使用し、改善できるかどうかを確認します。

    一部のクエリは時間がかかり、簡単に改善することはできません。この場合、別の方法でデータを取得するか、少なくとも代わりにキャッシュすることができますか? DBスキーマの変更が必要な場合もあります。同様に、一部のクエリは、実行速度が非常に速い場合でも、頻繁に実行するため(特に、long_query_timeが0に設定されている場合はtrue)、mysqlsla出力の先頭に表示される場合があります。たぶん、アプリにキャッシュを追加する時間ですか?

    http://www.maatkit.org/ また、有望に見えます-使用したことはありませんが、クエリが遅くなる理由をさらに調べるには、mk-query-profilerツールが役立つはずです。

    PHPMYADMINの「ステータス」ページ(またはすべてのクエリを実行してこの情報を生成することもできます...)-これは、悪いと思われるものを赤で強調表示し、あなたを助けることができます。システムリソースを割り当てることでメリットが得られる場所を確認してください。私はこれについてあまり知りません-私のアプローチは常に、何かが赤くて見栄えが悪い場合は、それについて読んで、それが重要かどうか、そして何かをすべきかどうかを判断することです(通常、MySQLにより多くのリソースを割り当てることを意味します構成を変更することにより)

    最近、SHOW PROCESSLISTを実行すると、問題が発生しているサーバーでも役立つことがわかりました。ライブ(ライブスナップショット)情報のみを提供しますが、特に数回更新して変更を観察する場合は、特定の時間に何が起こっているかを把握するのに役立ちます。最近、利用可能なすべてのmysql接続を使用してサーバーを見つけ、このメソッドを使用して同一のクエリを実行しました。確かに、それは遅いクエリログにありましたが、これは何が起きているかを確認するための非常に迅速で明白な方法です。



    1. mysqlデータベースのサイズを取得する方法は?

    2. Mysql2 ::Error:データベース'depot_test'へのユーザー'test'@'localhost'のアクセスが拒否されました

    3. MySQLで複合主キーを作成する方法

    4. インストールせずにWindowsでpostgresqlとpgadminを起動する