рдбреЗрдбрд▓реЙрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛

рдпрд╣ рдбреЗрдбрд▓реЙрдХ рдХреЗ рдХрд╛рд░рдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдмрд╣реБрдд рд╣реА рдЫреЛрдЯреА рдкреЛрд╕реНрдЯ рд╣реИред

InnoDB рд▓реЗрдирджреЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рднрд░реА рд╣реБрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ, рдХрд┐рд╕реА рднреА рд╕рдордп рдлрд╝реЙрд░реНрдо рдХреА рддреНрд░реБрдЯрд┐ рджрд┐рдЦрд╛рдИ рджреЗ рд╕рдХрддреА рд╣реИ

"рд▓реЙрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╕рдордп рдбреЗрдбрд▓реЙрдХ рдкрд╛рдпрд╛ рдЧрдпрд╛; рд▓реЗрдирджреЗрди рдХреЛ рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ ┬╗

рдореБрдЦреНрдп рдмрд╛рдд рдЗрди рднрдпрд╛рдирдХ рд╢рдмреНрджреЛрдВ рдХреЛ рджреЗрдЦрдХрд░ рдШрдмрд░рд╛рдирд╛ рдирд╣реАрдВ рд╣реИ, рдЕрдм рд╣рдо рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдПрдВрдЧреЗ рдХрд┐ рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИред


рд▓реЙрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛

рдмреНрд▓реЙрдХ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдореИрд╕рдХрд▓ рджрд╕реНрддрд╛рд╡реЗрдЬ рдореЗрдВ, рдмрд╣реБрдд рдХрдо рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреН:

2 рдкреНрд░рдХрд╛рд░ рдХреЗ рддрд╛рд▓реЗ рд╣реИрдВ - рд╕рд╛рдЭрд╛ (рдПрд╕) рдФрд░ рдЕрдирдиреНрдп (рдПрдХреНрд╕)ред рдкрд╣рд▓рд╛ рдкреНрд░рдХрд╛рд░ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдЗрд╕ рд▓реЙрдХ рджреНрд╡рд╛рд░рд╛ рдХрд╡рд░ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЛ рдкрдврд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рджреВрд╕рд░рд╛ - рдкрдврд╝рдиреЗ, рд▓рд┐рдЦрдиреЗ, рд╣рдЯрд╛рдиреЗ рдФрд░ (рдЪреБрдкрдЪрд╛рдк рдЪреБрдк рд░рд╣рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ) - рдПрдХ рд╕реНрддрд░ рдПрд╕ рд▓реЙрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ

рдпрд╣ рднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ Transaction # 1 рд▓рд╛рдЗрди r рдкрд░ рдЯрд╛рдЗрдк S рдХрд╛ рд▓реЙрдХ рд╣реИ, рддреЛ рдПрдХ рдФрд░ Transaction # 2 рдЗрд╕ рд▓реЙрдХ рдХреЛ рдХреИрдкреНрдЪрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рд▓рд╛рдЗрди рдкрд░ рдЯрд╛рдЗрдк X рд▓реЙрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рджреВрд╕рд░реЗ рд▓реЗрдирджреЗрди рдХреЛ рдЪреБрдкрдЪрд╛рдк рдПрдХ рддрд░рдл рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдпрджрд┐ Trans # 1 рдкрдВрдХреНрддрд┐ r рдкрд░ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ X рд▓реЙрдХ рдХрд╛ рдорд╛рд▓рд┐рдХ рд╣реИ, рддреЛ Transaction # 2 рди рддреЛ рдПрдХ рд╣реА рд▓реЙрдХ рдХреЛ рдкрдХрдбрд╝ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рди рд╣реА рдПрдХ рдирдпрд╛ рд╕реНрддрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдлрд┐рд░ рд╕реЗ рдЪреБрдкрдЪрд╛рдк рдЪрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рддрдм рддрдХ рдЗрдВрддрдЬрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдЬрдм рддрдХ Transaction # 1 рдЖрд╡рд╢реНрдпрдХ рдкрдВрдХреНрддрд┐ рдХреЛ рдЬрд╛рд░реА рдирд╣реАрдВ рдХрд░ рджреЗрддрд╛ред

рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ рд╣реИ рдЬрд┐рд╕реЗ рд╕реАрдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рддрд╛рд▓реЗ рдПрд╕ рдФрд░ рдПрдХреНрд╕ 2 рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд╛рд▓реЗ рд╣реИрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд▓реЙрдХ рдПрд╕ рд╣реИ, рдпрд╣ рд▓реЙрдХ рдПрдХреНрд╕ рдХрд╛ рдХреБрдЫ рд╕рдмрд╕реЗрдЯ рд╣реИред рдпреЗ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЗрдХрд╛рдЗрдпрд╛рдБ рд╣реИрдВред

