Linux環境でのMySQLサーバの最適化

  

通常のMySQLユーザは、クエリ作成を使用して行うことができる最適化と同様に、テーブル作成およびインデックス作成操作を利用します。ただし、MySQLサーバーまたはMySQLを実行しているマシンを制御するMySQL管理者およびシステム管理者のみが実行できる最適化がいくつかあります。一部のサーバーパラメータはクエリ処理に直接適用でき、有効にすることができます。そしていくつかのハードウェア構成の問題は直接クエリ処理速度に影響します、それらは調整されるべきです。

ディスクの問題
前述のように、ディスクシークはパフォーマンスの大きなボトルネックです。この問題は、データが増大し始めてキャッシュが不可能になるにつれて、ますます明白になります。大規模なデータベースでは、データへのランダムアクセスが多かれ少なかれ、少なくとも1つのディスクが読み取りを要求し、複数のディスクが書き込みを要求するようにすることができます。この問題を最小限に抑えるには、シーク時間の短いディスクを使用してください。

利用可能なディスクスピンドルの数を増やす(したがってシークのオーバーヘッドを減らす)には、ファイルを異なるディスクにシンボリックに結合したり、ディスクを分割したりすることができます。

1.シンボリックリンクを使用する
これは、通常のデータディレクトリから他のディスクにインデックス/データファイルのシンボルをリンクすることを意味します(分割することもできます)。これにより、シーク時間と読み取り時間が短縮されます(ディスクが他の用途に使用されていない場合)。

2、分割
分割とは、多数のディスクがあり、最初のディスクを最初に配置することを意味します。ディスクでは、2番目のブロックは2番目のディスクに配置され、n番目のブロックは(nmodnumber_of_disks)ディスクに配置されます。つまり、通常のデータサイズが分割されている(または完全に揃っている)場合は、パフォーマンスが向上します。分割はOSと分割サイズに大きく依存することに注意してください。そのため、さまざまな分割サイズでアプリケーションをテストしてください。独自のベンチマークを使用して10.8を参照してください。分割の速度の違いは、パラメータの分割方法とディスクの数に応じて、パラメータによって大きく異なります。そのため、桁違いの差が生じる可能性があります。ランダムアクセスまたはシーケンシャルアクセスに対して最適化を選択する必要があることに注意してください。

信頼性のために、RAID 0 + 1(スプリット+ミラー)RAIDを使用することをお勧めしますが、この場合、Nドライブのデータを保持するには2 * Nドライブが必要になります。あなたがお金を持っているなら、これは最良の選択かもしれません。ただし、ボリューム管理ソフトウェアへの投資を効率的に処理するために投資する必要があるかもしれません。

RAID 0ディスクにはもう少し重要なデータ(再生成可能)を、RAID 0 + 1またはRAIDNディスクには本当に重要なデータ(ホスト情報やログファイルなど)を用意することをお勧めします。パリティビットを更新するために多数の書き込みがある場合、RAIDNが問題になる可能性があります。

データベースで使用されているファイルシステムのパラメータを設定することもできます。簡単な変更は、noatimeオプションでファイルシステムをマウントすることです。これは、iノードでの更新をスキップする最後のアクセス時間です。これにより、一部のディスクシークが回避されます。

ハードウェアの問題
ハードウェアを使用すると、サーバーのパフォーマンスをより効率的に向上させることができます。

1.コンピュータにメモリを増設します。これにより、サーバーのキャッシュとバッファーのサイズが大きくなり、サーバーはメモリーに格納されている情報をより頻繁に使用できるようになり、ディスクから情報を取り出す必要性が少なくなります。

2.メモリファイルシステム内のすべてのスワップを完了させるのに十分なRAMがある場合は、すべてのディスクスワップ設定を削除するようにシステムを再設定する必要があります。そうでなければ、交換を満足させるのに十分なRAMがあっても、システムによってはディスクと交換する必要があります。

3、高速ディスクを増やしてI /O待機時間を減らします。ここでパフォーマンスを決定する主な要因はシーク時間です。頭を逐語的に動かすのは非常に遅く、頭が位置決めされると、ブロックはトラックからより速く読まれます。

4.データを別のデバイスに戻す前に、システムの負荷特性を理解しておく必要があります。特定の物理デバイス上で何らかの特定の主要なアクティビティがある場合、そこにデータベースを配置すると、実際にはパフォーマンスが低下する可能性があります。たとえば、大量のWebトラフィックを処理するWebサーバーデバイスにデータベースを移動しないでください。

5、MySQLをセットアップするときは、共有ライブラリの代わりに静的ライブラリを使用するようにMySQLを設定する必要があります。共有バイナリ動的バイナリシステムを使用するとディスク容量を節約できますが、静的バイナリシステムの方が高速です(ただし、ユーザー定義関数をロードする場合は、UDFメカニズムは動的接続に依存するため静的バイナリシステムを使用できません)。

サーバーパラメータの選択
サーバーにはいくつかのパラメータ(または変数)があり、それらを変更して動作に影響を与えることができます。システム変数の現在の値はMySQLadminvariblesコマンドを実行することで確認することができますいくつかのパラメータは主にクエリに関連しています:ここで言及する必要があります:

delayed_queue_size
このパラメータは他のINSERTDELAYEDステートメントで実行されます。クライアントがブロックする前に、INSERTDELAYEDステートメントからキュー内の行数を調べます。このパラメータの値を大きくすると、サーバーはそのような要求からより多くの行を受け取ることができるため、クライアントはブロックせずに実行を継続できます。

key_buffer_size
このパラメータは、インデックスブロックを格納するために使用されるバッファのサイズです。より多くのメモリがある場合、この値を大きくすると、インデックスの作成と変更にかかる時間を節約できます。値を大きくすると、MySQLはより多くのインデックスブロックをメモリに格納できるようになり、ディスクブロックを読み取らずにキー値をメモリ内で見つける可能性が高まります。

MySQL 3.23以降では、キーバッファのサイズを増やす場合は、—— init-fileオプションを使用してサーバーを起動することをお勧めします。これにより、サーバーの起動時に実行されるSQLステートメントファイルを指定できます。メモリに格納する読み取り専用のテーブルがある場合は、それらをインデックスが非常に高速に見えるHEAPテーブルにコピーできます。

Copyright © Windowsの知識 All Rights Reserved