انتقل إلى محتوى الدرس

Multi Version Concurrency MVCC القراءة المتسقة عبر MVCC

تعلّم مستويات عزل المعاملات وأقفال الصفوف في MySQL بأسلوب MySQL 8 الحديث مع أمثلة استعلامات SQL وتطبيقات تفاعلية.
1 صفوف تعليمية
MySQL
7 مشاهدة

شرح صفوف ومحتوى الفقرة

الصف 1 شرح توضيحي

كيف يستطيع آلاف الزوار تنفيذ استعلامات SELECT في نفس اللحظة التي تجري فيها معاملات UPDATE دون أن يعطل أحدهما الآخر؟ السر يكمن في تقنية التحكم بالتزامن متعدد النسخ (MVCC)؛ إذ يحتفظ محرك InnoDB داخل كل صف بمعرّف المعاملة التي عدلته (DB_TRX_ID) ومؤشر (DB_ROLL_PTR) يشير إلى النسخ التاريخية السابقة للصف في سجل التراجع:

  • القراءة المتسقة غير الحاجزة: لا تضع جمل SELECT العادية أي أقفال على الصفوف؛ بل تقارن معرّف معاملة الصف بلقطة القراءة (Read View) الخاصة بجلستك.
  • استرجاع النسخة التاريخية من Undo Log: إذا كان الصف قد عُدِّل بواسطة معاملة أحدث من لقطتك، يتتبع المحرك مؤشر التراجع لإرجاع النسخة المتسقة كما كانت وقت بدء قراءتك.
  • START TRANSACTION WITH CONSISTENT SNAPSHOT;: ينشئ لقطة القراءة المتسقة منذ اللحظة الأولى لفتح المعاملة دون انتظار أول جملة SELECT.
  • القارئ لا يعطل الكاتب: بفضل MVCC، تعمل القراءات العادية بأقصى سرعة دون إيقاف عمليات الكتابة المتزامنة.
SQL
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
START TRANSACTION WITH CONSISTENT SNAPSHOT;

SELECT account_id, holder, balance
FROM wallet_ledgers
WHERE account_id IN (101, 102);
COMMIT;