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

MySQLデータベースのパフォーマンスを提供するためのヒント-パート1-

    データベースバックエンドはアプリケーションに影響を与え、それが組織のパフォーマンスに影響を与える可能性があります。これが発生した場合、担当者は迅速な修正を望む傾向があります。 MySQLのパフォーマンスを改善するためのさまざまな道があります。多くの組織で非常に人気のある選択肢として、デフォルト構成のMySQLインストールを見つけることはかなり一般的です。ただし、これはワークロードとセットアップのニーズには適さない場合があります。

    このブログでは、データベースのワークロードとデータベースに害を及ぼす可能性のあるものをよりよく理解するのに役立ちます。限られたリソースの使用方法に関する知識は、データベースを管理するすべての人にとって不可欠です。特に、MySQLDBで本番システムを実行している場合はそうです。

    データベースが期待どおりに機能することを確認するために、無料のMySQL監視ツールから始めます。次に、データベースインスタンスを改善するために微調整できる関連するMySQLパラメータを確認します。また、データベースのパフォーマンス管理の要素としてのインデックス作成についても見ていきます。

    ハードウェアリソースを最適に使用できるようにするために、カーネルの最適化やその他の重要なOS設定について見ていきます。最後に、MySQLレプリケーションに基づくトレンディなセットアップと、パフォーマンスラグの観点からどのように調査できるかを調べます。

    MySQLのパフォーマンスの問題の特定

    この分析は、データベースの状態とパフォーマンスをよりよく理解するのに役立ちます。以下にリストされているツールは、すべてのトランザクションをキャプチャして理解するのに役立ち、パフォーマンスとリソース消費を常に把握できます。

    PMM(Percona Monitoring and Management)

    Percona Monitoring and Managementツールは、MySQL、MongoDB、およびMariaDBデータベース(オンプレミスまたはクラウド)専用のツールのオープンソースコレクションです。 PPMは無料で使用でき、有名なGrafanaおよびPrometheus時系列DBに基づいています。 MySQLの徹底的な時間ベースの分析を提供します。データベースのワークロードを理解するのに役立つ事前構成されたダッシュボードを提供します。

    PMMはクライアント/サーバーモデルを使用します。クライアントとサーバーの両方をダウンロードしてインストールする必要があります。サーバーには、DockerContainerを使用できます。 PMMサーバーのDockerイメージをプルし、コンテナーを作成し、PMMを起動するのと同じくらい簡単です。

    プルPMMサーバーイメージ
    docker pull percona/pmm-server:2
    
    2: Pulling from percona/pmm-server
    
    ab5ef0e58194: Downloading  2.141MB/75.78MB
    
    cbbdeab9a179: Downloading  2.668MB/400.5MB

    PMMコンテナを作成

    docker create \
    
       -v /srv \
    
       --name pmm-data \
    
       percona/pmm-server:2 /bin/true
    コンテナの実行
    docker run -d \
    
       -p 80:80 \
    
       -p 443:443 \
    
       --volumes-from pmm-data \
    
       --name pmm-server \
    
       --restart always \
    
       percona/pmm-server:2

    インストールせずにどのように見えるかを確認することもできます。 PMMのデモはこちらから入手できます。

    PMMツールセットの一部であるもう1つのツールは、クエリ分析(QAN)です。 QANツールは、クエリの実行時間の最上位に留まります。 SQLクエリの詳細を取得することもできます。また、MySQLデータベースサーバーの最適なパフォーマンスに不可欠なさまざまなパラメータの履歴ビューも提供します。これは、コードの変更がパフォーマンスに悪影響を与える可能性があるかどうかを理解するのに役立つことがよくあります。たとえば、知らないうちに新しいコードが導入されました。簡単な使用法は、現在のSQLクエリを表示し、データベースのパフォーマンスを向上させるのに役立つ問題を強調することです。

    PMMは、MySQLデータベースのパフォーマンスの特定の時点と履歴の可視性を提供します。ダッシュボードは、特定の要件を満たすようにカスタマイズできます。特定のパネルを展開して、過去のイベントについて必要な情報を見つけることもできます。

    ClusterControlを使用した無料のデータベース監視

    ClusterControlは、データベースインフラストラクチャ全体のリアルタイム監視を提供します。 MySQL、MariaDB、PerconaDB、MySQL NDBクラスター、Galeraクラスター(PerconaとMariaDBの両方)、MongoDB、PostgreSQL、TimescaleDBで始まるさまざまなデータベースシステムをサポートします。監視モジュールと展開モジュールは無料で使用できます。

    ClusterControlはいくつかのモジュールで構成されています。無料のClusterControlCommunityEditionでは、次のものを使用できます。

    パフォーマンスアドバイザーは、データベースやサーバーの問題に対処する方法について具体的なアドバイスを提供します。パフォーマンス、セキュリティ、ログ管理、構成、および容量計画として。運用レポートを使用して、数百のインスタンスにわたるコンプライアンスを確保できます。ただし、監視は管理ではありません。 ClusterControlには、バックアップ管理、自動リカバリ/フェイルオーバー、展開/スケーリング、ローリングアップグレード、セキュリティ/暗号化、ロードバランサー管理などの機能があります。

    監視とアドバイザー

    ClusterControl Community Editionは、無料のデータベースモニタリングを提供します。これにより、データセンター全体のすべての展開の統合ビューが提供され、個々のノードにドリルダウンできます。 PMMと同様に、リアルタイムデータに基づいてダッシュボードを見つけることができます。精度を高めるための高解像度の指標、事前構成されたダッシュボード、アラート用のさまざまなサードパーティの通知サービスを使用して、現在何が起こっているかを知る必要があります。

    オンプレミスおよびクラウドシステムは、単一のポイントから監視および管理できます。インテリジェントなヘルスチェックは、分散トポロジに実装されます。たとえば、データベースノードのロードバランサーのビューを活用してネットワークパーティションを検出します。

    ClusterControlワークロード分析は監視コンポーネントの1つにあります。データベースアクティビティを追跡します。アプリケーションからのトランザクション/クエリを明確にします。パフォーマンスの例外は予期されていませんが、発生し、大量のデータで見逃されがちです。外れ値の検出では、通常よりもはるかに遅く実行が突然開始されるクエリが取得されます。クエリ実行時間の移動平均と標準偏差を追跡し、値の差が平均を2標準偏差超えたときに検出/アラートします。

    下の図からわかるように、1日の間に特定の時間に実行時間が変更される傾向がある、いくつかのクエリをキャッチすることができました。

    ClusterControlをインストールするには、ここをクリックしてインストールスクリプトをダウンロードしてください。インストールスクリプトは、必要なインストール手順を処理します。

    ClusterControlデモもチェックして、実際の動作を確認する必要があります。

    ClusterControlを使用してDockerイメージを取得することもできます。

    $ docker pull severalnines/clustercontrol

    これに関する詳細については、この記事に従ってください。

    MySQLデータベースのインデックス作成

    インデックスがない場合、同じクエリを実行すると、必要なデータのすべての行がスキャンされます。テーブル内のフィールドにインデックスを作成すると、フィールド値である追加のデータ構造と、それに関連するレコードへのポインターが作成されます。言い換えると、インデックス作成によりショートカットが生成され、拡張テーブルでのクエリ時間が大幅に短縮されます。インデックスがない場合、MySQLは最初の行から開始し、次にテーブル全体を読み取って関連する行を見つける必要があります。

    一般的に、インデックス作成は、一般的に実行されるクエリのWHERE句の対象となる列で最適に機能します。

    テーブルは複数のインデックスを持つことができます。インデックスを管理するには、必然的に既存のインデックスをテーブルに一覧表示できる必要があります。インデックスを表示するための構文は次のとおりです。

    MySQLテーブルのインデックスを確認するには:

    SHOW INDEX FROM table_name;

    インデックスはレコード内の一致するフィールドの検索を高速化するためにのみ使用されるため、出力にのみ使用されるインデックスフィールドは単にディスクスペースの浪費になるのは当然です。もう1つの副作用は、インデックスが挿入または削除操作を拡張する可能性があるため、不要な場合は回避する必要があることです。

    MySQLデータベースのスワップ性

    MySQLが実行されている唯一のサービスであるサーバーでは、vm.swapiness =1に設定することをお勧めします。デフォルト設定は60に設定されており、データベースシステムには適していません。

    vi /etc/sysctl.conf
    vm.swappiness = 1
    透明な巨大ページ

    MySQLをRedHatで実行している場合は、TransparentHugePagesが無効になっていることを確認してください。

    これはコマンドで確認できます:

    cat /proc/sys/vm/nr_hugepages
    0

    (0は、透明な巨大ページが無効になっていることを意味します。)

    MySQL I/Oスケジューラ

    ほとんどのディストリビューションでは、noopまたはdeadine I/Oスケジューラーをデフォルトで有効にする必要があります。実行することを確認するには

    cat /sys/block/sdb/queue/scheduler 

    MySQLファイルシステムオプション

    xfs、ext4、btrfsなどのジャーナルファイルシステムを使用することをお勧めします。 MySQLはそれらすべてで正常に動作し、サポートされている最大ファイルサイズによって違いが生じる可能性が高くなります。

    • XFS(最大ファイルシステムサイズ8EB、最大ファイルサイズ8EB)
    • XT4(最大ファイルシステムサイズ8EB、最大ファイルサイズ16TB)
    • BTRFS(最大ファイルシステムサイズ16EB、最大ファイルサイズ16EB)
    デフォルトのファイルシステム設定が適切に適用されます。

    NTPデーモン

    データベースサーバーにNTPタイムサーバーデーモンをインストールすることをお勧めします。次のシステムコマンドのいずれかを使用します。

    #Red Hat
    yum install ntp
    #Debian
    sudo apt-get install ntp
    結論

    これでパート1はすべてです。次の記事では、MySQL変数のオペレーティングシステム設定と、データベースのパフォーマンスステータスを収集するための便利なクエリについて説明します。


    1. SQLServer2017管理ツール

    2. テストのためにMySQLインスタンスを失敗またはクラッシュさせる方法

    3. SQL Serverの照合で、大文字と小文字を区別するものから大文字と小文字を区別しないものに変更しますか?

    4. Oracle SQL構文:引用符で囲まれた識別子