Home Database Mysql Tutorial Mysql concurrency control principle

Mysql concurrency control principle

Aug 19, 2019 am 11:41 AM
Concurrency control

Mysql is a mainstream open source relational database that provides high-performance data storage services. When doing back-end development,

sometimes you will encounter performance bottlenecks. Sometimes these bottlenecks do not come from the application itself, but from the database level.

So mastering some of the underlying principles of Mysql will help us better understand Mysql, perform performance tuning on Mysql, and

thus develop high-performance back-end services.

1. The logical framework of mysql

The logical framework diagram of mysql is as follows:

Mysql concurrency control principle

The top layer handles the client. connected.

Mainly does connection processing, authorization authentication, security, etc. Mysql maintains a thread pool at this layer to handle connections from clients. Mysql can use username and password authentication,

can also use SSL based X.509 certificate authentication.

The second layer consists of three parts: query cache, parser, and optimizer. The parser is used to parse SQL statements, and the optimizer will optimize the parsed statements.

Before parsing the query, the server will first check the query cache. If the corresponding query result can be found in it, the query result will be returned directly without the need for query parsing, optimization, etc. Stored procedures, triggers, views, etc. are all implemented in this layer.

The third layer is the storage engine. The storage engine is responsible for storing data in MySQL, extracting data, starting a transaction, etc. The storage engine communicates with the upper layer through APIs. These APIs shield the differences between different storage engines, making these differences transparent to the upper layer query process. The storage engine will not parse SQL. The most commonly used storage engine for mysql is InnoDB.

2. Concurrency control of mysql

If multiple threads operate data at the same time, it may cause concurrency control problems.

2-1. Read-write lock

If multiple threads only read data, they can actually read it together without affecting each other. At this time, you should use "read Lock", also known as shared lock.

Threads that acquire read locks will not block each other and can read a resource at the same time.

If a thread needs to write data, it should use a "write lock", which also becomes an exclusive lock.

Write locks will block other write locks and read locks until the write operation is completed.

2-2. Lock granularity

First clarify a concept: on a given resource, the less data that needs to be locked, the more concurrency the system can carry. The higher it is.

But locking also consumes resources. If the system spends a lot of time managing locks instead of accessing data,

then the performance of the system may be affected.

So a good "lock strategy" is to find a balance between lock overhead and data security. Mysql supports multiple storage engine architectures,

Each storage engine has You can implement your own lock strategy and lock granularity.

2-3. Table lock and row lock

Table lock, as the name suggests, locks the entire table. Table lock overhead is relatively small. After adding a write lock to the table, all read and write operations on the table by other users will be blocked.

In Mysql, although the storage engine can provide its own locks, Mysql sometimes uses table locks, such as statements such as ALTER TABLE.

Write locks have a higher priority than read locks, so a write lock request may be inserted at the front of the read lock queue.

Row-level locking locks the entire row, which can support concurrent processing to the greatest extent, but the cost of unlocking will also be relatively high. Row-level locks are only implemented at the storage engine layer.

All storage engines implement row-level locks in their own way.

3. MVCC

MVCC is "multi-version concurrency control". It can be considered that MVCC is a variant of row-level locking, but it avoids the need to increase the number of row-level locks in many cases. Lock operation,

so the overhead is lower.

Mainstream relational databases all implement MVCC, but the implementation mechanisms are different. In fact, MVCC does not have a unified standard.

But most of them implement non-blocking read operations, and write operations only lock necessary rows.

MVCC ensures that the data seen in each transaction during execution is consistent.

But different transactions start at different times, so the data seen at the same time may be different for the same table.

The InnoDB engine of Mysql is implemented by saving two hidden columns behind each row of records.

One saves the creation time of the row, and the other saves the expiration time (or deletion time) of the row.

Actually, what is stored is not an actual timestamp, but the 'system version number'.

Every time a transaction is started, the system version number will be incremented. When a transaction starts, the system version number will be used as the version number of the transaction and used to compare with the version number of the queried row.

The following introduces how the version number works in common CRUD operations:

INSERT

Save the current system version as the row version number

DELETE

Save the current system version number to the "delete version" of this row of data.

UPDATE

Insert a new row of records, save the current system version number as the navigation version number, and save the current system version number to the "delete version" of the original row.

SELECT

Find only rows whose version is earlier than the current transaction version. This ensures that the rows read by the transaction either exist before,

or were inserted or modified by the transaction itself. The "delete version" of row

is either undefined or greater than the current transaction version number. This ensures that the rows read by the transaction have not been deleted before the transaction.

MVCC only works under the two isolation levels of

REPEATABLE READ

and READ COMMITTED, and the other two isolation levels cannot work. Because

READ UNCOMMITTED

always reads the latest data, rather than the data rows that match the current transaction version. And SERIALIZABLE will lock all rows read. The above are some issues about concurrency control compiled for you. For more related issues, please visit the relevant tutorials on the PHP Chinese website.

Recommended video tutorial:

