MySQLのフラグメンテーションの概要と改善方法について資料を読み、まとめました。
(1)MySQLのフラグメンテーションの概要
1)MyISAM
可変長カラム(VARCHAR、VARBINARY、BLOB、TEXT)を含むテーブルで大量のデータ削除や大幅な変更を行った場合、削除された行がリンクリストで維持され、その後のデータ挿入時に古い行データの位置を再利用してしまう。
2)InnoDB
innodb_file_per_tableオプションが有効(デフォルトは無効)の場合、テーブルのデータとインデックスをシステムテーブルスペースではなく、.ibdファイルにテーブル単位で保存する。
追加・更新・削除操作を継続して行っているとフラグメンテーションが発生する
(2)フラグメンテーションの改善方法
1)OPTIMIZE TABLE文
①OPTIMIZE TABLE文の概要
・テーブルリペア、キーの解析、インデックスツリーのソートを行い、検索スピードが改善される。
②MyISAMの場合
・未利用スペース再利用し、データファイルをデフラグメンテーションできる。
・”myisamchk -r”でも同様に行う事が出来る。
③InnoDBの場合
.ibdファイルを再作成してデフラグメンテーションできる。
2)ALTER TABLE文
・構文
ALTER TABLE テーブル名 ENGINE=エンジン名;
・何も変更を指定せずにALTER TABLEを実行するとMySQLはテーブルをリビルドし、インデックススキャンの速度を改善することが出来る。
3)mysqldumpを実行
テーブルをテキストファイルにダンプ、テーブルをdrop、ダンプファイルからデータをリロードする。 関連記事の目次
-
インストール、基本設定、文字コード、仕組み
- 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の性能関連の設定値とステータス確認
インデックス
状態確認、調査
バックアップ、リストア、メンテナンス
パフォーマンス、チューニング