際際滷

際際滷Share a Scribd company logo
MySQLで壟囑したトランザク
ションとロックのおtake2
弌爽謡
? トランザクション
? 電麿崙囮(ロック)
? SQロック
? 丑Qロック
念戻岑R
? トランザクションI尖は、屡岑の匯した彜Bのデ
`タベ`スをS隔するようOされており、犹ヒ
贋のある}方の荷恬が畠て頼阻するか、畠てキャン
セルされることを隠^する。(Wikipediaより)
トランザクション
トランザクションの箭
?Gp富
?侭隔方紗
澓
トランザクションの箭
?Gp富
?侭隔方紗
澓
エラ`
なかったこ
とにしたい!!
トランザクションの箭
?Gp富
?侭隔方紗
澓
セット
畠て郡啌
?commit
畠て圷にす
?rollback
or
トランザクションg廾
?SQL
BEGIN
~
COMMIT 嗽は ROLLBACK
?Rails
ActiveRecord::Base.transaction do
~
end
電麿崙囮(ロック)
歌深 : http://www.slideshare.net/kuromoyo/20140717-37115076
児云撹
DBサ`バ`
アプリケ`ショ
ンサ`バ`
丑QロックとSQロック
SQロック
Rollback
丑Qロック
Id lock_version
1 0
SQロックのg廾
?Railsの栽
usersテ`ブル
lock_versionというカラムを弖紗する
SQロックがm喘されるとき
ActiveRecord::StaleObjectError というExceptionがk伏して
Rollbackする
☆SQロックのg廾は云栖I尖貧で返咾g廾させるもの
SQロックあるrとないrの`い
UPDATE `users` SET `money` = 4,
`updated_at` = '2015-02-25
11:07:28', `lock_version` = 3
WHERE (`users`.`id` = 2 AND
`users`.`lock_version` = 2)
SQロックがないときの
SQL
SQロックがあるときの
SQL
UPDATE `users` SET `money` =
4, `updated_at` = '2015-02-25
11:07:28¨ WHERE (`users`.`id` = 2)
丑Qロックのg廾
?Railsの栽
?SQL
BEGIN
SELECT `users` WHERE (`users`.`id` = 2) FOR UPDATE
´
COMMIT または ROLLBACK
user = User.find_by!(id: 2) (あらかじめインスタンスを函誼しておく)
ActiveRecord::Base.transaction do
user.lock!
end
ロックをかけ梨れると
http://blogos.com/article/36121/
gree ドリランド 並周
◎並
? READ UNCOMMITED
? READ COMMITED
? REPEATABLE READ
? SERIALLIZABLE
トランザクション蛍xレベル
<= Oracle, PostgreSQL, SQL Severのデフォルト
<= MySQLのデフォルト
歌深: http://d.hatena.ne.jp/fat47/20140212/1392171784
和に佩くほど音脅栽なiみzみF鵑k伏しなくなるが、
パフォ`マンスが鯛ちる
Id money
1 400
箭(Rails+MySQL)
User.transaction do
user = User.find_by(id: 1)
user.money += 400
user.save!
end
BEGIN;
SELECT * FROM users WHERE id = 1;
UPDATE users SET users.money = 800 WHERE id = 1;
COMMIT;
usersテ`ブル
SQLをだす
箭リクエスト リクエスト
BEGIN;
SELECT * FROM users WHERE id = 1;
UPDATE users SET users.money = 800
WHERE id = 1;
COMMIT;
BEGIN;
SELECT * FROM users WHERE id = 1;
UPDATE users SET users.money = ? WHERE id =
1;
COMMIT
このとき、?に秘る、呂いつ
でしょう?
ほぼ揖rにリクエストがwんできた。
このときg佩されたSQLは參和の宥り
箭について深賀
? 基えは800でした
? 頭圭のトランザクションで屡にcommitしてあるから、
SELECT * FROM users WHERE id = 1;これで函誼できる、
users.money = 800なはず。だから800 + 400 = 1200。よっ
て?の、1200だ!!
READ UNCOMMITED
READ COMMITED
READ COMMITED
こうなると房ってました
REPEATABLE READ
こうなりました
縮
駅ずtransactionの翌で匯業select猟を恠らせ
てデ`タをとるようにしましょう!!
REPEATABLE READではトランザクション
が_兵されたr泣で歌孚される、詫じ
になる
REPEATABLE READ
SERIALLIZABLE
}方トランザクションのSQLが秘り詞じら
ないように、崙議にトランザクションを
會原けてI尖します。
書まで竃てきたすべての}はk伏しませ
んが、この蛍xレベルはiみ函るすべての
佩にロックをかけます。
ちなみに
Ad

Recommended

Of tutorials v1706
Of tutorials v1706
Etsuji Nomura
?
Of tutorials 5.0
Of tutorials 5.0
Etsuji Nomura
?
Of tutorials v4.1
Of tutorials v4.1
Etsuji Nomura
?
OpenFOAM-v3.0+ tutorials
OpenFOAM-v3.0+ tutorials
Etsuji Nomura
?
Of tutorials v4.0
Of tutorials v4.0
Etsuji Nomura
?
Of tutorials v1712
Of tutorials v1712
Etsuji Nomura
?
Of tutorials v1606+
Of tutorials v1606+
Etsuji Nomura
?
ウォレットセキュリティ`レビュ`
ウォレットセキュリティ`レビュ`
Jonathan Underwood
?
こわくない揖扮g佩崙囮
こわくない揖扮g佩崙囮
Hiraku Nakano
?
トランザクションを皆艶姻庄温鉛庄噛温恢鉛艶にする4つの圭隈
トランザクションを皆艶姻庄温鉛庄噛温恢鉛艶にする4つの圭隈
Kumazaki Hiroki
?
檎禽京秘壇 ゛アプリケ`ション蝕k宀がりやすい禽京蝕kの鯛とし僭゛
檎禽京秘壇 ゛アプリケ`ション蝕k宀がりやすい禽京蝕kの鯛とし僭゛
nisobe58
?
ABC2016Spring Androidアフ?リg廾アンチハ?タ`ン(唆)
ABC2016Spring Androidアフ?リg廾アンチハ?タ`ン(唆)
mokelab
?
ゆとりエンジニア住送氏喝20130706
ゆとりエンジニア住送氏喝20130706
謡 弌爽
?
蕗廈
蕗廈
謡 弌爽
?
ハ?`チャルシ?ャイアンツフ?レセ?ン
ハ?`チャルシ?ャイアンツフ?レセ?ン
謡 弌爽
?
幗廣吭とこ?銭大
幗廣吭とこ?銭大
謡 弌爽
?
Care farm
Care farm
謡 弌爽
?
雨掘4よちよち茶膿氏オリエンテ`ション彿創
雨掘4よちよち茶膿氏オリエンテ`ション彿創
謡 弌爽
?
My sqlて?壟囑したトランサ?クションとロックのお
My sqlて?壟囑したトランサ?クションとロックのお
謡 弌爽
?
3糸秘壇
3糸秘壇
謡 弌爽
?
Ue4て?androidヒ?ルト? ...て?きなかった...
Ue4て?androidヒ?ルト? ...て?きなかった...
謡 弌爽
?

More Related Content

Viewers also liked (13)

こわくない揖扮g佩崙囮
こわくない揖扮g佩崙囮
Hiraku Nakano
?
トランザクションを皆艶姻庄温鉛庄噛温恢鉛艶にする4つの圭隈
トランザクションを皆艶姻庄温鉛庄噛温恢鉛艶にする4つの圭隈
Kumazaki Hiroki
?
檎禽京秘壇 ゛アプリケ`ション蝕k宀がりやすい禽京蝕kの鯛とし僭゛
檎禽京秘壇 ゛アプリケ`ション蝕k宀がりやすい禽京蝕kの鯛とし僭゛
nisobe58
?
ABC2016Spring Androidアフ?リg廾アンチハ?タ`ン(唆)
ABC2016Spring Androidアフ?リg廾アンチハ?タ`ン(唆)
mokelab
?
ゆとりエンジニア住送氏喝20130706
ゆとりエンジニア住送氏喝20130706
謡 弌爽
?
蕗廈
蕗廈
謡 弌爽
?
ハ?`チャルシ?ャイアンツフ?レセ?ン
ハ?`チャルシ?ャイアンツフ?レセ?ン
謡 弌爽
?
幗廣吭とこ?銭大
幗廣吭とこ?銭大
謡 弌爽
?
Care farm
Care farm
謡 弌爽
?
雨掘4よちよち茶膿氏オリエンテ`ション彿創
雨掘4よちよち茶膿氏オリエンテ`ション彿創
謡 弌爽
?
My sqlて?壟囑したトランサ?クションとロックのお
My sqlて?壟囑したトランサ?クションとロックのお
謡 弌爽
?
3糸秘壇
3糸秘壇
謡 弌爽
?
Ue4て?androidヒ?ルト? ...て?きなかった...
Ue4て?androidヒ?ルト? ...て?きなかった...
謡 弌爽
?
こわくない揖扮g佩崙囮
こわくない揖扮g佩崙囮
Hiraku Nakano
?
トランザクションを皆艶姻庄温鉛庄噛温恢鉛艶にする4つの圭隈
トランザクションを皆艶姻庄温鉛庄噛温恢鉛艶にする4つの圭隈
Kumazaki Hiroki
?
檎禽京秘壇 ゛アプリケ`ション蝕k宀がりやすい禽京蝕kの鯛とし僭゛
檎禽京秘壇 ゛アプリケ`ション蝕k宀がりやすい禽京蝕kの鯛とし僭゛
nisobe58
?
ABC2016Spring Androidアフ?リg廾アンチハ?タ`ン(唆)
ABC2016Spring Androidアフ?リg廾アンチハ?タ`ン(唆)
mokelab
?
ゆとりエンジニア住送氏喝20130706
ゆとりエンジニア住送氏喝20130706
謡 弌爽
?
ハ?`チャルシ?ャイアンツフ?レセ?ン
ハ?`チャルシ?ャイアンツフ?レセ?ン
謡 弌爽
?
幗廣吭とこ?銭大
幗廣吭とこ?銭大
謡 弌爽
?
雨掘4よちよち茶膿氏オリエンテ`ション彿創
雨掘4よちよち茶膿氏オリエンテ`ション彿創
謡 弌爽
?
My sqlて?壟囑したトランサ?クションとロックのお
My sqlて?壟囑したトランサ?クションとロックのお
謡 弌爽
?
Ue4て?androidヒ?ルト? ...て?きなかった...
Ue4て?androidヒ?ルト? ...て?きなかった...
謡 弌爽
?

My sqlて?壟囑したトランサ?クションとロックのおtake2 2