SERIALIZABLE isolation level

SQL Server में Transactions और Error Handling

Miriam Antona

Software Engineer

SERIALIZABLE

  • सबसे प्रतिबंधित isolation level
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
SQL Server में Transactions और Error Handling

Isolation level comparison

Dirty reads Non-repeatable reads Phantom reads
READ UNCOMMITTED yes yes yes
READ COMMITTED no yes yes
REPEATABLE READ no no yes
SERIALIZABLE no no no
SQL Server में Transactions और Error Handling

SERIALIZABLE के साथ रिकॉर्ड लॉकिंग

  • इंडेक्स रेंज पर आधारित WHERE वाली क्वेरी -> सिर्फ वे रिकॉर्ड लॉक होते हैं
  • इंडेक्स रेंज पर आधारित नहीं -> पूरी टेबल लॉक होती है
SQL Server में Transactions और Error Handling

SERIALIZABLE - इंडेक्स रेंज पर आधारित क्वेरी

Transaction 1

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE

BEGIN TRAN
    SELECT * FROM customers
    WHERE customer_id BETWEEN 1 AND 3;
| customer_id | first_name | last_name | ... | phone     |
|-------------|------------|-----------|-----|-----------|
| 1           | Dylan      | Smith     | ... | 555888999 |

रिकॉर्ड लॉक हुआ

SQL Server में Transactions और Error Handling

SERIALIZABLE - इंडेक्स रेंज पर आधारित क्वेरी

Transaction 1

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE

BEGIN TRAN
    SELECT * FROM customers
    WHERE customer_id BETWEEN 1 AND 3;
| customer_id | first_name | last_name | ... | phone     |
|-------------|------------|-----------|-----|-----------|
| 1           | Dylan      | Smith     | ... | 555888999 |

रिकॉर्ड लॉक हुआ

Transaction 2

...

...

INSERT INTO customers (customer_id, first_name, ...)
VALUES (2, 'Phantom', 'Ph', '[email protected]', 555666222);

इंतज़ार करना होगा!

SQL Server में Transactions और Error Handling

SERIALIZABLE - इंडेक्स रेंज पर आधारित क्वेरी

Transaction 1

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE

BEGIN TRAN
    SELECT * FROM customers 
    WHERE customer_id BETWEEN 1 AND 3;

    SELECT * FROM customers 
    WHERE customer_id BETWEEN 1 AND 3;
| customer_id | first_name | last_name | ... | phone     |
|-------------|------------|-----------|-----|-----------|
| 1           | Dylan      | Smith     | ... | 555888999 |

Transaction 2

...

...

INSERT INTO customers (customer_id, first_name, ...)
VALUES (2, 'Phantom', 'Ph', '[email protected]', 555666222);

इंतज़ार करना होगा!

SQL Server में Transactions और Error Handling

SERIALIZABLE - इंडेक्स रेंज पर आधारित क्वेरी

Transaction 1

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE

BEGIN TRAN
    SELECT * FROM customers 
    WHERE customer_id BETWEEN 1 AND 3;

    SELECT * FROM customers 
    WHERE customer_id BETWEEN 1 AND 3;
COMMIT TRAN

Transaction 2

...

...

INSERT INTO customers (customer_id, first_name, ...)
VALUES (2, 'Phantom', 'Ph', '[email protected]', 555666222);

आखिरकार चला!

SQL Server में Transactions और Error Handling

SERIALIZABLE - इंडेक्स रेंज पर आधारित क्वेरी

Transaction 1

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE

BEGIN TRAN
    SELECT * FROM customers 
    WHERE customer_id BETWEEN 1 AND 3;
| customer_id | first_name | last_name | ... | phone     |
|-------------|------------|-----------|-----|-----------|
| 1           | Dylan      | Smith     | ... | 555888999 |

Transaction 2

...

...

INSERT INTO customers (customer_id, first_name, ...)
VALUES (200, 'Phantom', 'Ph', '[email protected]', 555666222);

तुरंत इंसर्ट हो गया!

SQL Server में Transactions और Error Handling

SERIALIZABLE - इंडेक्स रेंज पर आधारित नहीं क्वेरी

Transaction 1

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
BEGIN TRAN
    SELECT * FROM customers;
| customer_id | first_name | last_name | ... | phone     |
|-------------|------------|-----------| ... |-----------|
| 1           | Dylan      | Smith     | ... | 555888999 |
...
| 10          | Carol      | York      | ... | 555148988 |

पूरी टेबल लॉक होती है

Transaction 2

...

...

INSERT INTO customers
VALUES (100, 'Phantom', 'Ph', '[email protected]', 555666222);

इंतज़ार करना होगा!

SQL Server में Transactions और Error Handling

SERIALIZABLE - इंडेक्स रेंज पर आधारित नहीं क्वेरी

Transaction 1

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
BEGIN TRAN
    SELECT * FROM customers;

    SELECT * FROM customers;
| customer_id | first_name | last_name | ... | phone     |
|-------------|------------|-----------| ... |-----------|
| 1           | Dylan      | Smith     | ... | 555888999 |
...
| 10          | Carol      | York      | ... | 555148988 |

Transaction 2

...

...

INSERT INTO customers
VALUES (100, 'Phantom', 'Ph', '[email protected]', 555666222);

इंतज़ार करना होगा!

SQL Server में Transactions और Error Handling

SERIALIZABLE - इंडेक्स रेंज पर आधारित नहीं क्वेरी

Transaction 1

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
BEGIN TRAN
    SELECT * FROM customers;

    SELECT * FROM customers;
COMMIT TRAN

Transaction 2

...

...

INSERT INTO customers 
VALUES (100, 'Phantom', 'Ph', '[email protected]', 555666222);

आखिरकार चला!

SQL Server में Transactions और Error Handling

SERIALIZABLE - सारांश

Pros:

  • अच्छी डेटा स्थिरता: dirty, non-repeatable और phantom reads रोकता है

Cons:

  • SERIALIZABLE ट्रांज़ैक्शन आपको ब्लॉक कर सकता है

कब उपयोग करें?:

  • जब डेटा स्थिरता अनिवार्य हो
SQL Server में Transactions और Error Handling

अभ्यास करते हैं!

SQL Server में Transactions और Error Handling

Preparing Video For Download...