🥚

データベースがロックされた時の対処法

2023/11/08に公開

張り切ってseedファイルにたくさん画像を入れたためにサーバーが重くなった時の画像のサイズ指定方法については、先日記事にさせていただきました。

サーバーが重くなると、更新や処理に時間がかかるだけでなく、データベースがロックされてしまうことがあります。
その場合、ターミナルに"database is locked"の文字が表示されているはずです。

そんな時、役に立つのがこのコマンドです。

$ ActiveRecord::Base.connection.execute("BEGIN TRANSACTION; END;")

seedファイルを編集していた時に何度もデータベースがロックされてしまい、その度にこのコマンドを打っていました。
メンターさんに聞きながらやったのですが、seedファイルの編集の時は一旦コマンドを打ったあと、

$ rails c

をして、ターミナルのここに

3.1.2 :001 > ActiveRecord::Base.connection.execute("BEGIN TRANSACTION; END;")

のコマンドを入れました。

seedファイル以外でデータベースがロックされてしまった時は、rails cはせずにコマンドを入力したら直りました。

seedファイルのデータベースがロックされたのは画像が多すぎたからなので、何度ロックを解除しても結局またロックされてしまいました。
最終的には画像の数を減らすことで対応しました。
90枚も入れていたのでロックされるのも納得です。なので、60枚に減らしました〜

Discussion