当前位置:网站首页>MySQL 45 lecture learning notes (VII) line lock
MySQL 45 lecture learning notes (VII) line lock
2022-07-04 06:38:00 【Tom Kong】
One . What is a row lock
- MySQL The row lock is implemented by each engine in the engine layer . But not all engines support row locks . such as MyISAM The engine doesn't support row locks . Not supporting row locks means that concurrency control can only use table locks .
- For tables with this engine . Only one update can be executed at any time on the same table , This will affect the business concurrency
- InnoDB It supports row locking . This is also MyISAM By InnoDB One of the important reasons for substitution .
Improve business concurrency by reducing lock conflicts
Row locks are locks for row records in the data table .
Two . Two stage lock
For example, affairs. A Updated a line , It's time for business B Also update the same line , Then we have to wait for business A You can't update until the operation of .

- Business B Of update The statement will be blocked , Until transaction A perform commit after , Business B In order to proceed .
- stay InnoDB Transaction , Row lock will be added when necessary , however Will not be released immediately , It is Wait for the transaction to end before releasing , This is it. Two stage lock protocol .
If you need to lock more than one hang in your affairs , The most likely cause of lock conflict , The locks that are most likely to affect concurrent reads should be put back as far as possible .
3、 ... and . Use scenarios
example :
Suppose you implement a movie ticket online trading business customer A In the cinema B Buying movie tickets requires the following operations :
- From customers A The movie ticket price is deducted from the account balance
- To the cinema B Your account balance increases the ticket price of this movie
- Keep a transaction log
analysis
- To close the deal , We need to update Two records , also insert A record .
- Of course, in order to ensure the atomicity of the transaction , We need to put these three operations in one transaction , How can we arrange the order of these three statements in a transaction ?
solve
- According to the two-stage lock protocol , No matter how you arrange the sentence order , All row locks required for operations are released only when the transaction is committed .
- therefore , If you put the sentence 2 Arrange until the end , If according to 3,1,2 The order of , Then the lock time of the cinema account balance line is the least , This greatly reduces the lock waiting between transactions , Increased concurrency .
Four . problem 2
If this theater is active , You can pre sell all movie tickets for a year at a low price , And it's only for one day . So when the activity time starts , Yours Mysql I hung up. , You log on to the server and have a look ,CPU Consumption is close to 100
But the whole database It cannot be executed every second 100 One transaction , What's the reason for this ?
Deadlock detection is costly CPU resources
5、 ... and . Deadlock and deadlock detection
When circular resources appear in different threads in the concurrent system , The threads involved are waiting for other threads to release resources , It will cause these threads to enter the state of infinite waiting , be called Deadlock .

- Business A Waiting for business B Release id=2 The row lock , And the business B Waiting for business A Release id=1 The row lock . Business A And transaction B Waiting for each other's resources to be released , Is to enter the deadlock state , When there's a deadlock , There are two strategies ;
- Another strategy is , Initiate deadlock detection , After deadlock is found , Actively roll back a transaction in the deadlock chain , Allow other business to continue . The parameter innodb_deadlock_detect Set to on, Indicates that the logic is turned on .
6、 ... and . Disadvantages of timeout release strategy
- stay InnoDB in ,innoDB_lock_wait_timeout The default value of is 50s, That means if you use the first strategy , When there's a deadlock , The first one is to lock the thread 50s Will time out
- Then it's possible for other threads to continue , For online services , This waiting time is often unacceptable ,
- But we can't set it to a small value , Such as 1s. When a deadlock occurs , It can really be solved soon , But if it's not deadlock , But simply lock and wait , If the timeout setting is too short , There will be many accidental injuries .
7、 ... and . Active deadlock detection
- and innoDB_deadlock_detect The default value of is on. Active deadlock detection when deadlock occurs , It can be found and processed quickly , But he has an extra burden .
- Whenever a transaction is locked , It depends on whether the thread he depends on is locked by others , So circular , Finally, judge whether there is a cycle waiting , That's deadlock .
Scene question :
All transactions need to update the scenario of the same row
- Every new blocked thread , We should judge whether it will lead to deadlock due to our participation , This is a time complexity of O(n) The operation of
- Suppose there is 1000 All concurrent threads update the same row at the same time , So the deadlock detection operation is 100w, Although the final test result is no deadlock , But it will consume a lot during this period CPU resources . So you'll see CPU High utilization ,
- But not a few transactions can be executed every second
Deadlock detection is costly CPU resources
Solution :
Temporarily turn off deadlock detection
- This operation itself carries certain risks , Therefore, deadlock is generally not regarded as a serious error in business design , After all, there is a deadlock , Just roll back , This is business intact
- Turning off deadlock detection means that there may be a lot of timeouts , It's business that's damaging .
The idea is to control concurrent reading
- For example, there is only one line at a time 10 Threads updating , So deadlock The cost of testing is very low , There will be no such problem. A direct idea is , Do concurrency control on the client side
边栏推荐
- C實現貪吃蛇小遊戲
- How to avoid JVM memory leakage?
- Analysis of tars source code 5
- Considerations for testing a website
- C language - Blue Bridge Cup - Snake filling
- Mysql 45讲学习笔记(十二)MySQL会“抖”一下
- 云原生——上云必读之SSH篇(常用于远程登录云服务器)
- Sleep quality today 78 points
- JSON web token -- comparison between JWT and traditional session login authentication
- P26-P34 third_ template
猜你喜欢

C language exercises (recursion)

Arcpy uses the updatelayer function to change the symbol system of the layer

InputStream/OutputStream(文件的输入输出)

Learning multi-level structural information for small organ segmentation

Functions in C language (detailed explanation)

GoogleChromePortable 谷歌chrome浏览器便携版官网下载方式

Bicolor case

Common usage of time library

Sleep quality today 78 points

Mysql 45讲学习笔记(七)行锁
随机推荐
uniapp 自定义环境变量
2022 where to find enterprise e-mail and which is the security of enterprise e-mail system?
Redis面试题集
How does the recv of TCP socket receive messages of specified length?
C language exercises (recursion)
1、 Relevant theories and tools of network security penetration testing
QT get random color value and set label background color code
Json Web token - jwt vs. Traditional session login Authentication
Stc8h development (XII): I2C drive AT24C08, at24c32 series EEPROM storage
Inputstream/outputstream (input and output of file)
ADC voltage calculation of STM32 single chip microcomputer
Sort list tool class, which can sort strings
2022.7.3-----leetcode. five hundred and fifty-six
如何实现视频平台会员多账号登录
C # symmetric encryption (AES encryption) ciphertext results generated each time, different ideas, code sharing
tars源码分析之8
Mysql 45讲学习笔记(十二)MySQL会“抖”一下
Summary of leetcode BFS question brushing
InputStream/OutputStream(文件的输入输出)
Stc8h development (XII): I2C drive AT24C08, at24c32 series EEPROM storage