Inno-Tablesでのインポート速度に関する私の前の質問のフォローアップがあります(驚き!)。
シナリオ
私は妥当な時間内にローカルの開発用マシンにいくつかのbig *データベースダンプをインポートしようとしました。KEY
テーブルに接続されている多くのがボトルネックになっていますが、それでもライブシステムにとって重要です。
上記の質問をした後の私のアプローチはKEY ...
、ダンプからステートメントを削除し、キーをインポートして再度追加することでした。
しかし、現在のダンプを編集してローカルにインポートすることがよくあり、これらの面白い "コメント"に遭遇しました(- disable/enable keys
行)。
--
-- Dumping data for table `monster`
--
LOCK TABLES `monster` WRITE;
/*!40000 ALTER TABLE `monster` DISABLE KEYS */;
INSERT … INSERT … INSERT
/*!40000 ALTER TABLE `monster` ENABLE KEYS */;
UNLOCK TABLES;
しかし、実際にはこれらの「コメント」は条件付きのMySql-Statementsです
それは私にとってはニュースでしたが、出力フォームを考えると、mysql --version
すべてが私には問題なく見えます。
mysql Ver 14.14 Distrib 5.5.38, for debian-linux-gnu (x86_64) using readline 6.3
私が想定していること
テーブルはロックされています(問題ありません。開発者の私だけです)。次に、テーブルスキーマで定義されているキーが無効になり、データがインポートされ、キーが有効になります。
そのため、「データ挿入」フェーズでは、キーに時間を費やす必要はなく、すべてのデータが挿入された後で調べます。
これは、KEY 'foo' (foo)'
ダンプからすべての-line を削除し、ダンプをインポートして、ADD KEY 'foo' ...
後でスクリプトを実行する場合と同じ動作だと思います。
私が観察した
ことキーを手動で削除し、キーをインポートして再度追加しDISABLE KEYS
てから、作成した条件ステートメントに依存する方がはるかに高速ですmysqldump
ダンプの手動編集+ mysqlインポート+キーの追加= 15 + 8 + 8≈30分
プレーンmysqlインポート:あきらめました(1日8時間だけ支払います> :))
私は仕方がないのですが、ここで非常に基本的な何かが欠けていると思います(またはデータベースが私を荒らしています)。
mysqldump --innodb-optimize-keys
からの使用percona.com/doc/percona-server/5.5/management/… 長期:mysqldumpの使用を停止し、mydumperまたはxtrabackupを使用します。