web-dev-qa-db-ja.com

MyISAMのみを使用する8 GBのMySQLサーバーに最適なmy.cnf構成

大規模なDrupal 6.xベースのインストールを準備し、8GBのRAMを備えた専用のMySQLサーバーをセットアップしました。Drupal 6.xはMyISAMエンジンのみを使用し、 2つのWebノードを介してサイトを使用する約500人の同時ユーザーが存在します。

これは、mysqlチューニングプライマー分析のダンプです。使用率が高いときに実行する必要があるかどうかわからないため、早朝に実施しました: http://pastie.org/3279741

私はmysqlの設定に精通していないので、負荷の量を維持できるようにmy.cnfファイルの正しい設定を決定するための助けを探しています。私はこれをかなり緊急に必要とするので、理解するためのリソースを探しません(少なくとも今は!)。

前もって感謝します!

私は垂れ幕を知りません。しかし、あなたが尋ねたように、あなたは専用のMyIsam MySql設定が必要です。 MyIsamについては、いくつかの推奨事項があります。

key_buffer_size

MyISAMテーブルのインデックスブロックをキャッシュするために使用されるキーバッファーのサイズ。 OSが行をキャッシュするために必要なメモリもあるので、使用可能なメモリの30%より大きく設定しないでください。 MyISAMテーブルを使用していない場合でも、内部一時ディスクテーブルにも使用されるため、8〜64Mに設定する必要があります。したがって、2GBから3GBに設定する必要があります

read_buffer_size

MyISAMテーブルの全テーブルスキャンを実行するために使用されるバッファのサイズ。フルスキャンが必要な場合は、スレッドごとに割り当てられます..8MBから16MBに設定する必要があります。

read_rnd_buffer_size

ソート後にソートされた順序で行を読み取る場合、ディスクシークを回避するために、このバッファーを介して行が読み取られます。これを高い値に設定すると、ORDER BYのパフォーマンスを大幅に改善できます。必要に応じて、スレッドごとに割り当てられます。

bulk_insert_buffer_size

MyISAMは、特別なツリーのようなキャッシュを使用して、一括挿入(つまり、INSERT ... SELECT、INSERT ... VALUES(...)、(...)、...、およびLOAD DATA INFILE)を高速化します。この変数は、スレッドあたりのバイト数でキャッシュツリーのサイズを制限します。 0に設定すると、この最適化が無効になります。最適なパフォーマンスを得るには、「key_buffer_size」より大きく設定しないでください。このバッファーは、一括挿入が検出されたときに割り当てられます。512 MBから1GBに設定します。

myisam_sort_buffer_size

このバッファは、MySQLがREPAIR、OPTIMIZE、ALTERテーブルステートメントおよびLOAD DATA INFILEのインデックスを空のテーブルに再構築する必要があるときに割り当てられます。スレッドごとに割り当てられるため、大きな設定には注意してください。したがって、2Mに設定する必要があります

myisam_max_sort_file_size

MySQLがインデックスの再作成中に使用できる一時ファイルの最大サイズ(REPAIR、ALTER TABLE、またはLOAD DATA INFILEの実行中。ファイルサイズがこれよりも大きい場合、インデックスはキーキャッシュ(これは必要に応じてに設定してください。

myisam_repair_threads 

テーブルに複数のインデックスがある場合、MyISAMは複数のスレッドを使用して、並列にソートすることでそれらを修復できます。これは、複数のCPUと十分なメモリがある場合に意味があります.1に設定します。

myisam_recover

適切に閉じられていないMyISAMテーブルを自動的にチェックして修復します。

8
Abdul Manaf

実際、Drupal(6.xでも)はInnoDBで実行することを好みます。MyISAMがデフォルトです、そうですが、それは単に、InnoDBを提供しないホスティング業者をサポートするための意識的な努力によるものです- http://drupal.org/node/301362 を参照してください。したがって、MyISAMの独占的な使用を再検討することを強くお勧めします。

これには1つの注意事項が適用されます。search_*テーブルはFULLTEXTインデックスを使用するため、InnoDBと互換性がありません。それらのMyISAMをそのままにしておくか、さらに良いことに、その機能をApache Solrのようなものに置き換えます。

InnoDBへの変換後にmysqltuner.plを使用する場合、最近更新されていない限り、InnoDBの最大のパフォーマンスキーであるinnodb_buffer_poolを設定するように指示することはありません。

MyISAMからInnoDBへの変換プロセスはロスレスで比較的高速です。ただのALTER TABLEsometableENGINE=InnoDB。これを行う前に、必ずinnodb_buffer_poolを設定してください。そうしないと、長時間待機する可能性があります。

最後に、大規模なDrupalデプロイメントの経験を持つホスティングプロバイダーがこれらのステップのほとんどまたはすべてを処理することで、BlackMeshとの会話を検討してください- Drupalコミュニティでアクティブな別のホストです。サイトを拡大し続けると、Drupal固有のサポートとスケーリングに関するアドバイスを提供できる可能性があります。

幸運を!

2
BMDan
  1. はい、偽の負荷ではなく、実際の負荷で実行します。数字は過去のパフォーマンスに関するものであるため、それが実際の負荷と異なる場合は、それほど効果的ではありません。

  2. Mysqltunerの指示に従ってください。

製品のチューニングの詳細を学ぶ時間がなく、ベストプラクティスに従うだけの場合は、mysqltunerが最適です。それはまさにそれを行います:ベストプラクティスの推奨事項をキャプチャし、実際の使用に基づいて何を変更するかを伝えます。

1
Daniel Pittman