LoginSignup
2
2

More than 5 years have passed since last update.

Railsのmigrationにロックが掛かっているのか調べた(Mysqlの場合)

Posted at

テーブルロックとかかけているのかな?と思って追ってみた。

処理の様子

migrationの処理の起点

ロックがサポートされていたらロックをかけるようす。

Advisory Lockという概念が出てきた。「助言ロック」という概念らしい。

MySQLアダプタのsupports_advisory_locks?
MySQLはその仕組みがある、とされている。

with_advisory_lockの実装

ロックを取得して、解放するようになっている。

generate_migrator_advisory_lock_id
ロックのキーはcurrent_databaseから生成されている。

MySQLのget_advisory_lock, release_advisory_lock

MySQLの場合はGET_LOCK RELEASE_LOCKで為されている。
これらは、引数の文字列の一致でロックを同定するようだ via: MySQLのロック機能

結論

  • テーブルロックではない
  • MySQLのDatabase単位で、ロックを取得するようになっているが、あくまでRailsのmigration同士がぶつからないようにするため
  • 他の手段(mysqlコマンド直とか)で触ることはできる

ちなみに

postgresqlも、supports_advisory_lockstrueで、実装としてpg_try_advisory_lockを使うようだ。

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