MySQL MyISAMの性能に関係する設定値とステータス確認方法についてです。
※目次をクリックすると目次の下部にコンテンツが表示されます。
MyISAMの性能に関係するサーバーシステム変数
1)主なサーバーシステム変数
mysql> show variables like 'key_%'; +--------------------------+---------+ | Variable_name | Value | +--------------------------+---------+ | key_buffer_size | 8384512 | | key_cache_age_threshold | 300 | | key_cache_block_size | 1024 | | key_cache_division_limit | 100 | +--------------------------+---------+ mysql> show variables like 'myisam_%'; +---------------------------+----------------------+ | Variable_name | Value | +---------------------------+----------------------+ | myisam_data_pointer_size | 6 | | myisam_max_sort_file_size | 9223372036853727232 | | myisam_mmap_size | 18446744073709551615 | | myisam_recover_options | OFF | | myisam_repair_threads | 1 | | myisam_sort_buffer_size | 8388608 | | myisam_stats_method | nulls_unequal | | myisam_use_mmap | OFF | +---------------------------+----------------------+ mysql> show variables like 'delay_%'; +------------------------+-------+ | Variable_name | Value | +------------------------+-------+ | delay_key_write | ON | | delayed_insert_limit | 100 | | delayed_insert_timeout | 300 | | delayed_queue_size | 1000 | +------------------------+-------+
2)変数の内容とチューニングの注意点
①key_buffer_size
・MyISAMテーブルのインデックスブロックはバッファーされ、すべてのスレッドによって共有される。
key_buffer_sizeは、インデックスブロックに使用されるバッファーのサイズ。
・MyISAMのみを利用していれば、メインメモリの25-33%を割り当てる。
②myisam_sort_buffer_size
・REPAIR TABLE実行時のMyISAMインデックスのソートやインデックス作成時に割り当てられるバッファーのサイズ。
・インデックス作成時には大きくしておく。
起動時のオプション
①–myisam-recover=
・MyISAMストレージエンジンのリカバリーモード。
・DEFAULT, BACKUP, FORCE, QUICKから指定。
・リカバリーが有効になっている場合、mysqldがMyISAMテーブルをオープンするたびにそのテーブルがクラッシュとしてマークされていないか、または正常にクローズされなかったかどうかチェックする。
異常があった場合はmysqldはそのテーブルをリペアする。
②–delay-key-write
・インデックスをディスクに反映させるのをテーブルが閉じられたタイミングのみにする。
・クラッシュ時にデータが破損する可能性が増大するため注意。
・MyISAMストレージエンジンのリカバリーモード。
・DEFAULT, BACKUP, FORCE, QUICKから指定。
・リカバリーが有効になっている場合、mysqldがMyISAMテーブルをオープンするたびにそのテーブルがクラッシュとしてマークされていないか、または正常にクローズされなかったかどうかチェックする。
異常があった場合はmysqldはそのテーブルをリペアする。
②–delay-key-write
・インデックスをディスクに反映させるのをテーブルが閉じられたタイミングのみにする。
・クラッシュ時にデータが破損する可能性が増大するため注意。
ステータス確認
mysql> show status like 'key%'; +------------------------+------------+ | Variable_name | Value | +------------------------+------------+ | Key_blocks_not_flushed | 0 | | Key_blocks_unused | 3471 | | Key_blocks_used | 6694 | | Key_read_requests | 1315669686 | | Key_reads | 4786586 | | Key_write_requests | 153324571 | | Key_writes | 12481575 | +------------------------+------------+
●Key_read_requests、Key_reads
・Key_read_requests:キャッシュからキーブロックを読んだリクエスト数
・Key_reads:ディスクからキーブロックの物理レコードを読んだ数。
・Key_reads/Key_read_requestsでキャッシュミス率
●Key_write_requests,Key_writes
・キャッシュミス率は高いことが多い
●Key_blocks_unused
・キーキャッシュ内の使用されていないブロックの数。
・値が大きい場合はキャッシュサイズが大きすぎる可能性大。
low_priority_updatesとdelay_key_write
1)low_priority_updates(サーバーシステム変数または各クエリ)
・新規挿入、更新、削除などのテーブルデータの変更を伴うクエリの優先度を読み出しより下げる。
・各クエリ単位に指定したい場合は、下記のように”LOW_PRIORITY”キーワードを指定する。
INSERT LOW_PRIORITY INTO テーブル名・・・
上記クエリでは、他のクライアントがテーブルからReadし終わるのを待って挿入を行う。
2)delay_key_write(サーバーシステム変数またはcreate tableのオプション)
・デフォルトでは、インデックスやキーが更新されるとその更新内容をディスクに書き戻す。
更新の頻度が高いテーブルの場合は、これによって多量のディスク書き込みが発生する。
“delay_key_write”システム変数をallに指定、またはcreate tableでdelay_key_writeオプションを指定すると、更新されたインデックスはメモリ内のバッファーに保持され、テーブルがクローズされるまでディスクへの書き出しが遅延される。
・クリーンに終了されなかった場合は、メモリ内の更新インデックスデータがディスクに書き戻されず、インデックスが不正となる可能性がある。
この場合は、myisamchkを実行して修復する事ができる。ただし、データ量の多いテーブルでは実行時間が長くなる。
・新規挿入、更新、削除などのテーブルデータの変更を伴うクエリの優先度を読み出しより下げる。
・各クエリ単位に指定したい場合は、下記のように”LOW_PRIORITY”キーワードを指定する。
INSERT LOW_PRIORITY INTO テーブル名・・・
上記クエリでは、他のクライアントがテーブルからReadし終わるのを待って挿入を行う。
2)delay_key_write(サーバーシステム変数またはcreate tableのオプション)
・デフォルトでは、インデックスやキーが更新されるとその更新内容をディスクに書き戻す。
更新の頻度が高いテーブルの場合は、これによって多量のディスク書き込みが発生する。
“delay_key_write”システム変数をallに指定、またはcreate tableでdelay_key_writeオプションを指定すると、更新されたインデックスはメモリ内のバッファーに保持され、テーブルがクローズされるまでディスクへの書き出しが遅延される。
・クリーンに終了されなかった場合は、メモリ内の更新インデックスデータがディスクに書き戻されず、インデックスが不正となる可能性がある。
この場合は、myisamchkを実行して修復する事ができる。ただし、データ量の多いテーブルでは実行時間が長くなる。
-
インストール、基本設定、文字コード、仕組み
- MySQLのインストール
- CentOS6でMySQL5.1からMySQL5.7へアップデートする手順、注意点
- CentOS6.10でMySQL5.7からMySQL8へアップデートする手順、注意点
- MySQLサーバーの起動スクリプト(v5.1)
- MySQLのファイルシステムとストレージエンジンの概要
- MySQLのデータ型の概要
- MySQLのサーバー、データベース、テーブル、カラムの文字コード設定とクライアントからのサーバー接続時の文字コード設定
- MySQLの”LOAD DATA INFILE”などでCSVファイル入出力時の文字コード、権限などの注意点
- セキュリティを考慮し、MySQLの匿名ユーザーにパスワードを設定、または削除
- CentOS6にphpMyAdminを導入
- MySQLのbツリーインデックスの概要とマルチカラムインデックス
- MySQLのプレフィックスインデックス、FULLTEXTインデックスの概要
- MySQLのEXPLAINの実行例
- MySQLのインデックス結合の概要
- MySQLのSelect文でインデックスのカラムのみ取得する場合のメリット
- MySQLのORDER BY句でインデックスを使用
- MySQLのPACK_KEYSオプション
- MySQLのインデックス統計更新の概要
- MySQL初期設定確認
- mysqladminコマンドでMySQLサーバーの状態確認
- mysqlshowコマンドで簡単にデータベース、テーブル定義の確認
- awkを使ってmysqlshowの必要な列のみ表示
- MySQLのスロークエリログの概要と表示方法
- show profileでクエリーの内部処理時間を調査
- MySQL Benchmark Suiteによるパフォーマンス測定
- MySQLの診断、監視に利用できる外部ツール
- WordPressデータベースのバックアップとリストア
- Bashスクリプトでmysqldumpバックアップと世代管理
- MySQLの壊れたテーブルのチェック、修復方法
- MySQLのインデックス統計更新の概要
- MySQLのフラグメンテーションの概要と改善方法
- MySQLのスレッド、コネクションに関する設定値、チューニング
- MySQLのセッション単位に設定するバッファーサイズ
- MySQLのクエリキャッシュの設定値、パフォーマンス
- MySQLのテーブルオープン、クローズとテーブルキャッシュのチューニング
- MyISAMキーキャッシュの概要とチューニング
- MySQLのソートに関する設定値とステータス
- MySQL innoDBの性能関連の設定値とステータス確認
- MySQL MyISAMの性能関連の設定値とステータス確認
インデックス
状態確認、調査
バックアップ、リストア、メンテナンス
パフォーマンス、チューニング