2017-07-05 7 views
-1

私はInnoDBエンジンにあるテーブルを持っています.25000行のテーブルがあります。MySQL(Percona 5.7)InnoDBエンジンを搭載した遅いALTERテーブル...?

mysql> ALTER TABLE `quote_followups_istvan` 
     ADD `customer_ip2` VARCHAR(20) NOT NULL DEFAULT '' AFTER `comment`; 

クエリOK、0行影響を受けた(10分52.82秒) レコード:0重複:0警告:0

しかし、私は、私はシンプルなALTERを行うと、それはほとんど10分間走りますそれはMyISAMテーブルにエンジンの変更、私はこれを取得:

mysql> alter table quote_followups_istvan engine="MyISAM"; 

クエリOK、影響を受けた25053行(0.56秒) レコード:25053の重複:0警告:0

私はここで行方不明0

だから、10分0.37s対....

何AMD:

影響を受けるクエリOK、25053行(0.37秒) レコード:25053の重複:0警告?

+0

編集: 特定のALTERクエリには(明らかに)時間がかかっていましたが、なぜその理由がわかりません。たとえば、エンジンの変更は高速だったので、それは問題であるALTER自体ではありません。 –

+1

オレンジ色の食事には90秒かかります。リンゴをつけることは30秒かかる。りんごを食べるのに12秒かかります。だから、次回はオレンジを食べたいときは、リンゴを買って食べるだけです。それは速いからです。あなたの問題に戻る:MyISAMはInnoDBとは違った働きをします。いくつかのものはより速いです。同じ結果(InnoDBテーブルに追加のカラムがある)になってしまった場合は、テーブルをInnoDBに戻して、それをあなたの時間に含めなければなりません。実際の理由はおそらく、何かがあなたのテーブルをロックしているからです。なぜなら、25k行のテーブルは変更する方が速いはずだからです。 – Solarflare

+0

テーブルはロックされていません。テストテーブルで、どのプロセスでも使用されていません。 それ以外はInnoDBに戻ってその時間をカウントするのはなぜなかなか分かりません。私の目標は実際InnoDbで高速に動作するクエリを作成することです。テーブルをMyISAMに変換したのは、私が実験していたからです。そのエンジンでそれを保つ予定はありません。 –

答えて

0

私自身の質問に答えさせてください。上の読書、この1

optimize mySql for faster alter table add column

と、より多くのような記事が、実際にこれはInnoDBテーブルで「問題」であると言う、といくつかの代替的なアプローチを示唆しています。

私はこれが正常な動作であると結論付けることができます。

+1

はい、正常です - 25分の行では10分が少し高いですが、異常に大きな行があり、索引付けが珍しく、サーバーが遅くなることがあります。本番データベースにスキーマを変更する場合は、 https://www.percona.com/doc/percona-toolkit/LATEST/pt-online-schema-change.htmlのようなものは、ダウンタイムの防止に役立ちます。 – ceejayoz

+0

データベースが稼働中(テーブル自体はありません)、サーバは64Gb RAMのSkylake i7です。この時点でMyIPAMのために大規模なinnodbキャッシュプールといくつかのクエリキャッシュが有効になっています –

関連する問題