Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Giao dịch song song trong mysql

Tất cả phụ thuộc vào ISOLATION LEVEL bạn đã đặt.

Bạn có thể xem bạn đã đặt cái nào với truy vấn này:

select @@global.tx_isolation, @@session.tx_isolation;

Trước khi giải thích các mức độ cô lập khác nhau, hãy để tôi giải thích những vấn đề mà họ đang cố gắng tránh:

  • Đọc bẩn :Dữ liệu của một giao dịch chưa kết thúc sẽ được đọc bởi một giao dịch khác.

  • Bản cập nhật bị mất :Hai giao dịch sửa đổi song song một mục nhập trong bảng. Khi cả hai giao dịch kết thúc, chỉ một sửa đổi được áp dụng.

  • Đọc không lặp lại :Việc sắp xếp lại các lần đọc dẫn đến các kết quả khác nhau.

  • Đọc ảo :Trong một giao dịch, một giao dịch khác sẽ thêm hoặc xóa các mục nhập trong bảng.

Bây giờ cho các mức cách ly khác nhau.

Đọc không được chấp nhận :
Với mức cô lập này, các thao tác đọc sẽ bỏ qua bất kỳ loại khóa nào, do đó bất kỳ sự cố nào đã đề cập ở trên đều có thể xảy ra.

Đã cam kết đọc :
Mức cách ly này đặt khóa ghi cho toàn bộ giao dịch trên các đối tượng cần được sửa đổi. Khóa đọc chỉ được đặt khi đọc dữ liệu. Do đó, đọc không lặp lại và đọc ảo có thể xảy ra.

Đọc lặp lại :
Với mức cô lập này, đảm bảo rằng các thao tác đọc sắp xếp lại luôn mang lại cùng một kết quả khi các tham số giống nhau. Khóa được thiết lập cho các hoạt động đọc và ghi trong tổng thời gian của giao dịch. Do đó, chỉ những lần đọc ảo mới có thể xảy ra.

Có thể nối tiếp hóa :
Mức cô lập cao nhất đảm bảo rằng kết quả của các giao dịch chạy song song giống như thể các giao dịch sẽ chạy lần lượt. Hầu hết các cơ sở dữ liệu không thực sự chạy các giao dịch đó lần lượt, nó sẽ làm giảm hiệu suất quá nhiều. Do đó, nó có thể xảy ra, rằng một giao dịch bị hủy bỏ. Ví dụ, MySQL nhận ra điều này với MVCC (Điều khiển đồng thời nhiều phiên bản). Google nó, nếu bạn muốn biết thêm. Quá nhiều cho câu trả lời này.

Tất cả trong tất cả bảng này cũng giải thích điều đó:

                 | Lost updates | Dirty Read | Non-Repeatable Read | Phantom Read
---------------------------------------------------------------------------------
Read Uncommitted | possible     | possible   | possible            | possible
Read Committed   | impossible   | impossible | possible            | possible
Repeatable Read  | impossible   | impossible | impossible          | possible
Serializable     | impossible   | impossible | impossible          | impossible

Tất cả những điều này chỉ là lý thuyết cho các hệ quản trị cơ sở dữ liệu quan hệ. Tuy nhiên, vì MySQL sử dụng MVCC (điều khiển đồng thời nhiều phiên bản), lần đọc ảo không xảy ra khi sử dụng InnoDB và mức cách ly đọc lặp lại .
Từ thủ công :




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Loại dữ liệu MySQL nào để sử dụng để lưu trữ các giá trị boolean

  2. Truy vấn SQL trả về false trong PHP

  3. Xây dựng lại MySQL 8.0 Replication Slave bằng cách sử dụng một plugin nhân bản

  4. Cải thiện truy vấn bằng cách sử dụng nhiều liên kết bên trong tới wp_postmeta, một bảng khóa / giá trị

  5. Làm cách nào để so sánh dữ liệu đầu vào với dữ liệu mysql với php / sql?