0

私の問題は、ライブ データベースに新しい列を追加すると、MySQL で「接続が多すぎます」というエラーが発生することです。

データベースには 100 万件のレコードがあるため、これを追加するには時間がかかります。

  • テーブルがロックされる理由は何ですか?
  • テーブルを動かし続けるために何をすべきか?

100 万レコードのテーブル (InnoDB) で実行するクエリ

ALTER TABLE table_name 
ADD COLUMN new_table_column INT(11) NULL 
DEFAULT NULL ;

ありがとう!

4

2 に答える 2

0

接続を確認するために実行show processlist;してみてください。 http://dev.mysql.com/doc/refman/5.1/en/show-processlist.html

また、mysql の構成、特に max_connections の設定を確認することも検討します。その設定を変更するには、mysql サーバーを再起動する必要があります。 http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html

InnoDB にはテーブル ロックが必要ですが、それについてできることはあまりありません。

これを行う方法に関するいくつかのアイデアについては、これらをご覧ください。

InnoDB の ALTER TABLE 用に MySQL を最適化する

テーブルをロックせずにALTER TABLE?

于 2012-11-06T18:26:57.440 に答える
0

mysql は列の追加が遅いことで有名です。

私の知る限り、すべてのデータベースは、列を追加している間、テーブルをロックします。これは、ディスク上のレイアウトが変更され、大量の I/O が必要になるためです。

多くの場合、(特に mysql の場合) 非常に遅いため、本番環境で行われる方法は、余分な列を含む新しいテーブルを作成し、データをコピーし、テーブルの名前を変更して、新しいテーブルの使用を開始することです。もちろん、これを行っている間は書き込みアクセスを停止しますが、作業を完了する方がはるかに高速です。

于 2012-11-06T18:34:54.973 に答える