既存のテーブルに新しいカラムを追加するSQL文をphpmyadmin上から
実行すると、1,2分ほどしてから以下のメッセージを出力してサービスが停止します。
「SHOW TABLE STATUS LIKE 'テーブルA'
#2003-サーバが応答しません。」
OS:windows2003
MySQL:4.0.26
全てのテーブルについてエラーになるわけではなく、一部のテーブルのみ現象が発生します。
現象がおきているのをテーブルA,テーブルBとすると、
テーブルAはレコード件数は90万件弱ですが、カラム数が200以上あります。
テーブルBはレコード件数が700万件近くあります。
カラムの追加は3つあり、一つのSQL文で3つを追加しようとしています。
全てのカラムは既存の最後に追加します。
データ型は全てINT(20)です。
以下はエラーログです。
*** Windows2003 アプリログ ************************************************
エラー発生アプリケーション mysqld-nt.exe、
バージョン 0.0.0.0、
エラー発生モジュール mysqld-nt.exe、
バージョン 0.0.0.0、
エラー発生アドレス 0x00173539
どなたかお分かりになる方、おられましたらご教授お願いします。
この質問はMySQLメーリングリストにも投稿しています。
どちらかで回答がもらえれば、回答を掲載します。
No.2ベストアンサー
- 回答日時:
#1回答者です。
MySQLのこの辺の内部処理には詳しくないのですが、他のRDBMSでも、「同期点を設定(commit等)しない多量の更新が発生した場合、RDBMS側でチェックポイントの取得ができなくて異常終了してしまう」ことがあります。
今回のポイントは、
「MySQLでは、ALTER TABLEの背景で、表のデータを変更前の表から、変更後の表へ全件コピーしている」
ということだと思います。
これはつまり、
「MySQLでは、同期点を設定しないで、多量データの更新を行なった場合、(チェックポイントの設定ができないといった理由で)やはり異常終了することがあるのでは?」
ということと、
「質問者さんの環境ではその二つの表が特にデータが多く、質問者さんの環境上、耐えられない状況だったのではないか?」
ということです。
この辺の異常終了の要因の切り分けについて、私自身は他のRDBMSには詳しいのですが、MySQLについては確証を持てないので、こういう書き方になりました。
参考URL:http://dev.mysql.com/doc/refman/4.1/ja/innodb-ch …
アドバイスありがとうございます。
自分でいろいろ調べておりまして、MySQLのログを確認できまして原因がわかりました。
ログにはinnodb_buffer_pool_sizeが8Mしかないので、設定を見直して下さいという記述がありました。
解決策として、innodb_buffer_pool_sizeの設定値を増やして、最初はALTER文にて1つのテーブルに同時に3つのカラムを追加しようとしていたのですが、これを1つずつ追加してやることで正常に処理が完了しました。
どうもありがとうございました。
No.1
- 回答日時:
MySQLのALTER TABLEは、内部処理として
(1)変更前の表定義+変更内容から、変更後の表を定義
(2)変更前の表から、変更後の表に、行を全件コピー&変更反映
(3)変更前の表を削除
という、ある意味で”恐ろしいこと"(全件、insert ~ selectする)を行なっていることを知った上での質問ですか?
すいません。
質問時点では知りませんでした。
いろいろと調べていくうちにALTER TABLEの動作はなんとなく分かりました。
chukenkenkouさんの文面から判断すると、できないということでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- MySQL my_itemsテーブルのIDにAUTO_INCREMENT を追加ができるかで 1 2023/01/03 09:09
- Oracle SQL update方法 2 2022/06/22 14:07
- Oracle sql(oracle)で質問です。 テーブルAのカラム名、日付(yyyymmdd)の値を テーブルB 2 2023/01/06 10:31
- MySQL 共通点はあります。何が違うのでしょうか? 1 2023/01/27 05:22
- Oracle SQLの書き方について 1 2023/04/13 09:54
- PostgreSQL 列が存在しないと言われる 2 2023/02/10 18:33
- Access(アクセス) access,vbaでフォルダ内のファイルをテーブルにインポート、ファイル名もフィールドに追加したい 1 2022/08/31 11:11
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【SQL】他テーブルに含まれる値...
-
結合したテーブルをSUMしたい
-
既存データをINSERT文にして出...
-
ACCESS クエリーでソートの不具合
-
ExcelのMatch関数のようなもの...
-
Access特定のテーブルを編集不...
-
SQLでの複数列が重複してる行の...
-
データ無し時は空白行にしたい...
-
ACCESS2000でのテー...
-
SQLサーバに対するSQL文で抽出...
-
下記の問合せを行うクエリを、 ...
-
メインデータと最新サブデータ...
-
効率のよい方法を教えてくださ...
-
適切な管理方法のアドバイスを...
-
ExcelのVLOOKUP関数の動作をMyS...
-
パススルークエリ&ACCESSテーブ...
-
Accessの構成をコピーしたい
-
同一テーブル内での比較(最新...
-
phpMyAdminでのデータ検索方法
-
SQLのテーブルにないデータの出力
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【SQL】他テーブルに含まれる値...
-
テーブル名が可変の場合のクエ...
-
既存データをINSERT文にして出...
-
結合したテーブルをSUMしたい
-
SQLで、Join句で結合したテ...
-
2つのテーブルをLIKE演算子のよ...
-
ACCESSのVBAにてExcelに行...
-
データ無し時は空白行にしたい...
-
下記の問合せを行うクエリを、 ...
-
Accessの構成をコピーしたい
-
ExcelのVLOOKUP関数の動作をMyS...
-
ADO+ODBCでテーブルに接続する...
-
SQLサーバに対するSQL文で抽出...
-
ExcelのMatch関数のようなもの...
-
ACCESS クエリーでソートの不具合
-
PRIMARY KEYのコピー
-
同一テーブル内での比較(最新...
-
SQLです!!教えてください。あ...
-
改行を含んだデータのインポート
-
SQLです!!教えてください。あ...
おすすめ情報