MySQLのソートに関する設定値とステータス

MySQLのソートに関する設定値とステータスを確認する方法についてです。

(1)ソート関連のサーバーシステム変数


 
1)設定値を確認

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句でインデックスを使用
 

(2)ソート関連のサーバーステータス変数


 

mysql> show status like '%Sort_%';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| Sort_merge_passes | 0     |
| Sort_range        | 0     |
| Sort_rows         | 0     |
| Sort_scan         | 0     |
+-------------------+-------+

 
●Sort_merge_passes
 
・ファイルを利用したマージソートのパス数
 
・ソートがメモリ上だけで収まらない場合には要確認。インデックスの利用を検討

関連記事の目次

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です