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

データベースを最適化するためのMySQLパフォーマンスチューニングのヒント

    構造化照会言語(SQL)は、データベースからデータを保管、操作、および取得するために使用される特殊用途のプログラミング言語です。 MySQL、Postgres、Oracle、SQLServerなどを含む多くのリレーショナルデータベースシステムでアプリケーションが見つかりました。

    開発者はSQLステートメントを使用することで、データの作成、更新、削除など、さまざまな機能データベース操作を簡単に実行できます。

    データ量が増加し、テクノロジーがますます複雑になるにつれて、MySQLデータベースを適切に最適化して、エンドユーザーエクスペリエンスを提供し、インフラストラクチャコストを削減することがますます重要になっています。 MySQLパフォーマンスチューニングツールは、データベースの専門家がボトルネックをすばやく特定し、クエリ実行計画のレビューを通じて不十分な操作をターゲットにし、推測ゲームを排除するのに役立ちます。

    増大するデータ量と絶えず変化するワークロードの複雑さが増す中、リソース使用率とシステムパフォーマンスを最大化するには、データベースパフォーマンスの調整とMySQLクエリの最適化が必要になります。

    開発者にとってSQLチューニングを少し複雑にする理由はいくつかあります。まず、さまざまな実行計画を作成して理解するには、広範な技術的専門知識が必要です。クリーンで完全なSQLステートメントを記述している間、それについての完全な知識を獲得する人の責任です。

    その複雑さに加えて、チューニングには非常に時間がかかります。ソートするSQLステートメントが多数ある場合、どのステートメントを調整する必要があり、どのステートメントを残す必要があるかを判断するのに少し不確実性が生じるためです。また、ステートメントはそれぞれ異なりますが、チューニングのアプローチもそれぞれの機能によって異なります。


    コアWebバイタルアップデートの準備をする

    トラフィックを失い始める前にウェブサイトをスピードアップするための電子ブック。

    ありがとうございます

    あなたのリストはあなたの受信箱への道にあります。


    このチュートリアルでは、いくつかの便利なパフォーマンス調整のヒントを使用して、MySQLのパフォーマンスを改善する方法について説明します。それでは、以下でそれらを詳しく見てみましょう:

    MySQLパフォーマンスチューニングの利点

    データベースのパフォーマンス推進要因を特定することの主な利点により、サーバーのサイズを適切に設定することで、過剰なプロビジョニングを回避し、コストを削減できます。また、データストレージの移動やサーバー容量の追加によってパフォーマンスが向上するかどうか、また向上する場合はどの程度になるかについての洞察も得られます。

    MySQLクエリのパフォーマンスを最適化するためのチューニングデータベースには、簡単な課題はありません。ただし、適切に調整されると、データベースは優れた機能を備えた価値のあるパフォーマンス結果を提供します。不要なタスクの負荷を軽減するだけでなく、MySQLデータベースを最適化してデータをより高速に取得します。

    あなたも好きかもしれません: Webサイトを最適化するためのPHPパフォーマンスのヒント

    MySQLクエリ最適化ガイドラインを使用してクエリを最適化する

    MySQLのパフォーマンスの調整とデータベース速度の最適化については、これらのベストプラクティスに従ってください。

    まず、WHERE、JOIN、ORDER BY、およびGROUPBY句のすべての述語のインデックス付けを確認します。 WebSphere Commerceは、SQLのパフォーマンスを向上させるために、述部の索引付けに重点を置いています。 SQLクエリの不適切なインデックス作成はテーブルスキャンを引き起こし、最終的にはロックの問題やその他の問題につながる可能性があるためです。

    したがって、データベースでMySQLクエリの最適化を体験できるように、すべての述語列にインデックスを付けることを強くお勧めします。

    あなたも好きかもしれません: Laravelパフォーマンス最適化ガイド

    述語での関数の使用は避けてください

    列に事前定義された関数がある場合、データベースはインデックスを使用しません。

    例:

    SELECT * FROM TABLE1 WHERE UPPER(COL1)='ABC'Copy

    UPPER()関数のため、データベースはCOL1のインデックスを利用しません。 SQLでその関数を回避する方法がない場合は、パフォーマンスを向上させるために、新しい関数ベースのインデックスを作成するか、データベースにカスタム列を生成する必要があります。

    述語の先頭にワイルドカード(%)を使用しないでください

    述語LIKE'%abc' 全表スキャンを引き起こします。例:

    SELECT * FROM TABLE1 WHERE COL1 LIKE '%ABC'Copy

    ほとんどの場合、このワイルドカードの使用により、パフォーマンスが大幅に制限されます。

    SELECT句で不要な列を避ける

    MySQLのパフォーマンスを向上させるために、「SELECT *」を使用する代わりに、常にSELECT句で列を指定してください。不要な列はデータベースに追加の負荷をかけるため、データベースのパフォーマンスと体系的なプロセス全体の速度が低下します。

    可能であれば外部結合の代わりに内部結合を使用します

    外部結合は、必要な場合にのみ使用してください。不必要に使用すると、データベースのパフォーマンスが制限されるだけでなく、MySQLクエリの最適化オプションも制限され、SQLステートメントの実行が遅くなります。

    必要な場合にのみDISTINCTとUNIONを使用してください

    UNIONおよびDISTINCT演算子を主な目的なしに使用すると、不要な並べ替えが発生し、SQLの実行速度が低下します。 UNIONの代わりにUNIONALLを使用すると、プロセスの効率が向上し、MySQLのパフォーマンスがより正確に向上します。

    並べ替えられた結果を期待する場合、SQLではORDERBY句が必須です

    ORDER BYキーワードは、結果セットを事前定義されたステートメント列にソートします。このステートメントは、ソートされたデータを取得するためにデータベース管理者に利点をもたらしますが、SQLの実行においてもパフォーマンスに少し影響を与えます。クエリは最初にデータを並べ替えて最終的な結果セットを生成する必要があるため、SQLの実行で少し複雑な操作が発生します。

    あなたも好きかもしれません: MySQLで2つのテーブルを結合する方法

    MySQLをキューとして使用しないでください

    キューは、コアからデータベースのパフォーマンスに影響を与える可能性があり、知らないうちにアプリデータベースに入る可能性があります。たとえば、「関連プロセス」がそのアイテムにアクセスできるように特定のアイテムのステータスを設定している場合、意図せずにキューを作成していることになります。それが行うことは、大きな理由なしにリソースにアクセスするための余分なロード時間を構築することです。

    キューは、2つの主な理由で問題を引き起こします。これらはワークロードをシリアル化し、タスクの並列完了を防ぎます。また、多くの場合、仕掛品と、すでに完了したジョブの履歴データを含むテーブルが作成されます。アプリケーションにレイテンシーを追加するだけでなく、MySQLのパフォーマンスチューニングに支障をきたします。

    あなたも好きかもしれません: キューイングにRedisを使用する方法

    4つの基本的なリソースを理解する

    データベース機能を作成するには、4つの基本的なリソースが必要です。 CPU、ディスク、メモリ、およびネットワーク。これらのいずれかが正しく機能しない場合、最終的にデータベースサーバーに影響を与え、パフォーマンスが低下します。

    基本的なリソースを正しく理解するには、2つの特定の領域、つまり適切なハードウェアの選択とその問題のトラブルシューティングに焦点を当てる必要があります。

    MySQLデータベースのハードウェアを選択するときは、常にオールラウンドなパフォーマンスコンポーネントを使用するようにしてください。スタックの中から最高のものを選ぶだけでなく、それらの間に適切なバランスがあることを確認してください。組織は高速のCPUと大容量のディスクを備えたサーバーを選択する傾向がありますが、メモリが不足していると誤解され、最終的にパフォーマンスが低下します。

    一部のシナリオでは、メモリの追加は、規模に関してはパフォーマンスを向上させるために非常に重要になります。少し直感に反しているように見えますが、ほとんどの場合、ディスクの過剰使用はデータベースのパフォーマンスに直接影響します。サーバーのデータを保持するのに十分なメモリが不足していると、データベースのパフォーマンスが低下するため、コストがかかることがわかります。

    トラブルシューティングに関しては、4つの基本的なリソースすべてのパフォーマンスを常にチェックしてください。規範のニーズの改善に従って、彼らが実行していることを定性的に検証します。この監査を定期的に考慮することで、発生する主要な問題を迅速に解決できます。

    ページネーションクエリ

    ページングするアプリケーションは、サーバーをダウンさせる傾向があります。次のページに移動するためのリンクを含む結果のページを表示する際、これらのアプリケーションは通常、インデックスを使用できない方法でグループ化および並べ替えを行い、サーバーに多くの処理を実行させるLIMITおよびオフセット機能を採用しています。行を生成してから破棄する作業。

    ユーザーインターフェイス自体に最適化を見つけることができます。結果に正確なページ数と個々のページへのリンクを表示する代わりに、次のページへのリンクを表示することができます。また、人々が無関係なページにアクセスするのを防ぐこともできます。

    クエリ側では、オフセットでLIMITを使用する代わりに、必要以上に1行を選択できます。ユーザーが[次のページ]リンクをクリックすると、その最後の行を次の結果セットの開始点として指定できます。 。たとえば、ユーザーが行101から120のページを表示した場合は、行121も選択する必要があります。次のページをレンダリングするには、121以上、制限21の行をサーバーに照会します。

    MySQLサブクエリの最適化

    サブクエリについて私があなたに与えることができる最も重要なアドバイスは、少なくとも現在のバージョンのMySQLでは、可能な限り結合を優先する必要があるということです。

    サブクエリはオプティマイザチームによる集中的な作業の対象であり、MySQLの今後のバージョンではさらにサブクエリが最適化される可能性があります。どの最適化がリリースされたコードに含まれるか、そしてそれらがどの程度の違いをもたらすかを確認してください。ここでの私のポイントは、「参加を希望する」は将来を見据えたアドバイスではないということです。サーバーは常にスマートになり、返される結果ではなく、何かを行う方法をサーバーに指示する必要がある場合が少なくなっています。

    Mysqlクエリキャッシュ

    パフォーマンス測定の最も重要な側面の1つは、コンテンツのキャッシュです。 MySQLは、SELECTステートメントのテキストと取得した結果をキャッシュするデータベースクエリキャッシュを提供します。したがって、データベースを複製するときはいつでも、MySQLクエリキャッシュを呼び出すと、それに応答してキャッシュからの結果が表示され、呼び出しが繰り返し解析されることはありません。このようにして、MySQLキャッシュ最適化プロセスを最大化できます。

    MySQLクエリキャッシュを設定するには、MySQLにいくつかの設定を追加する必要があります。まず、次のコマンドを使用して、クエリキャッシュが使用可能かどうかを確認する必要があります。

    mysql> SHOW VARIABLES LIKE 'have_query_cache';

    はい、結果が表示されます。これは、MySQLキャッシュが正常に機能していることを意味します。

    +------------------+-------+
    
    | Variable_name    | Value |
    
    +------------------+-------+
    
    | have_query_cache | YES   |
    
    +------------------+-------+

    これで、MySQLクエリのキャッシュサイズとタイプを設定できます。デフォルトの最小サイズは40KBであることを忘れないでください。最大サイズは32MBです。次のコマンドを使用して、MySQLquery_cache_sizeを設定できます。

    mysql> SET GLOBAL query_cache_size = 40000;

    クエリキャッシュタイプは、すべての接続の動作を決定できます。次のようなクエリのクエリキャッシュを無効にすることもできます:

    mysql> SET SESSION query_cache_type = OFF;

    接続ステータスを設定するために、0、1、2などの値を設定することもできます。

    MySQLキャッシングにMemcachedを使用する

    Memcachedは、分散メモリキャッシングシステムです。外部データソースが読み取りを要求するたびに、データベースオブジェクトを動的メモリに格納してサーバーへの負荷を軽減することにより、大規模な動的データベースを持つWebサイトを高速化します。 Memcachedレイヤーは、データベースがリクエストを行う回数を減らします。

    Memcachedは、値(v)をキー(k)で保存し、データベースクエリを解析することなく、値(v)をキー(k)で取得し、これらすべての煩わしさを回避します。

    Memcachedの詳細については、phpでMemcacheを設定する方法に関するガイドをご覧ください。

    まとめ!

    この記事では、データベース最適化のベストプラクティスと、すべての開発者が知っておく必要のある便利なMySQLパフォーマンスチューニングのヒントについて詳しく説明します。これは、データベースのパフォーマンスが低いことを確信しておらず、コアからMySQLデータベースを最適化するための便利なテクニックを必要とするバックエンド開発者向けの完全なガイドです。

    トピックについての考えを追加したい場合、またはトピックに関する質問をしたい場合は、コメントセクションにコメントを書き込んでください。


    1. MySQLで重複レコードを検索する

    2. MicrosoftAccessでレポートヘッダーにロゴを追加する方法

    3. あるSQLServerインスタンスから別のSQLServerインスタンスにSQLServerジョブを移行する方法

    4. PostgreSQLでの複数の配列の交差