web-dev-qa-db-ja.com

MyISAMテーブルのパフォーマンス設定-すべてをメモリに保持

32 GBのRAMを備え、40個のMyISAMテーブルを保持する8コアのMySQLサーバーがあります(合計:〜4GBのデータ)。データベースのサイズは使用可能なメモリの数分の1なので、サーバーのリソースを最大限に活用するにはどうすればよいですか?

  1. My.cnfでどの設定を構成する必要がありますか?

  2. データ+インデックスを強制的にメモリに保持できますか?

6
Vlad Zloteanu

MySQLは、MySQLのメモリのインデックスのみをキャッシュし、データはキャッシュしません。データは、基盤となるオペレーティングシステムのファイルシステムキャッシュによってのみキャッシュされます。 my.cnfで調整する最も重要な値はkey_buffer_sizeで、これはMyISAMがインデックスをキャッシュするためのメモリを割り当てます。

ただし、MyISAMテーブルを使用する特定の理由がない限り、それらのテーブルをInnoDBに変換する必要があります。この時代では、MyISAMを使用する理由は少なくありません。MyISAMは、同時実行性、データの整合性、またはクラッシュリカバリに適していません。

InnoDBに切り替える場合、最も重要な設定は、データページとインデックスをキャッシュする内部メモリキャッシュであるinnodb_buffer_pool_sizeです。考慮すべき他の事柄はinnodb_log_file_sizeであり、必ずinnodb_file_per_table=1を設定してください。 4GBのデータとインデックスの場合、innodb_buffer_pool_size=4Gの設定は妥当です。並行性の高い環境で実行している場合は、innodb_thread_concurrencyの値を試すことができます。私の推奨はinnodb_thread_concurrency = 0から始めることですが、ワークロードとMySQLのバージョンによっては、4〜8のいずれかに明示的に設定する必要があるかもしれません。

6
Aaron Brown

MyISAMのデータをキャッシュできないため、InnoDBを使用する必要があるという点でアーロン(+1)に同意します。

ここにあなたが気にする必要のある設定があります

私の推薦

ハイパースレッディングの増加によって複数のコアを使用するための新しい設定があるため、MySQL 5.5にアップグレードする必要があります。オプションは、5.1.38以降のMySQL 5.1に存在しますが、InnoDBプラグインにのみ存在します。 InnoDBプラグインを使用するよりも、5.5にアップグレードする方が簡単で実用的です。

5
RolandoMySQLDBA