MySQL をインストールした後に調整する必要がある 10 のパフォーマンス設定項目

MySQL をインストールした後に調整する必要がある 10 のパフォーマンス設定項目

このブログでは、MySQL データベースをインストールした後に調整することが推奨される 10 のパフォーマンス設定について説明します。

通常、MySQL パフォーマンス監査を実行する必要がある場合は、MySQL 構成を確認し、改善のための推奨事項を作成します。ほとんどの場合、何百ものオプションが利用可能であるにもかかわらず、インストール後にいくつかのコア MySQL パフォーマンス チューニング パラメータのみを変更することをお勧めします。この記事の目的は、最も重要なパラメータ設定のリストを示し、それらを調整する方法を説明することです。

調整を始める前に

経験豊富な人でも、大きな問題を引き起こすような間違いを犯す可能性があります。したがって、この記事で推奨されている構成項目を適用する前に、次の点に留意してください。

  • 一度に 1 つの設定を変更してください。これはセットアップが機能したことを確認する唯一の方法です。
  • ほとんどの構成項目は、SET GLOBAL コマンドを使用して実行時に変更できます。この方法は非常に便利で、変更後に問題が発生した場合でも、すぐに元の設定に戻すことができます。しかし、最終的には、この変更を永続的にするには、構成ファイルに書き込む必要があります。
  • MySQL を再起動した後でも、設定ファイル内のパラメータが有効にならない場合があります。この時点で、次の点を考慮する必要があります。正しい構成ファイルを使用していますか?このパラメータを正しい場所に置きましたか? (この記事のすべての設定は [mysqld] セクションに属します)
  • 構成を変更した後にデータベースが起動に失敗した場合、正しい単位が使用されているかどうかを確認する必要がありますか?たとえば、innodb_buffer_pool_size はバイト単位ですが、max_connection には単位がありません。
  • 設定ファイルでは重複した設定は許可されません。構成の変更を追跡する場合は、バージョン管理を使用します。
  • 「新しいサーバーには古いサーバーの 2 倍の RAM があるので、すべての構成オプションを元の値の 2 倍に設定できます」などの単純な計算は行わないでください。

基本設定

ここでは主に、頻繁に目にすることになる 3 つの非常に重要な MySQL パフォーマンス設定項目について説明します。調整しないと、問題が発生する可能性があります。

innodb_buffer_pool_size:

これは、InnoDB ストレージ エンジンを使用する MySQL インストールをインストールした後に最初に確認する必要がある構成です。バッファ プールは、データとインデックスをキャッシュするために使用されます。ほとんどの読み取り操作がディスクではなくメモリから実行されるように、できるだけ多くのメモリを割り当てる必要があります。通常の設定は、5〜6GB(8GB RAM)、20〜25GB(32GB RAM)、100〜120GB(128GB RAM)です。

innodb_log_file_size:

このオプションは、REDO ログのサイズを設定します。 REDO ログは、書き込まれたデータが迅速に書き込まれ、永続化されることを保証するために使用され、クラッシュ回復にも使用できます。 MySQL 5.1 より前では、パフォーマンスを向上させるために redo ログ サイズを増やす一方で、クラッシュからの高速リカバリのために redo ログ サイズを減らす必要があったため、このオプションを調整するのは困難でした。幸いなことに、MySQL 5.5 以降ではクラッシュリカバリのパフォーマンスが大幅に向上し、高速なクラッシュリカバリの要件を満たしながら高速な書き込みパフォーマンスを実現できるようになりました。 MySQL 5.5 までは、REDO ログの合計サイズは 4GB (デフォルトでは 2 つのログ ファイル) に制限されていました。これは MySQL 5.6 で追加されました。

十分な書き込みスペースを確保するために、起動時に innodb_log_file_size = 512M (つまり、1GB の REDO ログ) を設定します。アプリケーションで書き込みが頻繁に行われることが分かっている場合は、さらに増やすことができます。

最大接続数:

「接続数が多すぎます」というエラーが頻繁に発生する場合は、max_connections が小さすぎることが原因です。このエラーは、アプリケーションがデータベースへの接続を適切に閉じていないためによく発生します。接続数をデフォルトの 151 より大きい値に設定する必要があります。 max_connections を高く設定しすぎると (1000 以上など)、1000 以上のトランザクションを実行するときにサーバーが遅くなったり、応答しなくなったりする主な欠点があります。アプリケーション側で接続プールを使用するか、MySQL 側でスレッド プールを使用すると、この問題を解決できます。

InnoDB設定

MySQL 5.5 以降、InnoDB がデフォルトのストレージ エンジンとなり、他のストレージ エンジンよりもはるかに頻繁に使用されるようになりました。そのため、慎重に設定することが重要です。

innodb_file_per_table:

