MySQL 5.5を使用した大規模な再インデックス操作中にステータスメッセージを取得するにはどうすればよいですか?
質問
MySQLテーブルの内容を完全に置き換えるために使用した大規模なデータ転送を定期的に取得しました。これを行うたびに、テーブルを切り捨て、キーを無効にし、数百万行のデータを追加してから、キーを有効にします。予想どおり、キーを有効にすると、テーブルが再インネックスされている間に長い遅延があります。テーブルにはいくつかのアクティブなインデックスがあり、完了するには約30分かかります。
残念ながら、操作の進行方法についての進捗状況の最新情報を提供するステータスメッセージを取得する方法を理解できません。 2001年からMySQLフォーラムで古いスレッドを見つけました。.
私はそれがもはや事実ではなかったことを望んでいました。 MySQL Server 5.5とMySQL Workbench 5.2を実行しています。おそらく、ワークベンチでできることがありますか?
サイドの質問:現在、私はWindowsプログラムから更新を行い、データファイルをSQL挿入ステートメントに順次解析し、すぐにソケットを介してMySQLクライアントに派遣します。すべての挿入ステートメントをファイルに生成し、代わりにワークベンチからSQLスクリプトを実行してバルクインポートを行う方が速いでしょうか?
- ロシュラー
解決
その進捗を監視する必要があります すべてのMySQLクライアントプログラム以外.
この例では、MyisamテーブルがデータベースMyDataのWorksetsetという名前で、Datadirがデフォルト、/var/lib/mysqlであるとしましょう
サイドノート:Windowsを使用している場合は、このSQLコマンドを実行してDataDirを取得します
SHOW VARIABLES LIKE 'datadir';
テーブルを表す3つのファイルがあります
/var/lib/mysql/mydata/workingset.frm
/var/lib/mysql/mydata/workingset.MYD
/var/lib/mysql/mydata/workingset.MYI
テーブルワーキングセットをロードするための温度テーブルアプローチを試してください
use mydata
DROP TABLE IF EXIST workingsetload;
CREATE TABLE workingsetload LIKE workingset;
ALTER TABLE workingsetload DISABLE KEYS;
Perform 7 million row insert into workingsetload here, preferably LOAD DATA INFILE
ALTER TABLE workingsetload ENABLE KEYS;
ALTER TABLE workingset RENAME workingsetold;
ALTER TABLE workingsetload RENAME workingset;
DROP TABLE workingsetold;
テーブルWorkingSetLoadのロード中に、最初の5文字が「#SQL-」である温度テーブルがあります。 Linux OSで視覚的に監視することができます。
cd /var/lib/mysql/mydata
watch -n 1 "ls -l workingsetload.MY[ID] *sql-*.MY[ID] | awk '{print $5,$9}'"
このようなLinuxでこれをスクリプト化できます。
cd /var/lib/mysql/mydata
ls -l workingsetload.MY[ID] *sql-*.MY[ID] | awk '{print $5,$9}' > /tmp/IndexRebuild.txt
次に、列をそれに応じて解析し、.myDサイズを減算して、myisamテーブルのデータ部分がいつ完成しているかを知ることができます。その後、それに応じて列を解析し、.myiサイズを差し引いてmyisamテーブルのインデックス部分がいつ完成しているかを知ることができます。
Windowsの場合、Perl(Windows用ActivePerl)を使用してこれをスクリプト化するか、DOSバッチループを何度も繰り返してください。
OSに関係なく、「ls -l #sql - *。my [id]」または「存在しない場合#sql-*。my*」が何も戻って戻ってきたら、リロードとインデックス作成は完了します。
試してみる !!!
更新2011-07-20 16:55 EDT
Montyは、Mariadbにこの機能の実装に成功しました。 見てみな !!!