Multi-version concurrency control (MVCC) in DBMS Theory - Time & Space Complexity
We want to understand how the time cost of managing multiple versions of data grows as more transactions happen.
How does MVCC handle many reads and writes efficiently as data changes?
Analyze the time complexity of the following MVCC operations.
-- When a transaction reads data:
SELECT * FROM table WHERE id = X AND version <= current_version ORDER BY version DESC LIMIT 1;
-- When a transaction writes data:
INSERT INTO table (id, data, version) VALUES (X, new_data, new_version);
-- Cleanup old versions:
DELETE FROM table WHERE version < oldest_active_version;
This snippet shows how MVCC reads the latest visible version, writes a new version, and cleans old versions.
Look at what repeats as data and transactions grow.
- Primary operation: Searching for the correct version of a row during reads.
- How many times: Once per read, but depends on how many versions exist for that row.
As more versions accumulate, finding the right version can take longer if not indexed well.
| Input Size (versions per row) | Approx. Operations |
|---|---|
| 10 | About 10 checks to find the right version |
| 100 | About 100 checks if no index |
| 1000 | About 1000 checks if no index |
Pattern observation: Without indexing, the search grows linearly with the number of versions per row.
Time Complexity: O(n)
This means the time to find the correct version grows linearly with the number of versions stored for a row.
[X] Wrong: "MVCC always gives constant time reads regardless of versions."
[OK] Correct: If many versions exist and no indexing is used, the system may scan many versions, making reads slower.
Understanding how MVCC scales helps you explain database performance and concurrency control clearly, a valuable skill in many roles.
"What if we added an index on the version column? How would the time complexity change?"
Practice
Solution
Step 1: Understand MVCC's role in concurrency
MVCC allows multiple users to work on the database at the same time without waiting for locks.Step 2: Compare options with MVCC purpose
Only To allow multiple users to access data simultaneously without blocking correctly states that MVCC avoids blocking by allowing simultaneous access.Final Answer:
To allow multiple users to access data simultaneously without blocking -> Option DQuick Check:
MVCC = simultaneous access without blocking [OK]
- Thinking MVCC locks the whole database
- Believing MVCC deletes old data immediately
- Assuming MVCC blocks reads during writes
Solution
Step 1: Recall MVCC version handling
MVCC keeps multiple versions of data so each transaction sees a consistent snapshot.Step 2: Match options to MVCC behavior
It creates a new version of data for each transaction without overwriting existing versions correctly states that MVCC creates new versions without overwriting old ones immediately.Final Answer:
It creates a new version of data for each transaction without overwriting existing versions -> Option AQuick Check:
MVCC = new versions per transaction [OK]
- Confusing MVCC with locking mechanisms
- Thinking MVCC deletes old versions right away
- Assuming MVCC merges versions after transactions
Solution
Step 1: Understand MVCC snapshot isolation
Each transaction sees a consistent snapshot of data as it was when the transaction started.Step 2: Apply to T1 and T2 scenario
T1 started before T2's update, so T1 sees version V1, not the newer V2.Final Answer:
Version V1, the snapshot at the start of T1 -> Option BQuick Check:
MVCC snapshot = version at transaction start [OK]
- Assuming T1 sees latest version immediately
- Thinking transactions see multiple versions at once
- Believing uncommitted changes are visible
Solution
Step 1: Analyze transaction snapshot behavior
In MVCC, a transaction sees data as it was when it started, ignoring later commits.Step 2: Identify cause of outdated read
If the transaction started before the update commit, it will see the old data version.Final Answer:
The first transaction started before the update and sees a consistent snapshot -> Option CQuick Check:
MVCC snapshot isolation causes outdated reads [OK]
- Blaming MVCC for failed commits
- Assuming MVCC uses locks to block reads
- Thinking new versions always appear instantly
Solution
Step 1: Understand MVCC versioning benefits
Multiple versions let readers see consistent data without waiting for writers to complete.Step 2: Compare options for performance and accuracy
By allowing readers to access old versions without waiting for writers to finish correctly explains that readers access old versions, avoiding delays and ensuring accuracy.Final Answer:
By allowing readers to access old versions without waiting for writers to finish -> Option AQuick Check:
MVCC = readers never wait for writers [OK]
- Thinking MVCC locks block readers
- Believing old versions are deleted immediately
- Assuming transactions run sequentially
Ready to prove it?
Pass the test and this pattern moves unknown
