MySQLのソートに関する設定値とステータスを確認する方法についてです。
※目次をクリックすると目次の下部にコンテンツが表示されます。
mysql> show variables like '%sort_buffer%'; +-------------------------+----------+ | Variable_name | Value | +-------------------------+----------+ | innodb_sort_buffer_size | 1048576 | | myisam_sort_buffer_size | 20971520 | | sort_buffer_size | 262144 | +-------------------------+----------+ mysql> show variables like 'read%'; +----------------------+--------+ | Variable_name | Value | +----------------------+--------+ | read_buffer_size | 40960 | | read_only | OFF | | read_rnd_buffer_size | 262144 | +----------------------+--------+
 
2)各設定値の内容
 
●sort_buffer_size
 
・各セッションのソート用のバッファサイズ。
 
・ストレージエンジン固有のバッファサイズではない。
 
・このサイズを超えるソートはディスクを使用。
 
●myisam_sort_buffer_size
 
・”REPAIR TABLE”中や”CREATE INDEX”、”ALTER TABLE”でインデックス生成中にMyISAMインデックスをソートするのに割り当てるバッファサイズ。
 
●read_buffer_size
 
・MyISAMテーブルをシーケンシャルスキャンする各スレッドに対し、スキャンするテーブル毎に割り当てるバッファサイズ。
 
・ORDER BYでソートするときに一時ファイルにインデックスをキャッシュする際にも使用。
 
・ネストされたクエリの結果をキャッシュするのに使用。
 
●read_rnd_buffer_size
 
・MyISAMテーブルから行をソート順にリードする際、ディスクシークを避けるためにこのバッファを通してリードされる。この値を大きくするとORDER BY句の性能を向上できる。
 
3)チューニング、最適化
 
・バッチ処理などの場合、処理実行前に動的にこれらのパラメタを変更する。
 
・ORDER BY句の最適化は下記記事参照
MySQLのORDER BY句でインデックスを使用
    
mysql> show status like '%Sort_%'; +-------------------+-------+ | Variable_name | Value | +-------------------+-------+ | Sort_merge_passes | 0 | | Sort_range | 0 | | Sort_rows | 0 | | Sort_scan | 0 | +-------------------+-------+
 
●Sort_merge_passes
 
・ファイルを利用したマージソートのパス数
 
・ソートがメモリ上だけで収まらない場合には要確認。インデックスの利用を検討