
ALTER TABLEの処理が全然終わらなくなってしまったので、質問させて下さい。
下記のような状態です。
・テーブルの行数は962362
・topコマンドで見たとき、普段mysqldのCPU使用率が50~100%なのですが、ALTER TABLE後に確認すると2%前後になる
・試した処理はdrop indexとadd column
・mysqlを再起動しようにもstopするのに数分かかる
・nginxを一度stopし、負荷の少ない状態でも同じことを試しましたが結果はかわりませんでした
・検索してみると、key_buffer_sizeが少なすぎることが原因という記事をみかけたので、試しにkey_buffer=512Mとして、設定を読み込み直してから試してみましたが結果はかわりませんでした
このような場合の原因と対策を教えて頂ければ幸いです。
足りていない情報は随時補足させていただきます。
是非回答宜しくお願い致します。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
key_buffer_sizeをチューニングしようとされているので、ストレージエンジンは、MyISAMでしょうか?
InnoDBなら、チューニングするパラメータが異なります。
alter tableでテーブルを変更する場合において、
基本的にデータが多いときは、indexの再作成に時間がかかります。
(使用しているハードウェアのスペックに依存しますが)
CPU使用率ですが、普段が2%前後で、alter table実行時に50~100%になるのでしょうか?
教えていただきたいのが、下記の項目です。
・ハードウェアのスペック
・ストレージエンジン
・テーブルに張っているインデックスの数とインデックスの合計データサイズ(1行あたり)
この回答への補足
ストレージエンジンはmroongaを使っています。
mysqldのCPU使用率ですが、普段が50~100%でalter table実行時に2%前後になってしまいます。
サーバーのスペックは、さくらVPSの8Gのプランになります。
http://vps.sakura.ad.jp/
・テーブルに張っているインデックスの数とインデックスの合計データサイズ(1行あたり)
すみません、これはどの部分を見ればよいでしょうか…
No.2
- 回答日時:
・対象テーブルと同じ構成の変更用テーブルをつくる
・あらたにインデックスをつける
・対象テーブルから変更用テーブルにデータを流し込む
・変更用テーブルをつかってテスト
・問題なければ対象テーブルを削除し、変更用テーブルを対象テーブルにリネーム
という流れでやるとよいでしょう
・対象テーブルから全データを別テーブルコピー
・対象テーブルをトランケート
・インデックスを設定
・別テーブルから対象テーブルにデータを戻し入れる
でもよいかも
この回答への補足
いつもお世話になります。
教えていただいた方法を早速試してみようと思ったのですが、CREATE TABLE自体が処理が終わらないようです…
CREATE TABLEで処理が返ってこない状態で別windowからSHOW TABLESとしてみたところ、CREATE TABLEしたテーブルの名前があったので、処理が返ってこないだけでできているのかと思ったら、そのテーブルに対してINSERTやSELECTをしてみても何も返ってきませんでした。(emptyではなく処理待ち状態)
この補足を書いている現在、DROP TABLE `table_`;の処理待ち中です…
この件に関してはmysqldのCPU使用率は2%まで落ちることはなかったのですが、なにか根本的に直さなければならない部分があるように思ったのですがどうなのでしょうか…
No.1
- 回答日時:
9万6千件・・・多すぎます。
時間がかかるのは当然です。mysqlをストップすると、処理中のものが終わるまでまち、コミットが終わるか、
処理中のものを元に戻し、ロールバックが終了するまで待たされます。
それを待たずに終了してしまったら、myqlが立ち上がらなくなってしまいます。
私、前に大型コンピュータで100万件のUpdateをかけました。
何十分たっても終わらないのでキャンセルしたのです。
そしたらログがパンクし、ログの処理を間違え、何もできなくなってしまったので強制終了したのです。
データベースを再インストールするはめに陥りました。
この回答への補足
回答ありがとうございます。
別サイトでほとんど同じテーブル(直近の数千件の中身が違う程度であとは全く同じ)に対して全く同じクエリを投げたところ15秒程度で終わっていたので今回の件に疑問を感じました。10分以上たっても処理が終わる気配がありません。
また、msqldのCPUusageが2%程度まで落ち込んでしまうというのはどういう現象なのでしょうか。
ALTER TABLEの処理では、元のテーブルの一時的なコピーが作成されるとのことなので、処理を中断しても影響が出ないという記事を見たような記憶があり処理を中断した次第です。
key_bufferの上限を上げるのもそのためなのかな、と思っていました。
mysqlに関しての知識がまだまだ浅いため疑問ばかりがうかびます。
原因と対応策をはっきりすることができればと考えていますので、引き続き回答の受付を続けさせて頂ければと思います。
宜しくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- モニター・ディスプレイ PCゲームで急にFPSが落ちました 2 2022/11/18 00:42
- MySQL my_itemsテーブルのIDにAUTO_INCREMENT を追加ができるかで 1 2023/01/03 09:09
- MySQL 何にかが違うから エラーなんでしょうね! 2 2022/09/18 05:28
- Windows 10 windows10のクリーンインストールが完了出来ない 2 2022/06/04 13:33
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- MySQL SHOW CREATE TABLE posts;これって何ですか? 3 2022/08/28 22:57
- デスクトップパソコン 「自動修復でPCを修復できませんでした」と表示されPCが起動しないのですが対処法はありますか? 5 2022/05/13 09:16
- C言語・C++・C# TCP/IP通信時のサーバーからの受信 2 2022/11/23 09:11
- Excel(エクセル) エクセルのデータ整形について 3 2022/11/12 00:27
- その他(プログラミング・Web制作) mariadbでのエラー 1 2022/11/15 12:31
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「テーブルに座って……」という...
-
オーダーの覚え方について
-
会社の飲み会の幹事になり、座...
-
UTF8のテーブルをODBCドライバ...
-
アクセスの2つのテーブルから...
-
飲み会で、座敷orテーブルどち...
-
下記、問題に対しての解答が以...
-
お金持ちのテーブル
-
データベースの接続に失敗して...
-
統合失調症の利用者の言動が酷...
-
面接のときテーブルが正面に。...
-
ACCESSで3ファイルを結合して、...
-
L2SWはARPテーブルを持っている?
-
アクセスのリンクテーブル一覧...
-
ベッドの上のテーブルってなん...
-
外部キーだけのテーブル(主キ...
-
Tabキーで横移動できません(テ...
-
MySQLの現存するテーブルからcr...
-
【MySQL】1対1でテーブルをあ...
-
Accessで最小値と最大値を一度...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
会社の飲み会の幹事になり、座...
-
「テーブルに座って……」という...
-
下記、問題に対しての解答が以...
-
L2SWはARPテーブルを持っている?
-
外部キーだけのテーブル(主キ...
-
飲み会で、座敷orテーブルどち...
-
テーブルリンク リンク元を知...
-
アクセスのリンクテーブル一覧...
-
男性と2人で飲食店に行きテーブ...
-
複雑なSQL文について
-
お金持ちのテーブル
-
オーダーの覚え方について
-
面接のときテーブルが正面に。...
-
【エクセル】データテーブルの...
-
【MySQL】1対1でテーブルをあ...
-
UTF8のテーブルをODBCドライバ...
-
テーブル(構造)のコピー
-
論理名とコメント構文(?)について
-
取数計算
-
まるいテーブル 円い 丸い 漢字...
おすすめ情報