この構成項目は、InnoDB がデータとインデックスを格納するために共有テーブルスペースを使用するか (innodb_file_per_table = OFF)、テーブルごとに個別の ibd ファイルを使用するか (innodb_file_per_table = ON) を決定します。テーブルごとに 1 つのファイルを使用すると、テーブルを削除、切り捨て、または再構築するときにテーブル スペースが再利用されます。圧縮などの一部の高度な機能では、独立した表領域の使用も必要です。ただし、このオプションではパフォーマンスは向上しません。

MySQL 5.6 以降のバージョンでは、この構成項目はデフォルトで有効になっているため、ほとんどの場合、何もする必要はありません。以前のバージョンの MySQL では、新しく作成されたテーブルにのみ影響するため、起動する前にこれを ON に設定する必要があります。

innodb_flush_log_at_trx_commit:

デフォルト値は 1 で、InnoDB が ACID 機能を完全にサポートすることを意味します。たとえば、データのセキュリティを主に重視するマスターノードでは、これが最適な設定です。ただし、変更が REDO ログにフラッシュされるたびに追加の fsync 操作が必要になるため、低速ディスク システムでは大きなオーバーヘッドが発生する可能性があります。 2 に設定すると、コミットされたトランザクションは 1 秒に 1 回しか REDO ログにフラッシュされないため、信頼性は低くなりますが、マスターの場合はそれでも許容できる場合があり、レプリケーション関係のスレーブの場合は適切な値です。 0 に設定すると高速になりますが、クラッシュが発生した場合に一部のデータが失われる可能性があります。これはスレーブにのみ適した設定です。

innodb_flush_method:

この設定は、データとログをディスクにフラッシュする方法を決定します。サーバー ハードウェアに RAID コントローラー、電源オフ保護、およびライトバック キャッシュ メカニズムがある場合、最もよく使用される値は O_DIRECT です。その他のほとんどのシナリオでは、デフォルト値の fdatasync が使用されます。 Sysbench は、こ​​れら 2 つの値を選択するのに役立つ優れたツールです。

innodb_log_buffer_size:

この設定は、まだコミットされていないトランザクションをキャッシュするために使用されるバッファのサイズを設定するために使用されます。通常はデフォルト値 (1MB) で十分ですが、トランザクションに大きな BLOB/テキスト フィールドが含まれるようになると、このバッファーはすぐにいっぱいになり、追加の I/O 負荷が発生します。 innodb_log_waits ステータス変数の値を確認します。0 でない場合は、innodb_log_buffer_size を増やす必要があります。

その他の設定

クエリキャッシュサイズ:

同時実行性が高くない場合でも、クエリ キャッシュがボトルネックになることは誰もが知っています。最適な設定は、使用初日にクエリ キャッシュを無効にする (query_cache_size = 0) ことです。このオプションは、MySQL 5.6 以降ではデフォルトで無効になっています。クエリ速度は、適切なインデックスを設計したり、読み取りと書き込みの分離を増やしたり、追加のキャッシュ (たとえば、memcache や redis) を使用したりすることで改善できます。クエリ キャッシュを有効にした MySQL を使用していて、問題が発生したことがない場合は、クエリ キャッシュはおそらく有益であり、無効にする場合は慎重に進める必要があります。

ログビン:

レプリケーション関係においてノードをプライマリ ノードにする場合は、バイナリ ログを有効にする必要があります。同時に、グローバルに一意の server_id を設定する必要があります。単一インスタンス データベースの場合、データを以前の時点に復元する (最新のバックアップを使用して復元し、binlog を使用して回復する) には、バイナリ ログが必要です。バイナリ ログは作成されると永続的に保存されるため、ディスク領域を使いたくない場合は、PURGE BINARY LOGS を使用して古いバイナリ ログ ファイルをクリーンアップするか、expire_logs_days オプションを設定して、期限切れのバイナリ ログを自動的にクリーンアップするのにかかる日数を指定する必要があります。

バイナリ ファイルのログ記録はリソースを消費するため、マスター/スレーブ レプリケーション環境では、スタンバイ データベースに Binlog が必要ない場合は無効にすることができます。

スキップ名解決:

クライアントが接続すると、サーバーはホスト名の解決を実行しますが、DNS が遅いと接続の確立に時間がかかります。したがって、起動時に skip-name-resolve を設定して DNS ルックアップを無効にすることをお勧めします。唯一の制限は、GRANT ステートメントは IP アドレスでのみ使用できることです。そのため、このオプションを既存のシステムに追加する場合は細心の注意が必要です。

結論は

もちろん、負荷やハードウェアの状態に応じて、チューニングに使用できる他の設定もあります。たとえば、メモリが小さい、ディスクが高速、同時実行性が高い、書き込みが集中する負荷の場合は、特定のチューニングが必要です。ただし、この記事の目的は、MySQL パフォーマンス チューニング構成項目をいくつか提供し、公式ドキュメントを読むのに多くの時間を費やすことなく、適切な MySQL 構成ファイルをすばやく構成し、どのパラメータが重要であるかを理解できるようにすることです。

