2

XtraDBクラスターを3つのノードで構成しました。3つのサーバーはすべて同じMySQL構成、32 GB RAM、CentOS 5を備えています。サーバーのバージョンは5.5.29-23.7.1(64ビット)です。

負荷テスト中に、接続が多すぎるというエラーが発生します。MySQLプロセスリストが、スレッド接続のしきい値1000に到達するためのtmpテーブルステートメントの作成に使用されていることがわかりました。

tmpテーブルの作成の問題は、1つのサーバーでランダムに発生し、他の2つのサーバーは期待どおりに機能しています。

tmpテーブルのサイズを大きくすると、この問題またはこの問題が発生する理由が修正されることをお知らせください。

現在のmy.cnf値、

## Temp Tables
    tmp-table-size = 256M
    max-heap-table-size = 128M

## Networking
    max-connections = 1000
4

1 に答える 1

3

より多くの一時テーブルをメモリに収めることができれば、より高速になり、スループットが向上します。

おそらく、tmp_table_size を max_heap_table_size よりも大きく設定したくないでしょう。害はありませんが、メモリ内の一時テーブルの有効な制限は、これら 2 つの値の小さい方です。つまり、max_heap_table_size は、あらゆる種類のメモリ内テーブルの制限です。そのため、大きな一時テーブルをメモリに保持したい場合は、max_heap_table_size=256M を増やす必要があります。

しかし、これは 256M が十分に大きいかどうかという問題には答えません。つまり、500M の一時テーブルが必要になる場合があるため、256M の一時テーブルを許可したとしても、それらはディスクに保存されます。一時テーブルに必要なストレージの量を調べる必要があります。現在、この情報を取得する唯一の方法は、Percona Server の詳細な低速クエリ ログを使用することです。http://www.percona.com/doc/percona-server/5.5/diagnostics/slow_extended_55.htmlを参照してください。

一時テーブルをメモリ内に保持すると、パフォーマンスがいくらか向上しますが、クエリを最適化して最初から一時テーブルを作成しないようにできれば、はるかに優れています。これができるかどうかは、クエリの書き方によって異なります。そのため、新しいインデックスを作成するか、一部のクエリの記述方法を変更する必要がある場合があります。残念ながら、これに対する簡単な答えはありません。

于 2013-03-04T04:45:52.233 に答える