2017-10-18 5 views
1

私は2500万行を超えるmysqlテーブルに列を追加しようとしています。私はSQLコマンドを実行していますMYSQLテーブルに新しい列を追加しようとしたときに接続が失われました

ALTER TABLE `table_name` ADD COLUMN `column_name` varchar(128) NULL DEFAULT NULL; 

これはmysqlコマンドラインアプリケーションを使用して実行されています。

私は、それは時間を要し、その後、私はエラーに取得し、これを実行しようとするたびに

ERROR 2013(HY000):クエリのデータベースが実行されている

中のMySQLサーバーへの失われた接続AWS上のRDSインスタンスと、監視統計をチェックして、メモリまたはディスクスペースの枯渇を防ぎます。

この列をテーブルに追加できますか?

答えて

0

メモリ使用量、またはおそらくディスク使用量を確認してください(処理中に十分な空き容量がありますか?)。表を変更するには、大量のメモリーまたは表のディスク上のコピーが必要になることがあります。変更アルゴリズムfrom INPLACE to COPYの変更は、特定のケースではさらに高速になる可能性があります。

innodb_online_alter_log_max_sizeという制限もありますが、その場合はサーバー全体ではなく、クエリのみが失敗します。ただし、操作自体ではなく、ROLLBACKによってクラッシュが発生している可能性があります。

最後に、アプリケーション構成やホスティングサーバーの中にはクエリ/ http要求がキャンセルされるものがありますが、テストのためにコマンドラインクライアントで同じクエリを実行することをお勧めします。

+0

クレジット:https://dba.stackexchange.com/a/91476 – AgeDeO

+0

あなたのスピーディーな対応に感謝しますが、作成された点のいくつかはすでに質問でカバーされています。 'あなたのメモリ使用量やディスク使用量を確認してください':データベースがRDSで実行されているという質問に記載されているように、監視では十分なメモリとディスク容量があることがわかります。 '私はコマンドラインクライアントで同じクエリを実行することをお勧めします:'という質問に記載されているとおりです。最後に言いましたのは、アルゴリズムをINPLACEからCOPYに変更することでした。しかし、私はそれが私の主キーを変更し、データの整合性の問題につながる可能性があると聞いたので、私はこれを行うことについて幸せではない。 – SamBremner

関連する問題