パフォーマンスのためにMySQLを設定することに関しては、私はかなり大きな初心者です。正直なところ、MySQLからパフォーマンスの最後のすべてのビットを絞り出すための微調整について心配していませんが、最良の結果を提供するために行う最も重要なことは、キャッシュ/バッファーを正しく設定することです。
ストレージエンジンとしてInnoDBのみを使用することで、物事をシンプルに保つようにしました。また、MySQL専用のサーバーもあります。それは8GBのRAMを持っていますが、パフォーマンスを最大化するにはどのようにそれを割り当てる必要がありますか?最高のパフォーマンスを得るために、データベース全体をメモリに収めることができるようにしたいと考えています。データベースは約5GBです。これは可能ですか?
クエリキャッシュにはどのくらいのメモリを割り当てる必要がありますか? InnoDBバッファープールはいくらですか?コンピュータの残りの部分(つまり、MySQLに関連しないプロセス)はどのくらいですか?等。
MyISAMを使用していないので、キーキャッシュに大量のメモリを正しく配置する必要はありませんか?
これは、データベース自体についてよく知らなければ難しいです。注意すべきいくつかのツールがあります。
データベース全体のメモリへの格納について。データベースで変更を行っているクエリは、ディスクで書き込みが実行されるまで開いたままになります。ディスクがボトルネックになるのを回避できる唯一のことは、書き込みキャッシュを備えたディスクコントローラーです。
デフォルトからの次の変更から始めます。
key_buffer_size = 128M
thread_stack = 128K
thread_cache_size = 8
table_cache = 8192
max_heap_table_size = 256M
query_cache_limit = 4M
query_cache_size = 512M
innodb_buffer_pool_size = 4G
# This is crucial to avoid checkpointing all the time:
innodb_log_file_size = 512M
# If you have control on who consumes the DB, and you don't use hostnames when you've set up permissions - this can help as well.
skip_name_resolve
次に、状況を確認し、上記のツールの出力に基づいてさまざまなことを試します。 Munin や Cacti などの監視ツールを使用して傾向をグラフ化し、実際に処理しているワークロードの種類を確認します。個人的に、私はMuninで提供されるMySQLプラグインで素晴らしい経験をしています。
私と一緒に行くことができるはずです
innodb_buffer_pool_size=5G
これは、RAMの62.5%です)RAMサーバーOSとDB接続用のメモリの場合)
@ kvisle mysqltuner.plを使用することをお勧めします。このスクリプトは、join_buffer_size、sort_buffer_size、read_buffer_size、およびread_rnd_buffer_size専用のRAMの量を判断するのに最適です。これらの4つのバッファーを合計すると、max_connectionsが乗算されます。その答えは、静的バッファー(innodb_buffer_pool_size + key_buffer_size)合計が報告されます。その合計がRAMの80%を超える場合は、それらのバッファーサイズを小さくする必要があります。mysqltuner.plは、この点で非常に役立ちます。
データはすべてInnoDBであるため、key_buffer_size(MyISAMインデックスのキーキャッシュバッファー)を非常に小さくすることができます(64Mをお勧めします)。
これが、DBA StackExchangeでinnodb_buffer_pool_sizeの推奨サイズを計算するために作成した投稿です 。
UPDATE 2011-10-15 19:55 EDT
5 GBのデータがあることがわかっている場合、私の最初の推奨はOKでした。ただし、1つ追加するのを忘れていました。
[mysqld]
innodb_buffer_pool_size=5G
innodb_log_file_size=1280M
ログファイルのサイズはInnoDBバッファープールの25%である必要があります
UPDATE 2011-10-16 13:36 EDT
25%ルールは、2つのログファイルの使用に厳密に基づいています。複数のinnodbログファイルを使用することは可能ですが、通常は2つが最適です。
他の人は25%を使用して表現しています
ただし、公平に言えば、元のInnoBase Oy会社の誰かが、InnoDBバッファープールが大きいため、25%ルールを使用しないことを表明しました 。
当然、大容量のRAMがある場合、25%ルールは機能しません。実際、ログファイルの合計サイズは4G(4096M)未満でなければならないため、2つのログファイルのみを使用して許可される最大のinnodb_log_file_sizeは2047Mです。
事例:雇用主のクライアントの1つに、192 GBのRAMを備えたDBサーバーがあります。 48Gログファイルを作成する方法はありません。私は同様に、innodbログファイルの最大ファイルサイズ2047Mを使用します。 @Kvisleの私の回答へのコメントは、2つのログファイルに制限する必要がないことを示すリンクを提供するだけです。 N個のログファイルがある場合、合計4Gにすることはできません。私の25%ルールは完全な世界(8GB以下のDBサーバー)にあります。