以上がMySQLをインストールした後に調整する必要がある10のパフォーマンス設定項目の詳細です。MySQLのパフォーマンス設定項目の詳細については、123WORDPRESS.COMの他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • MySQL 8.0.24 バージョンのインストールと設定方法のグラフィックチュートリアル
  • MySQL 8.0.24 のインストールと設定方法のグラフィックチュートリアル
  • MySQL 8.0.23 無料インストールバージョンの設定詳細チュートリアル
  • MySQL 8.0.23 のインストールと設定方法のグラフィックチュートリアル (Win10 の場合)
  • MySQL 8.0.22 圧縮パッケージの完全なインストールと構成のチュートリアル図 (テスト済みで効果的)
  • Ubuntu 20.04 に MySql5.7 をインストールして構成するための詳細なチュートリアル
  • MySQL 8.0.22 zip圧縮パッケージ版(無料インストール)のダウンロード、インストール、および構成手順の詳細
  • 非常に詳細な MySQL8.0.22 のインストールと設定のチュートリアル
  • MySQL 8.0.22 winx64 のインストールと設定のグラフィックチュートリアル
  • MySQL 8.0.22.0 のダウンロード、インストール、設定方法のグラフィックチュートリアル
  • CenOS6.7 mysql 8.0.22 のインストールと設定方法のグラフィックチュートリアル
  • Windows 10 での MySQL 8.0.22 のインストールと設定方法のグラフィック チュートリアル
  • MySQL 5.5.27 winx64 のインストールと設定方法のグラフィックチュートリアル
  • MySQL 8.0.22 winx64 のインストールと設定方法のグラフィックチュートリアル
  • MySQL 8.0.22 のダウンロード、インストール、設定方法のグラフィックチュートリアル
  • MySQL 8.0.22 のインストールと設定のグラフィックチュートリアル
  • MySQL 8.0.22 のインストールと設定方法のグラフィックチュートリアル
  • MySQLデータベースの圧縮バージョンのインストールと設定に関する詳細なチュートリアル

<<:  Vueのフィルターについて知っておくべきこと

>>:  イメージのアップロードとダウンロードに docker をプロキシするためのプライベート ライブラリとして nexus を使用する

推薦する

JavaScript の便利な配列トリック 12 選

目次アレイ重複排除1. from() を新しい Set() メソッドに重ねる2. スプレッド演算子 ...

WebデザイナーがRetinaディスプレイデバイス向けの画像を作成する方法

特記事項:この記事は、Chris Spooner の英語記事「Web デザイン用の Retina グ...

Vue の下部ナビゲーション バー TabBar を実装するための非常に詳細なチュートリアル

目次プロジェクト紹介:プロジェクトディレクトリ: TabBar 効果のプレビュー: TabBar 実...

mysql 起動時の ERROR 2003 (HY000) の問題を解決する方法

1. 問題の説明MYSQL を起動すると、図に示すように、「ERROR 2003 (HY000): ...

Vue+Openlayer をベースに geojson を動的に読み込む方法

1つ以上の機能をロードする <テンプレート> <div id="map&...

MySQLデータベース移行におけるデータ文字化けの問題を解決する

リーダーの指示のもと、Java プロジェクトを引き継ぎ、リファクタリングを行う必要がありました。同時...

LinuxデバッガGDBの基本的な使い方の詳細な説明

目次1. 概要2. gdbデバッグ2.1. ブレークポイントを設定する2.1.1. ブレークポイント...

CSSレイアウトにおけるフロート属性と位置属性の違い

CSS レイアウト - position プロパティposition 属性は、要素に適用する配置方法...

Linux (Centos7) での redis5 クラスターの構築と使用方法の詳細な説明

目次1. 簡単な説明2. クラスターを作成する手順2.1. ディレクトリを作成する2.2. ソースコ...

CentOS7 は Docker のバージョン 19 をデプロイします (簡単なので、従ってください)

1. 依存パッケージをインストールする [root@localhost ~]# yum insta...

MySQLの基本操作学習ノートテーブル

テーブルを作成テーブルテーブル名を作成create table if not exists 表名 m...

HTML でフォーム コントロールを無効にする 2 つの方法: readonly と disabled

Web ページを作成する過程では、フォームがよく使用されます。しかし、フォーム上のコントロールを変更...

Node.js パッケージ マネージャー npm の具体的な使用方法

目次目的npm init および package.json ファイルモジュールのインストールと管理モ...

リバースプロキシ設定を実装するためのユニバーサルnginxインターフェース

1. プロキシサーバーとは何ですか?プロキシ サーバーは、クライアントが要求を送信すると、それを直接...

UbuntuでMySQLデータベースファイルディレクトリを変更する方法

序文同社の Ubuntu サーバーは、さまざまなシステムのディレクトリを異なる論理パーティションに配...