MySQL
構成とチューニング
サーチ…
備考
設定は3つの方法のいずれかで行われます。
- コマンドラインオプション
-
my.cnf
設定ファイル - サーバー内から変数を設定する
コマンドラインオプションの形式は、 mysqld --long-parameter-name=value --another-parameter
です。同じパラメータをmy.conf
構成ファイルに入れることができます。 一部のパラメータは、MySQL内のシステム変数を使用して設定できます。パラメータの完全なリストについては、公式文書をチェックしてください。
変数は、ダッシュを持つことができます-
またはアンダースコア_
。 =
周りにスペースが存在する可能性があります。 K
、 M
、 G
、キロ、メガ、ギガの数字の大きい数字を付けることができます。 1行に1つの設定。
Flags:通常、 ON
と1
は同義語ですが、 OFF
と0
は同じです。いくつかのフラグは後に何もない。
my.cnf
に設定を置くとき、 サーバのすべての設定は[mysqld]
セクションになければならないので、設定を盲目的にファイルの最後に追加しないでください。 (注:複数のmysqlインスタンスが1つのmy.cnfを共有できるツールの場合、セクション名は異なる場合があります)。
InnoDBのパフォーマンス
my.cnfに配置できる設定は何百もあります。 MySQLの 'lite'ユーザにとって、それほど重要ではありません。
データベースが簡単になったら、次のパラメータを設定することをお勧めします。
innodb_buffer_pool_size
これは、 使用可能な RAMの約70%に設定する必要があります(RAMが4GB以上の場合、小さなVMまたはアンティークマシンを使用している場合は、より小さなパーセンテージ)。この設定は、InnoDB ENGINEで使用されるキャッシュの量を制御します。したがって、InnoDBのパフォーマンスにとっては非常に重要です。
膨大なデータを挿入できるパラメータ
列にイメージやビデオを保存する必要がある場合は、アプリケーションによって必要に応じて値を変更する必要があります
max_allowed_packet = 10M
MはMb、GはGb、KはKb
group_concatの文字列制限を増やす
group_concat
は、 group
内のnull以外の値を連結するために使用されます。結果の文字列の最大長は、 group_concat_max_len
オプションを使用して設定できます。
SET [GLOBAL | SESSION] group_concat_max_len = val;
GLOBAL
変数を設定すると永続的な変更が行われますが、 SESSION
変数を設定すると現在のセッションの値が設定されます。
最小限のInnoDB設定
これは、InnoDBテーブルを使用するMySQLサーバーの最小限の設定です。 InnoDBを使用すると、クエリキャッシュは必要ありません。表またはデータベースがDROP
ときにディスク・スペースを再利用します。 SSDを使用している場合、フラッシュは冗長操作です(SDDは逐次的ではありません)。
default_storage_engine = InnoDB
query_cache_type = 0
innodb_file_per_table = 1
innodb_flush_neighbors = 0
並行性
innodb_thread_concurrency
を無限大(0)に設定innodb_thread_concurrency
ことで、デフォルトの4スレッド以上を作成できることを確認してください。これによりInnoDBは最適な実行に基づいて決定することができます。
innodb_thread_concurrency = 0
innodb_read_io_threads = 64
innodb_write_io_threads = 64
ハードドライブの使用率
MySQLのIOPSの容量(通常の負荷)とcapacity_max(絶対最大)を設定します。 HDDのデフォルト値は200ですが、最近では数千のIOPSが可能なSSDではこの数を調整したいと考えています。 IOPSを決定するために実行できるテストはたくさんあります。 専用のMySQLサーバーを実行している場合は 、上記の値はほぼ限界値になるはずです。同じマシン上で他のサービスを実行している場合は、必要に応じて配分する必要があります。
innodb_io_capacity = 2500
innodb_io_capacity_max = 3000
RAM使用率
MySQLに使用可能なRAMを設定します。経験則は70〜80%ですが、これは実際にインスタンスがMySQL専用であるかどうか、使用可能なRAMの量によって異なります。たくさんある場合はRAM(つまりリソース)を無駄にしないでください。
innodb_buffer_pool_size = 10G
安全なMySQL暗号化
デフォルトの暗号化aes-128-ecb
では、ECB(Electronic Codebook)モードが使用されています。これは安全ではなく、決して使用しないでください。代わりに、設定ファイルに次の行を追加します。
block_encryption_mode = aes-256-cbc