LoginSignup
2
2

More than 1 year has passed since last update.

重いクエリを投げるとDockerのDBコンテナが落ちる

Posted at

ローカルに構築しているDBコンテナ(MySQL)が重いクエリを投げると、落ちてしまうので原因を調査しました。
似た事象で困っている方の助けになれば嬉しいです。

事象

約160万件ほどのレコードが入ったテーブルで、PRIMARY KEYを変えたり、パーティション切ろうとすると、途中で失敗してしまう。
エラーは下記。

Communications link failure

ちなみに、wait_timeoutの設定は28800とかで、そんな時間はかかっていません。

原因

メモリ不足でコンテナが落ちたため。
コンテナが落ちたので、MySQLに接続できず、コネクションエラーが起きたという感じです。

解決策

DockerDesktopForMacを使っていたので、管理画面でメモリの割り当て量を2GB→4GBにして解決しました。unnamed.png

調査

docker logs -f {コンテナ名}

DBコンテナのMySQLのログを見ると、特に何も書いておらず、最初はコンテナが落ちたのかすらわからなかったです。
ただ、コンテナに入った状態で、上のエラーが起こると、追い出されていたので、コンテナ側で異常が起きたことはわかっていました。

異常があるとすればリソース周りかなと思い、

docker stats {コンテナ名}

でコンテナのCPU使用率やメモリ使用量を確認したところ、クエリを実行すると、メモリ使用量が上がり、限界値まではいかないものの、6、7割のところで、コンテナが落ちることがわかりました。
unnamed (1).png

最初この6、7割の数値に騙されて、メモリ不足でもないかと思っていましたが、
これは実は他のコンテナも動いているため、実質1コンテナが使えるメモリが限界値の数値でないだけです。
(この仕様、前も似たような事象が起きて知っていたのですが、ド忘れしてました。)

メモリ不足だと気づき、Dockerのメモリの限界値を上げるため、
docker-composeのresourcesオプションの設定しました。
が、なぜか反映されない。

ここで、MacでDocker使っていることに気づき、DockerDesktopForMacの管理画面で、メモリ割り当て量の設定値があり、そちらを変えたら、反映されました。

なお、

docker stats -a

とすると全コンテナのリソースが確認ができるので、リソース系はこっちで見た方がよさそうです。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2