SQL Server এ Transaction Isolation Levels এবং Concurrency Management ডেটাবেসের ট্রানজেকশনের কার্যক্রমে একাধিক ইউজারের সমান্তরাল অ্যাক্সেস এবং ডেটা ইন্টেগ্রিটি বজায় রাখার জন্য গুরুত্বপূর্ণ ভূমিকা পালন করে। এগুলোর মাধ্যমে নিশ্চিত করা হয় যে একাধিক ট্রানজেকশন একই ডেটা একসাথে ব্যবহার করতে পারে না, এবং একে অপরের মধ্যে সংঘর্ষ (conflict) বা ডেটার অখণ্ডতা (integrity) নষ্ট না হয়।
1. Transaction Isolation Levels
Transaction Isolation Levels নির্ধারণ করে যে, একাধিক ট্রানজেকশন একে অপরের পরিবর্তনগুলি কতটুকু দেখতে পাবে এবং একে অপরের ওপর কতটুকু প্রভাব ফেলবে। SQL Server এ মোট ৪টি প্রধান Isolation Levels রয়েছে: Read Uncommitted, Read Committed, Repeatable Read, এবং Serializable। প্রতিটি Isolation Level এর নিজস্ব সুবিধা এবং সীমাবদ্ধতা রয়েছে।
1.1. Read Uncommitted
এটি সর্বনিম্ন isolation level। এতে একটি ট্রানজেকশন যখন অন্য ট্রানজেকশন দ্বারা পরিবর্তিত ডেটা পড়ে, তখন সেই ডেটার Dirty Reads হতে পারে। অর্থাৎ, ট্রানজেকশনটি এমন ডেটা পড়তে পারে যেটি পরবর্তীতে রোলব্যাক হতে পারে।
- ব্যবহার: যখন আপনি পারফরম্যান্স সর্বোচ্চ রাখতে চান এবং ডেটার সাময়িক অবস্থা অস্থির হতে পারে এমন পরিস্থিতিতে এটি ব্যবহার করা হয়।
নিচে একটি উদাহরণ:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; SELECT * FROM Employees;
1.2. Read Committed
এটি SQL Server এর ডিফল্ট isolation level। এতে ট্রানজেকশনটি শুধুমাত্র Committed ডেটা পড়ে, অর্থাৎ, রোলব্যাক হওয়ার সম্ভাবনা নেই এমন ডেটা। তবে, এক ট্রানজেকশন ডেটা পড়ার পর, আরেক ট্রানজেকশন ডেটা পরিবর্তন করলে, প্রথম ট্রানজেকশন আবার নতুন ডেটা দেখতে পায়, যা Non-repeatable Read (অস্থির ডেটা) হতে পারে।
- ব্যবহার: যখন আপনি ট্রানজেকশনে ডেটার আপডেট থাকা না চাইলে, তবে এটি ভালো ব্যবহার করা যায়।
নিচে একটি উদাহরণ:
SET TRANSACTION ISOLATION LEVEL READ COMMITTED; SELECT * FROM Employees;
1.3. Repeatable Read
এই isolation level এ, একবার ট্রানজেকশন কোনো ডেটা পড়লে, তা পরবর্তী সময়ে অন্য কোনো ট্রানজেকশন দ্বারা পরিবর্তিত হতে পারে না যতক্ষণ না প্রথম ট্রানজেকশনটি সম্পূর্ণ হয়। এতে Dirty Read এবং Non-repeatable Read প্রতিরোধ করা হয়, তবে Phantom Reads (যখন নতুন রেকর্ড অন্তর্ভুক্ত হয়) হতে পারে।
- ব্যবহার: যখন আপনি চান যে একবার পড়া ডেটা পরিবর্তিত না হয়।
নিচে একটি উদাহরণ:
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ; SELECT * FROM Employees;
1.4. Serializable
এটি সবচেয়ে উচ্চ isolation level। এতে একাধিক ট্রানজেকশন সম্পূর্ণভাবে একে অপরের থেকে আলাদা থাকে, অর্থাৎ, এক ট্রানজেকশনের পরবর্তীতে অন্য ট্রানজেকশন কোনো ডেটা ব্যবহার করতে পারে না যতক্ষণ না প্রথম ট্রানজেকশন সম্পূর্ণ হয়। এটি Dirty Read, Non-repeatable Read, এবং Phantom Read প্রতিরোধ করে।
- ব্যবহার: যখন আপনি নিশ্চিত চান যে একাধিক ট্রানজেকশন একে অপরের সাথে কোনো সংঘর্ষে পড়বে না।
নিচে একটি উদাহরণ:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; SELECT * FROM Employees;
1.5. Snapshot Isolation
SQL Server এর একটি বিশেষ isolation level Snapshot Isolation। এটি ট্রানজেকশনগুলির মধ্যে ডেটার ফটো তৈরি করে, যাতে পরবর্তী সময়ে ডেটার কোনো পরিবর্তন হবে না যতক্ষণ না ট্রানজেকশনটি শেষ হয়। এটি Read Committed এর মতো কাজ করে, তবে প্রতিটি ট্রানজেকশন একটি নির্দিষ্ট snapshot (চিত্র) দেখে।
- ব্যবহার: যখন ডেটা সঠিকভাবে পঠনযোগ্য রাখতে চান এবং ট্রানজেকশনগুলির মধ্যে কনফ্লিক্ট থেকে বাঁচাতে চান।
নিচে একটি উদাহরণ:
SET TRANSACTION ISOLATION LEVEL SNAPSHOT; SELECT * FROM Employees;
2. Concurrency Management
Concurrency Management বা Concurrency Control হল ডেটাবেসে একাধিক ট্রানজেকশনের মধ্যে সঠিক সমন্বয় বজায় রাখা, যাতে ডেটা অখণ্ড থাকে এবং ডেটা সমান্তরালভাবে অ্যাক্সেস করার সময় কোনো ধরণের ডেটার অস্থিরতা বা সংঘর্ষ না ঘটে। SQL Server এ এর জন্য বিভিন্ন প্রযুক্তি ব্যবহৃত হয়, যার মধ্যে রয়েছে Locking, Deadlock Prevention, Optimistic Concurrency, এবং Pessimistic Concurrency।
2.1. Locking
Locking হল এমন একটি পদ্ধতি যা ডেটাবেসের একটি রেকর্ড বা টেবিল যখন এক ট্রানজেকশন দ্বারা ব্যবহৃত হয়, তখন অন্য ট্রানজেকশনগুলিকে ওই রেকর্ড বা টেবিল অ্যাক্সেস করতে বাধা দেয়। SQL Server এ বিভিন্ন ধরনের locks ব্যবহৃত হয় যেমন:
- Shared Lock (S Lock): যখন একটি ট্রানজেকশন ডেটা পড়ছে, তখন অন্য ট্রানজেকশন পড়তে পারবে কিন্তু লিখতে পারবে না।
- Exclusive Lock (X Lock): যখন একটি ট্রানজেকশন ডেটা লিখছে, তখন অন্য ট্রানজেকশন কিছুই করতে পারবে না।
- Update Lock (U Lock): এটি ডেটা আপডেট করার পূর্বে অন্য ট্রানজেকশনের জন্য একটি শেয়ারড লক দেয়।
2.2. Deadlock Prevention
Deadlock ঘটে যখন দুটি বা তার বেশি ট্রানজেকশন একে অপরের সম্পদ লক করে এবং একে অপরের জন্য অপেক্ষা করতে থাকে, যার ফলে সিস্টেম স্থবির হয়ে যায়। SQL Server ডেডলক ডিটেকশন এবং অটোমেটিক রোলব্যাকের মাধ্যমে এটি প্রতিরোধ করে। যখন SQL Server একটি ডেডলক সনাক্ত করে, তখন এটি একটির ট্রানজেকশন রোলব্যাক করে, যাতে অন্যটি এগিয়ে যেতে পারে।
2.3. Optimistic Concurrency Control
Optimistic Concurrency Control কৌশলটি এমন একটি পরিস্থিতিতে ব্যবহার করা হয় যেখানে আপনি আশা করেন যে, একাধিক ট্রানজেকশনের মধ্যে খুব কমই সংঘর্ষ হবে। এতে প্রতিটি ট্রানজেকশন ডেটা পরিবর্তন করার আগে, শুধুমাত্র চেক করে যে অন্য কোনো ট্রানজেকশন একই ডেটা পরিবর্তন করেনি।
- Example: আপনাকে একটি
version columnরাখতে হবে, যাতে ট্রানজেকশনটি শেষ করার সময় আপনি চেক করতে পারেন যে কোনো পরিবর্তন হয়েছে কিনা।
2.4. Pessimistic Concurrency Control
Pessimistic Concurrency Control কৌশলটি এমন পরিস্থিতিতে ব্যবহার করা হয় যেখানে আপনি বিশ্বাস করেন যে একাধিক ট্রানজেকশনের মধ্যে সংঘর্ষ হতে পারে, এবং একে অন্যের সাথে ডেটা ব্যবহারে প্রতিযোগিতা করতে দিবেন না। এতে লকিং ব্যবহার করা হয় যাতে একবার ট্রানজেকশন একটি ডেটা সম্পদ ব্যবহার করলে অন্য ট্রানজেকশন সেটি ব্যবহার করতে না পারে।
সারাংশ
Transaction Isolation Levels এবং Concurrency Management SQL Server এর গুরুত্বপূর্ণ ধারণা। এগুলি ডেটাবেসের কার্যক্রমে একাধিক ট্রানজেকশনের মধ্যে সমন্বয় বজায় রাখতে সহায়তা করে। Isolation Levels ডেটার দৃশ্যমানতা এবং একে অপরের সাথে সম্পর্কের ধরন নির্ধারণ করে, আর Concurrency Management ট্রানজেকশনের মধ্যে সংঘর্ষ বা ডেডলক প্রতিরোধ করে ডেটা ইন্টিগ্রিটি বজায় রাখে।
Read more