構成の誤りが原因で、mysql..mysqlチューナーショーが一時テーブルを作成しすぎる可能性はありますか
Current max_heap_table_size = 200 M
Current tmp_table_size = 200 M
Of 17158 temp tables, 30% were created on disk
table_open_cache = 125 tables
table_definition_cache = 256 tables
You have a total of 97 tables
You have 125 open tables.
Current table_cache hit rate is 3%
以前の一時テーブルは「23725の一時テーブルのうち38%がディスク上に作成されました」でしたが、max_heapとtmp_tableを16mから200mに変更すると、30%に低下しました。
構成:
engine myisam
group_concat_max_len = 32768
key_buffer_size = 3.7 GB,
thread_stack = 256k,
table_cache = 125
query_cache_limit = 1M
query_cache_size = 16M
join_buffer_size = 2.00 M
max_connections = 800
デフォルトの設定を持つ別のシステムは、同じデータベースで「23725の一時テーブルのうち、1%がディスク上に作成された」と示しています。
この問題が発生したマシンでデフォルトに変更してみましたが、「580の一時テーブルのうち、16%がディスク上に作成されました」と表示されます。
私はUbuntu 11.4 64ビットと48 GB RAMを使用しています。誰かが解決策を提案できますか?
「group by」を使用してテーブルのdbエンジンを「myisam」から「memory」に変更すると、これは修正されますか?ここで説明したように: http://www.mysqlperformanceblog.com/2007/08/16/how-much-overhead-is-caused-by-on-disk-temporary-tables/
mysqltunerが有用な情報を提供することはほとんどありません。 「ヒット率」についてはほとんど関係のない統計を使用し、許容できるウィジェットの許容数に任意の制限を課します。パフォーマンスの問題に直面していない場合は、実際に発生する問題を解決する必要はありません。とはいえ、一時テーブルに関する背景情報を少し紹介します...
MySQLは暗黙的に一時テーブルを作成するためにMEMORYストレージエンジンを内部的に使用します。ディスクの一時テーブルでは、MyISAMストレージエンジンを使用します。
一時テーブルは、次の場合にディスク上に作成されます。
tmp_table_size
またはmax_heap_table_size
の小さい方を超えています詳細については、内部一時テーブルの MySQLドキュメント を参照してください。
これについて何ができますか?それが実際にパフォーマンスの問題を表していると仮定すると(単にあなたを知的に煩わせるだけでなく):
tmp_table_size
とmax_heap_table_size
の両方をレイズします。クエリを最適化できないことが判明しない限り、これを行わないでください。MySQLの設定に不安があり、利用可能な設定を自分で使い慣れていない場合は、開始点として Percona設定ウィザード を確認することをお勧めします。
「group by」を使用してテーブルのdbエンジンを「myisam」から「memory」に変更すると、これは修正されますか?ここで説明したように
いいえ、そうではなく、テーブルがディスクに永続化されることはありません。これを行わないでください。
「一時的な使用」と「ファイルソートの使用」は世界の終わりではありません!
SELECT ... GROUP BY a、b ORDER BY c、d-1つまたは2つの「一時テーブル」が必要です。
クエリが一時テーブルを使用する場合があります。一時テーブルは、小さな要因でクエリを遅くする可能性があります。ただし、クエリが「十分に高速」である場合は、心配する必要はありません。
クエリが遅すぎる場合(tmpテーブルの有無にかかわらず)、それについて説明しましょう。 SHOW CREATE TABLE、SHOW TABLE STATUS、およびEXPLAINを提供してください。