https://www.php.cn/course/list/51/type/2.html

The above is the detailed content of Mysql concurrency control principle. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: How To Unlock Everything In MyRise
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Concurrency control and thread safety in Java collection framework Concurrency control and thread safety in Java collection framework Apr 12, 2024 pm 06:21 PM

The Java collection framework manages concurrency through thread-safe collections and concurrency control mechanisms. Thread-safe collections (such as CopyOnWriteArrayList) guarantee data consistency, while non-thread-safe collections (such as ArrayList) require external synchronization. Java provides mechanisms such as locks, atomic operations, ConcurrentHashMap, and CopyOnWriteArrayList to control concurrency, thereby ensuring data integrity and consistency in a multi-threaded environment.

C# development considerations: multi-threaded programming and concurrency control C# development considerations: multi-threaded programming and concurrency control Nov 22, 2023 pm 01:26 PM

In C# development, multi-threaded programming and concurrency control are particularly important in the face of growing data and tasks. This article will introduce some matters that need to be paid attention to in C# development from two aspects: multi-threaded programming and concurrency control. 1. Multi-threaded programming Multi-threaded programming is a technology that uses multi-core resources of the CPU to improve program efficiency. In C# programs, multi-thread programming can be implemented using Thread class, ThreadPool class, Task class and Async/Await. But when doing multi-threaded programming

Integration and expansion of golang function concurrency control and third-party libraries Integration and expansion of golang function concurrency control and third-party libraries Apr 25, 2024 am 09:27 AM

Concurrent programming is implemented in Go through Goroutine and concurrency control tools (such as WaitGroup, Mutex), and third-party libraries (such as sync.Pool, sync.semaphore, queue) can be used to extend its functions. These libraries optimize concurrent operations such as task management, resource access restrictions, and code efficiency improvements. An example of using the queue library to process tasks shows the application of third-party libraries in actual concurrency scenarios.

Concurrency control strategy and performance optimization techniques of http.Transport in Go language Concurrency control strategy and performance optimization techniques of http.Transport in Go language Jul 22, 2023 am 09:25 AM

Concurrency control strategy and performance optimization techniques of http.Transport in Go language In Go language, http.Transport can be used to create and manage HTTP request clients. http.Transport is widely used in Go's standard library and provides many configurable parameters, as well as concurrency control functions. In this article, we will discuss how to use http.Transport's concurrency control strategy to optimize performance and show some working example code. one,

The impact of golang function concurrency control on performance and optimization strategies The impact of golang function concurrency control on performance and optimization strategies Apr 24, 2024 pm 01:18 PM

The impact of concurrency control on GoLang performance: Memory consumption: Goroutines consume additional memory, and a large number of goroutines may cause memory exhaustion. Scheduling overhead: Creating goroutines will generate scheduling overhead, and frequent creation and destruction of goroutines will affect performance. Lock competition: Lock synchronization is required when multiple goroutines access shared resources. Lock competition will lead to performance degradation and extended latency. Optimization strategy: Use goroutines correctly: only create goroutines when necessary. Limit the number of goroutines: use channel or sync.WaitGroup to manage concurrency. Avoid lock contention: use lock-free data structures or minimize lock holding times

How to use distributed locks to control concurrent access in MySQL? How to use distributed locks to control concurrent access in MySQL? Jul 30, 2023 pm 10:04 PM

How to use distributed locks to control concurrent access in MySQL? In database systems, high concurrent access is a common problem, and distributed locks are one of the common solutions. This article will introduce how to use distributed locks in MySQL to control concurrent access and provide corresponding code examples. 1. Principle Distributed locks can be used to protect shared resources to ensure that only one thread can access the resource at the same time. In MySQL, distributed locks can be implemented in the following way: Create a file named lock_tabl

MySQL and Oracle: Comparison of support for multi-version concurrency control and data consistency MySQL and Oracle: Comparison of support for multi-version concurrency control and data consistency Jul 12, 2023 pm 01:10 PM

MySQL and Oracle: Comparison of support for multi-version concurrency control and data consistency Introduction: In today's data-intensive applications, database systems play a core role in realizing data storage and management. MySQL and Oracle are two well-known relational database management systems (RDBMS) that are widely used in enterprise-level applications. In a multi-user environment, ensuring data consistency and concurrency control are important functions of the database system. This article will share the multi-version concurrency control and data between MySQL and Oracle.

MySQL distributed transaction processing and concurrency control project experience analysis MySQL distributed transaction processing and concurrency control project experience analysis Nov 02, 2023 am 09:01 AM

Analysis of MySQL Distributed Transaction Processing and Concurrency Control Project Experience In recent years, with the rapid development of the Internet and the increasing number of users, the requirements for databases have also increased. In large-scale distributed systems, MySQL, as one of the most commonly used relational database management systems, has always played an important role. However, as the data size increases and concurrent access increases, MySQL's performance and scalability face severe challenges. Especially in a distributed environment, how to handle transactions and control concurrency has become an urgent need to solve.

See all articles