Transaction Isolation Levels (ট্রানজেকশন আইসোলেশন লেভেল) SQL Server এবং অন্যান্য ডেটাবেস সিস্টেমে ট্রানজেকশন পরিচালনার একটি গুরুত্বপূর্ণ ধারণা। এটি বিভিন্ন ট্রানজেকশনগুলো একে অপরের সাথে কিভাবে ইন্টারঅ্যাক্ট করবে তা নির্ধারণ করে। প্রতিটি ট্রানজেকশন নির্দিষ্ট আইসোলেশন লেভেলে কাজ করে, যা নিশ্চিত করে যে ডেটাবেসের মধ্যে একাধিক ট্রানজেকশন পরিচালনা করার সময় ডেটার সঠিকতা এবং সামঞ্জস্য বজায় থাকে।
SQL Server এ মোট ৪টি Transaction Isolation Level রয়েছে:
- READ UNCOMMITTED
- READ COMMITTED
- REPEATABLE READ
- SERIALIZABLE
এগুলি ভিন্ন ভিন্ন ডেটাবেস এক্সেস প্যাটার্ন তৈরি করে এবং প্রতিটি স্তরের মধ্যে ডেটার সঠিকতা, পঠন এবং লেখার গতি, এবং অন্যান্য ট্রানজেকশনের দ্বারা ডেটার পরিবর্তনকে কিভাবে হ্যান্ডেল করা হবে তা নির্ধারণ করে।
১. READ UNCOMMITTED
READ UNCOMMITTED হলো সবচেয়ে নিম্ন আইসোলেশন লেভেল, যেখানে একটি ট্রানজেকশন অন্য ট্রানজেকশনের uncommitted changes বা অপ্রকাশিত পরিবর্তন পড়তে পারে। এর ফলে, dirty reads (অবৈধ বা অসম্পূর্ণ ডেটা) সম্ভব।
সুবিধা:
- ট্রানজেকশনটি দ্রুত সম্পন্ন হয় কারণ এটি কোনও ধরনের লকিং ব্যবস্থার মাধ্যমে ডেটা না আটকে রেখে ডেটা পড়তে পারে।
ক্ষতি:
- Dirty Reads: এক ট্রানজেকশন অন্য ট্রানজেকশনের পরিবর্তনগুলো পড়তে পারে যা পরবর্তীতে রোলব্যাক হতে পারে, ফলে ভুল বা অসম্পূর্ণ তথ্য পাওয়া যেতে পারে।
উদাহরণ:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
BEGIN TRANSACTION;
SELECT * FROM Employees;
COMMIT;
২. READ COMMITTED
READ COMMITTED হলো SQL Server এর ডিফল্ট ট্রানজেকশন আইসোলেশন লেভেল। এতে ট্রানজেকশন শুধুমাত্র committed data (যে ডেটা কমিট করা হয়েছে) পড়তে পারে এবং dirty reads আটকানো হয়, কিন্তু non-repeatable reads বা phantom reads ঘটতে পারে।
সুবিধা:
- Dirty Reads আটকানো হয়, অর্থাৎ শুধুমাত্র কমিট করা ডেটা পড়া হয়।
ক্ষতি:
- Non-repeatable Reads: একই ট্রানজেকশন বারবার একই ডেটা পড়লে, অন্যান্য ট্রানজেকশনের পরিবর্তনগুলির কারণে সেই ডেটা পরিবর্তিত হতে পারে।
উদাহরণ:
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
BEGIN TRANSACTION;
SELECT * FROM Employees;
COMMIT;
৩. REPEATABLE READ
REPEATABLE READ এ আইসোলেশন লেভেলে ট্রানজেকশন সম্পন্ন হওয়া পর্যন্ত একটি রেকর্ডে কোন পরিবর্তন বা লক করা যায় না। এতে non-repeatable reads আটকানো হয়, কিন্তু phantom reads সম্ভব।
সুবিধা:
- Non-repeatable Reads আটকানো হয়, অর্থাৎ একবার একটি রেকর্ড পড়লে, তা পরবর্তী সময়ে অপরিবর্তিত থাকে।
ক্ষতি:
- Phantom Reads: অন্য ট্রানজেকশন একটি নতুন রেকর্ড ইনসার্ট বা ডিলিট করলে, এটি একই কুয়েরি থেকে আলাদা ফলাফল পেতে পারে।
উদাহরণ:
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
BEGIN TRANSACTION;
SELECT * FROM Employees WHERE Department = 'HR';
COMMIT;
৪. SERIALIZABLE
SERIALIZABLE হলো সবচেয়ে শক্তিশালী আইসোলেশন লেভেল, যেখানে এক ট্রানজেকশন পুরো টেবিল বা রেঞ্জ লক করে, যাতে অন্য ট্রানজেকশনরা এক্সেস করতে না পারে। এতে dirty reads, non-repeatable reads, এবং phantom reads সবই আটকানো হয়।
সুবিধা:
- Dirty Reads, Non-repeatable Reads, এবং Phantom Reads সবই আটকানো হয়। এটি সবচেয়ে সুরক্ষিত ট্রানজেকশন আইসোলেশন লেভেল।
ক্ষতি:
- পারফরম্যান্স অনেক কমে যায়, কারণ এটি অন্যান্য ট্রানজেকশনকে সম্পূর্ণভাবে ব্লক করে রাখে যতক্ষণ না ট্রানজেকশন সম্পন্ন হয়।
উদাহরণ:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
BEGIN TRANSACTION;
SELECT * FROM Employees WHERE Department = 'HR';
COMMIT;
সারাংশ
Transaction Isolation Levels ডেটাবেসে একাধিক ট্রানজেকশন একে অপরের সাথে কিভাবে ইন্টারঅ্যাক্ট করবে তা নিয়ন্ত্রণ করে:
- READ UNCOMMITTED: সবচেয়ে কম আইসোলেশন, যেখানে dirty reads সম্ভব।
- READ COMMITTED: ডিফল্ট আইসোলেশন, যেখানে dirty reads আটকানো হয়, কিন্তু non-repeatable reads সম্ভব।
- REPEATABLE READ: Non-repeatable reads আটকানো হয়, কিন্তু phantom reads সম্ভব।
- SERIALIZABLE: সবচেয়ে শক্তিশালী আইসোলেশন, যেখানে সমস্ত ধরনের reads আটকানো হয়, তবে পারফরম্যান্সে খরচ বেশি।
Transaction Isolation Level নির্বাচন করা হয় ট্রানজেকশনের নির্দিষ্ট প্রয়োজনে, যেমন ডেটার সঠিকতা, পারফরম্যান্স এবং সমন্বয় নিশ্চিত করার জন্য।
Read more