SQL ডেটাবেসে Transaction Isolation Levels হলো ট্রানজেকশনের বিভিন্ন স্তর যা একটি ডেটাবেসে একাধিক ট্রানজেকশন চলাকালীন ডেটা এক্সেস এবং সঠিকতা (Consistency) নিশ্চিত করার জন্য ব্যবহৃত হয়। ট্রানজেকশন আইসোলেশন মানে হল, একাধিক ট্রানজেকশন একে অপরের থেকে কিভাবে বিচ্ছিন্ন থাকবে এবং এক ট্রানজেকশন আরেকটিকে প্রভাবিত করবে কিনা।
প্রতিটি ট্রানজেকশন একাধিক অপারেশন সম্পাদন করতে পারে (যেমন, ডেটা পড়া, আপডেট করা বা মুছে ফেলা), এবং একাধিক ট্রানজেকশন যদি একই ডেটার উপর কাজ করে, তবে এর ফলস্বরূপ কিছু অপ্রত্যাশিত অবস্থা সৃষ্টি হতে পারে, যেমন Dirty Read, Non-repeatable Read, এবং Phantom Read। এই সমস্যা থেকে রক্ষা পেতে, ডেটাবেসে ট্রানজেকশন আইসোলেশন স্তরগুলির ব্যবহার করা হয়।
Transaction Isolation Levels এর প্রকারভেদ
SQL ডেটাবেসে মোট ৪টি প্রধান Transaction Isolation Levels আছে, এবং প্রতিটি স্তর ডেটাবেসে চলমান ট্রানজেকশনগুলোর পারস্পরিক প্রভাবের সাথে সম্পর্কিত। এগুলি হলো:
1. Read Uncommitted
এটি সবচেয়ে কম আইসোলেশন স্তর। এই স্তরে, এক ট্রানজেকশন অন্য ট্রানজেকশনের Uncommitted পরিবর্তন (যেগুলি এখনও কমিট হয়নি) পড়তে পারে, যা Dirty Read এর দিকে পরিচালিত করে। এটি সবচেয়ে দ্রুততর, কিন্তু ডেটা সঠিকতার জন্য সবচেয়ে কম নিরাপদ।
- Dirty Read: একটি ট্রানজেকশন অন্য একটি ট্রানজেকশনের চলমান পরিবর্তন পড়তে পারে, যা পরে রোলব্যাক হতে পারে।
উদাহরণ:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
2. Read Committed
এই স্তরে, এক ট্রানজেকশন কেবলমাত্র অন্য ট্রানজেকশনের Committed (কমিট হওয়া) পরিবর্তনগুলো পড়তে পারে। ফলে, Dirty Read রোধ করা হয়, তবে Non-repeatable Read হতে পারে। এর মানে, যদি আপনি একটি মান পড়েন এবং পরে সেই মান আবার পড়েন, তবে এটি পরিবর্তিত হতে পারে যদি অন্য একটি ট্রানজেকশন সেই মানটি আপডেট করে।
- Non-repeatable Read: একটি ট্রানজেকশন যখন একটি নির্দিষ্ট রেকর্ড পড়ে, তখন পরবর্তীতে সেই রেকর্ডের মান পরিবর্তিত হতে পারে অন্য কোনো ট্রানজেকশন দ্বারা।
উদাহরণ:
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
3. Repeatable Read
এই স্তরে, এক ট্রানজেকশন যা কিছু পড়বে তা সে শেষ হওয়া পর্যন্ত অপরিবর্তিত থাকবে, অর্থাৎ ট্রানজেকশনের মধ্যে যতবারই একটি রেকর্ড পড়া হোক না কেন, রেকর্ডটির মান অপরিবর্তিত থাকবে। এটি Non-repeatable Read রোধ করে, কিন্তু Phantom Read সমস্যা থাকতে পারে।
- Phantom Read: একটি ট্রানজেকশন একই কুয়েরি চালানোর পরেও, ডেটাবেসের মধ্যে নতুন রেকর্ড যুক্ত হওয়ার কারণে কুয়েরির ফলাফল পরিবর্তিত হতে পারে।
উদাহরণ:
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
4. Serializable
এটি সর্বোচ্চ আইসোলেশন স্তর। এই স্তরে, ট্রানজেকশনগুলো এমনভাবে পরিচালিত হয় যেন একে অপরের কোনও প্রভাব না ফেলতে পারে। এটি Phantom Read, Non-repeatable Read, এবং Dirty Read সকলকেই প্রতিরোধ করে। তবে, এটি সবচেয়ে ধীর গতির এবং সিস্টেমের পারফরম্যান্সের উপর প্রভাব ফেলতে পারে।
- Serializable স্তরে ট্রানজেকশনগুলো একে অপরের পরিপূরক হিসেবে চলে, যেন একে অপরের সম্পাদনাকে প্রভাবিত না করে, এবং বাস্তবে একে অপরের সাথে সমান্তরালভাবে চলতে পারে না।
উদাহরণ:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
সারাংশ
Transaction Isolation Levels ডেটাবেসে একাধিক ট্রানজেকশন চলাকালীন ডেটার সঠিকতা এবং সুরক্ষা নিশ্চিত করার জন্য ব্যবহৃত হয়। এগুলি বিভিন্ন ধরনের পারস্পরিক প্রভাবের (যেমন Dirty Read, Non-repeatable Read, Phantom Read) বিরুদ্ধে রক্ষা করে, এবং প্রতিটি স্তরের পারফরম্যান্স এবং সঠিকতার মধ্যে একটি ব্যালান্স রয়েছে। সবচেয়ে কম আইসোলেশন স্তর হচ্ছে Read Uncommitted, এবং সবচেয়ে উচ্চ আইসোলেশন স্তর হচ্ছে Serializable। Serializable সর্বোচ্চ সুরক্ষা দেয়, কিন্তু সিস্টেমের পারফরম্যান্সের উপর প্রভাব ফেলতে পারে, যেখানে Read Uncommitted দ্রুত হলেও সঠিকতা কম প্রদান করে।
Read more