InnoDB(5gbデータベース)のみを使用する8gb RAM専用MySQLサーバーの最適なMySQLキャッシュ設定


20

パフォーマンスのためにMySQLを設定することになると、私は非常に大物です。そして正直なところ、MySQLのパフォーマンスの最後の部分をすべて絞り出すための微調整については心配していませんが、最良の結果のいくつかを提供する最も重要なことは、キャッシュ/バッファを正しく設定することです。

InnoDBのみをストレージエンジンとして使用することで、物事をシンプルにしようとしました。また、MySQL専用のサーバーがあります。8GBのRAMがありますが、パフォーマンスを最大化するにはどのように割り当てる必要がありますか?最高のパフォーマンスを得るために、データベース全体をメモリに収めることができます。データベースは約5GBです。これは可能ですか?

クエリキャッシュに割り当てるメモリ量はどれくらいですか?InnoDBバッファープールはいくらですか?コンピューターの残りの部分(つまり、MySQLに関連しないプロセス)はいくらですか?等。

MyISAMを使用していないので、キーキャッシュに多くのメモリを正しく入れる必要はありませんか?

回答:


25

これは、データベース自体について多くの知識がなければ困難です。知っておくべきツールがいくつかあります。

データベース全体をメモリに保存することについて。データベースで変更を行っているクエリは、ディスクで書き込みが実行されるまで開いたままになります。ディスクがボトルネックになることを回避できる唯一のことは、書き込みキャッシュを備えたディスクコントローラです。

デフォルトから次の変更を開始します。

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

その後、私は物事がどのように進むのかを見て、上記のツールの出力に基づいてさまざまなことを試します。また、MuninCactiなどの監視ツールを使用して傾向をグラフ化し、実際に処理しているワークロードの種類を確認します。個人的には、Muninで提供されるMySQLプラグインで素晴らしい経験があります。


おかげで、これを試して、何か新しいことを学べるかどうかを確認します。
ビルマラーキー

@billmalarky serverfaultへようこそ!:)あなたが得た答えに満足している場合は、質問に賛成票を入れるか、正しいとマークすることを忘れないでください。
Kvisle

mysqltuner.plを推奨するための+1 !!!
-RolandoMySQLDBA

@Kvisle歓迎してくれてありがとう!私はしばらくの間stackoverflowの周りにいました(まあ...数ヶ月です...)ですが、私はserverfaultに新しいです。私は実際にvoxel.netでホストしており、それらのプロマネージドホスティング(IEシステムサポート)は本当に素晴らしいのですが、外部ビューを探すことも適切であると考えたので、このことについて話しているときに完全なツールのようには聞こえませんでした。
ビルマラーキー

1
@Kvisleまた、私は正しい答えをマークしますが、良いブレインストーミングを得るためにこれを少し煮込みたいです。
-billmalarky

9

私見あなたは一緒に行くことができるはずです

innodb_buffer_pool_size=5G

これは、サーバーOSに十分な量のRAMとDB接続用のメモリを備えたRAMの62.5%です。

@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を推奨)。

innodb_buffer_pool_sizeの推奨サイズを計算するためにDBA StackExchangeで作成した投稿を次に示します。

更新2011年10月15日19時55分EDT

5GBのデータがあることがわかっている場合、最初の推奨事項はOKでした。ただし、1つ追加するのを忘れました。

[mysqld]
innodb_buffer_pool_size=5G
innodb_log_file_size=1280M

ログファイルのサイズは、InnoDBバッファープールの25%である必要があります

更新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つに、192GB RAMのDBサーバーがあります。48Gログファイルを作成する方法はありません。innodbログファイルの最大ファイルサイズ2047Mを使用します。私の回答に対する@Kvisleのコメントは、2つのログファイルに制限する必要がないことを示すリンクを提供するだけです。N個のログファイルがある場合、合計4Gにすることはできません。私の25%ルールは完璧な世界(8GB以下のDBサーバー)にあります。


おかげで、間違いなくmysqltuner.plを使用することになります。ただし、データベースが空の場合、そのスクリプトはまだ正確ですか?すべてのテーブルとスキーマを正しく設定していますが、実際のデータはありません。現在の専用サーバーで使用するサイズの例として5GBを使用しました(つまり、DBがそれより大きくなると、おそらくより優れた専用サーバーに切り替えます)。現在、データベースは空です(起動していない新しいサイトです)が、起動前にスケーリングをうまく処理できるようにmysqlを調整したいと思います。
ビルマラーキー

私の答えを更新しました!!!
RolandoMySQLDBA

「InnoDBバッファープールの25%でなければなりません」についてコメントしたいと思います。100%真実ではないからです。より詳細な回答については、dev.mysql.com / doc / refman / 5.0 / en /…をお読みください。パフォーマンスに関しては、サイズをデフォルトから少し大きくするのに役立ちますが、最大にする必要はありません。
クビスル

ローランド、助けてくれてありがとう。このスレッドを参照としてブックマークしました。また、私はそのmysqltunerスクリプトを使用しています。
-billmalarky
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.