рдЧрддрд┐рд░реЛрдз рдкрд░ рд╡рд╛рдкрд╕ред рдХреБрдЫ рдордВрдЪреЛрдВ рдкрд░, рдореИрдВ "рдореИрд╕рдХрд▓ рдореЗрдВ рдЧрддрд┐рд░реЛрдз рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реВрдВ" рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдШреЗрд░реЗ рдореЗрдВ рдЖрдпрд╛ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЙрдкрд▓рдмреНрдз рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рд╕рд╛рдордЧреНрд░реА: рджреЛ рд▓реЗрди-рджреЗрди, рдкреНрд░рдХрд╛рд░ рдПрд╕ рдФрд░ рдПрдХреНрд╕ рдХреЗ рддрд╛рд▓реЗ рдФрд░ рддрд╛рд▓реЗ рдХреЛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд░реЗрдЦрд╛ред

рдПрдХ рд▓рд╛рдЗрди рдкрд░ рдЧрддрд┐рд░реЛрдз рдХреЗ рд▓рд┐рдП рдПрдХ рддреНрд╡рд░рд┐рдд рдиреБрд╕реНрдЦрд╛
1) рд▓реЗрдирджреЗрди # 1 рд▓реЙрдХ рдПрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реИ
2) Transaction # 2 рдЯрд╛рдЗрдк X рдХрд╛ рд▓реЙрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ рдФрд░ ... рддрдм рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдЬрдм Transaction # 1 рд▓реЙрдХ S рдЬрд╛рд░реА рдХрд░рддрд╛ рд╣реИ
3) Transaction # 1 рдкреНрд░рдХрд╛рд░ X рдХрд╛ рд▓реЙрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИ рдФрд░ ... рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ рдЬрдм Transaction # 2 рдХреЛ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд▓реЙрдХ рдорд┐рд▓рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рд╕рд╛рдЭрд╛ рдХрд░рддрд╛ рд╣реИ

рдбрд┐рд╢ рд╕реЗрд╡рд╛ рдХреА

рдПрдХ-рдПрдХ рдлрд┐рд╕рд▓рди рднрд░рд╛ рдХреНрд╖рдг рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЯреНрд░рд╛рдВрдЬреЗрдХреНрд╢рди # 1 рдХреЛ рд▓реЙрдХ X рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИ рдЕрдЧрд░ рдЗрд╕рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╣реА рд▓рд╛рдЗрди рдкрд░ рд▓реЙрдХ S рд╣реИред рдЬреЛ рд╣рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИ
1) рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ X рдФрд░ S рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд╛рд▓реЗ рд╣реИрдВ
2) рджреВрд╕рд░реА рдмрд╛рдд, рдЯрд╛рдЗрдк S рдХрд╛ рдПрдХ рд▓реЙрдХ рдЯрд╛рдЗрдк X рдХрд╛ рд▓реЙрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдЕрдзрд┐рдХрд╛рд░ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рдХреЛрдИ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдирд╣реАрдВ рд╣реИ - рдмрджрд▓реЗ рдореЗрдВ!

рдКрдкрд░ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдХреЛрдб

рд▓реЗрди-рджреЗрди # 1
BEGIN; SELECT * FROM `testlock` WHERE id=1 LOCK IN SHARE MODE; /* GET S LOCK */ SELECT SLEEP(5); SELECT * FROM `testlock` WHERE id=1 FOR UPDATE; /* TRY TO GET X LOCK */ COMMIT; 

рд▓реЗрди-рджреЗрди # 2
 BEGIN; SELECT * FROM `testlock` WHERE id=1 FOR UPDATE; /* TRY TO GET X LOCK - DEADLOCK AND ROLLBACK HERE */ COMMIT; 


рдЗрд╕рд╕реЗ рдХреИрд╕реЗ рдирд┐рдкрдЯреЗрдВ? рдмрдВрджред рдореИрд╕рдХрд▓ рдЖрдкрдХреЛ рдЕрдзрд┐рдХ рдмрд╛рд░ рдкреНрд░рддрд┐рдмрджреНрдз рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рддреНрд░реБрдЯрд┐ рдХреЛрдб рдХреЛ рджреЛрдмрд╛рд░рд╛ рдЬрд╛рдВрдЪрддрд╛ рд╣реИ рдФрд░ рд▓реБрдврд╝рдХрд╛ рд╣реБрдЖ рд▓реЗрди-рджреЗрди рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдмреЗрд╣рддрд░ рд╡рд┐рдХрд▓реНрдк рд╣реИ - рддреБрд░рдВрдд рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХреНрд╕ рд▓реЙрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред рдлрд┐рд░, рд╣рдорд╛рд░реЗ рдиреБрд╕реНрдЦрд╛ рдХреЗ рддреАрд╕рд░реЗ рдЪрд░рдг рдореЗрдВ, рд▓реЗрди-рджреЗрди # 1 рдЕрдкрдирд╛ рдХрд╛рдиреВрдиреА рд▓реЙрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╢рд╛рдВрддрд┐ рд╕реЗ рд╕рдорд╛рдкреНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдЕрдВрдд рдореЗрдВ, рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ SHOW рдЗрдВрдЬрди INNODB STATUS рдХрдорд╛рдВрдб рдЧрддрд┐рд░реЛрдз рдХрд╛ рдХрд╛рд░рдг рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛, рдЬреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕реЗ рддрд╛рд▓реЗ рдкрдХрдбрд╝реЗ рд╣реБрдП рд╣реИрдВ рдФрд░ рдХреМрди рд╕реЗ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ

Source: https://habr.com/ru/post/In160485/


All Articles