MySQLのインデックス統計更新時の概要についてまとめました。
※目次をクリックすると目次の下部にコンテンツが表示されます。
MySQLのbオプティマイザーとインデックス統計の概要
・オプティマイザはマッチする行を見積もるのにインデックス統計を使用する。
・MySQLのオプティマイザはコストベースで、メインのコストメトリックは、そのクエリーがアクセスするデータの数。
・インデックス統計が生成されていなかったり古くなっているとオプティマイザが最適なプランを検索できなくなる。
・ANALYZE TABLE文を手動で実行する事によってインデックス統計を生成できる。
・show index文の”Cardinality”で現状の見積り値を確認できる。
※INFORMATION_SCHEMA.STATISTICSテーブルでも確認できる。
・MySQLのオプティマイザはコストベースで、メインのコストメトリックは、そのクエリーがアクセスするデータの数。
・インデックス統計が生成されていなかったり古くなっているとオプティマイザが最適なプランを検索できなくなる。
・ANALYZE TABLE文を手動で実行する事によってインデックス統計を生成できる。
・show index文の”Cardinality”で現状の見積り値を確認できる。
※INFORMATION_SCHEMA.STATISTICSテーブルでも確認できる。
各ストレージエンジンのインデックス統計の概要
1)MyISAM
・インデックス統計をディスク上に保存。
・ANALYZE TABLE文でフルインデックススキャンを実行。実行中はテーブル全体がロックされる。
2)InnnoDB
・ランダムにある一定数のページをサンプリングして見積り、メモリー内に保存。
・サンプルするページ数はデフォルトは8で、innodb_stats_sample_pagesシステム変数で変更できる。
●インデックス統計が計算されるタイミング
・最初にテーブルをオープンしたとき
・ANALYZE TABLE文を実行したとき
・テーブルサイズが大幅に変更された場合
・INFORMATION_SCHEMAテーブルに対するクエリ、SHOW TABLE STATUS、SHOW INDEX実行時
・MySQLコマンドラインクライアントでauto-rehashが有効になっている場合(デフォルトは有効)
●インデックス統計計算時の注意点
・データが大量にある場合やI/Oが遅い場合はパフォーマンスに影響を与える。
ロックが頻繁に発生したりサーバーの負荷が増大したりする。スタートアップ時間が遅くなることもある。
innodb_stats_on_metadataをオフにして無効にする事が出来る。
・MySQL5.6では、innodb_analyze_is_persistentオプションを設定して、MySQLリスタート後もインデックス統計を維持できるようになった。
MySQLをリスタートしてもインデックス統計を再計算せずにそのまま維持され、起動時間を短くできる。
・自動でインデックス統計を再計算させない場合は、定期的に手動でANALYZE TABLE文を実行する。
・インデックス統計をディスク上に保存。
・ANALYZE TABLE文でフルインデックススキャンを実行。実行中はテーブル全体がロックされる。
2)InnnoDB
・ランダムにある一定数のページをサンプリングして見積り、メモリー内に保存。
・サンプルするページ数はデフォルトは8で、innodb_stats_sample_pagesシステム変数で変更できる。
●インデックス統計が計算されるタイミング
・最初にテーブルをオープンしたとき
・ANALYZE TABLE文を実行したとき
・テーブルサイズが大幅に変更された場合
・INFORMATION_SCHEMAテーブルに対するクエリ、SHOW TABLE STATUS、SHOW INDEX実行時
・MySQLコマンドラインクライアントでauto-rehashが有効になっている場合(デフォルトは有効)
●インデックス統計計算時の注意点
・データが大量にある場合やI/Oが遅い場合はパフォーマンスに影響を与える。
ロックが頻繁に発生したりサーバーの負荷が増大したりする。スタートアップ時間が遅くなることもある。
innodb_stats_on_metadataをオフにして無効にする事が出来る。
・MySQL5.6では、innodb_analyze_is_persistentオプションを設定して、MySQLリスタート後もインデックス統計を維持できるようになった。
MySQLをリスタートしてもインデックス統計を再計算せずにそのまま維持され、起動時間を短くできる。
・自動でインデックス統計を再計算させない場合は、定期的に手動でANALYZE TABLE文を実行する。
-
インストール、基本設定、文字コード、仕組み
- 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の性能関連の設定値とステータス確認
インデックス
状態確認、調査
バックアップ、リストア、メンテナンス
パフォーマンス、チューニング