MariaDB-তে ট্রানজেকশন (Transactions) হল ডেটাবেসের একটি মৌলিক ধারণা, যা এক বা একাধিক SQL অপারেশনকে একটি একক ইউনিট হিসেবে পরিচালনা করতে ব্যবহৃত হয়। ট্রানজেকশন নিশ্চিত করে যে ডেটাবেসের ডেটা সঠিক এবং অখণ্ড থাকে, বিশেষ করে যখন একাধিক অপারেশন একসাথে চলতে থাকে।
এছাড়া, MariaDB-তে ট্রানজেকশনগুলি ACID (Atomicity, Consistency, Isolation, Durability) বৈশিষ্ট্য অনুসরণ করে, যা ডেটাবেসের কার্যকারিতা এবং নির্ভরযোগ্যতা নিশ্চিত করে।
MariaDB Transactions
ট্রানজেকশন হচ্ছে একটি গ্রুপের মতো SQL অপারেশন, যা একসাথে সম্পাদিত হতে হয়। একটি ট্রানজেকশন শুরু থেকে শেষ পর্যন্ত চলতে থাকে এবং এটি সফলভাবে সম্পন্ন না হলে ডেটাবেসে কোনো পরিবর্তন ঘটে না। একটি ট্রানজেকশন শুরু করতে START TRANSACTION বা BEGIN ব্যবহার করা হয়, এবং সমাপ্ত করার জন্য COMMIT অথবা ROLLBACK ব্যবহার করা হয়।
সাধারণ গঠন
ট্রানজেকশন শুরু করা:
START TRANSACTION;ট্রানজেকশন সমাপ্ত করা (Changes save করা):
COMMIT;ট্রানজেকশন বাতিল করা (Changes undo করা):
ROLLBACK;
উদাহরণ
ট্রানজেকশন উদাহরণ:
START TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE account_id = 2;
COMMIT;
এখানে প্রথমে account_id 1 এর ব্যালেন্স ১০০ কমানো হচ্ছে এবং account_id 2 এর ব্যালেন্স ১০০ বাড়ানো হচ্ছে। COMMIT করার মাধ্যমে এই পরিবর্তনগুলি সেভ হবে।
যদি কোনো ভুল হয়ে যায়, তাহলে ROLLBACK ব্যবহার করা হবে:
START TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE account_id = 2;
ROLLBACK; -- কোনো ভুল হলে সমস্ত পরিবর্তন বাতিল হবে
এখানে, যদি কোনো কারণে COMMIT না হয়ে ROLLBACK হয়, তাহলে এই পরিবর্তনগুলো ডেটাবেসে আর যুক্ত হবে না এবং পূর্বাবস্থায় ফিরে আসবে।
ACID Properties
ACID একটি একক ট্রানজেকশন দ্বারা পরিচালিত ডেটাবেস অপারেশনের চারটি মৌলিক বৈশিষ্ট্যকে প্রতিনিধিত্ব করে। এগুলো হল:
Atomicity (পারমাণবিকতা)
Atomicity মানে হলো ট্রানজেকশনটি পুরোপুরি সফল বা পুরোপুরি ব্যর্থ হবে। যদি কোনো একটি অপারেশন সফল না হয়, তবে পুরো ট্রানজেকশনটি ব্যর্থ হয়ে যাবে এবং কোনো পরিবর্তন ডেটাবেসে সেভ হবে না।
উদাহরণ: যদি আপনি দুটি অপারেশন একসাথে পরিচালনা করছেন (যেমন, একটি অ্যাকাউন্ট থেকে টাকা বের করা এবং অন্য একটি অ্যাকাউন্টে টাকা জমা করা), এবং যদি একটি অপারেশন ব্যর্থ হয় (যেমন, টাকা জমা করা), তবে পুরো ট্রানজেকশনটি বাতিল হয়ে যাবে, যাতে ডেটাবেসে কোনো অর্ধেক কাজ না হয়ে থাকে।
Consistency (সঙ্গতি)
Consistency মানে হলো ট্রানজেকশন শেষ হওয়ার পর ডেটাবেস সব সময় সঠিক অবস্থায় থাকবে। যখন একটি ট্রানজেকশন সম্পন্ন হবে, তখন ডেটাবেসের সমস্ত নিয়ম এবং কনস্ট্রেইন্টস মেনে চলতে হবে।
উদাহরণ: যে কোনো ট্রানজেকশন সম্পন্ন হওয়ার পর ডেটাবেসের ইন্টিগ্রিটি বজায় থাকতে হবে, যেমন অ্যাকাউন্টের ব্যালেন্স কখনও ঋণাত্মক হতে পারবে না।
Isolation (পার্থক্য)
Isolation মানে হলো একটি ট্রানজেকশন অন্য ট্রানজেকশন থেকে বিচ্ছিন্ন থাকবে। অর্থাৎ, এক ট্রানজেকশন চলাকালীন অন্য ট্রানজেকশন তার প্রভাব ফেলতে পারবে না। MariaDB বিভিন্ন isolation স্তর (isolation levels) সমর্থন করে, যেমন READ COMMITTED, REPEATABLE READ, এবং SERIALIZABLE।
Isolation Levels:
- READ UNCOMMITTED: একটি ট্রানজেকশন অন্য ট্রানজেকশনগুলোতে করা অপরিবর্তিত ডেটা দেখতে পারে (dirty reads)।
- READ COMMITTED: একটি ট্রানজেকশন অন্য ট্রানজেকশনগুলো দ্বারা committed ডেটা দেখতে পারে।
- REPEATABLE READ: একটি ট্রানজেকশন একবার যেটা পড়েছে তা পরবর্তীতে একইভাবে পড়বে, তবে নতুন ডেটা বা পরিবর্তন দ্বারা প্রভাবিত হবে না।
- SERIALIZABLE: সমস্ত ট্রানজেকশন সম্পূর্ণভাবে সিরিয়াল (একসাথে একটানা) হবে, যাতে কোনো রকমের concurrency issues না হয়।
Durability (স্থিতিস্থাপকতা)
Durability মানে হলো একটি ট্রানজেকশন যখন সফলভাবে কমিট হয়ে যায়, তখন তার ফলাফল স্থায়ী হবে, এবং কোনো কারণে সিস্টেম বন্ধ হয়ে গেলেও তা হারানো যাবে না।
উদাহরণ: যদি একটি ট্রানজেকশন সফলভাবে সম্পন্ন হয়, তবে সেই পরিবর্তন ডেটাবেসে স্থায়ীভাবে সেভ হয়ে যাবে, এমনকি সার্ভার ক্র্যাশ হয়ে গেলেও।
ট্রানজেকশন ব্যবহারের কিছু গুরুত্বপূর্ণ দিক
- এটমিক অর্ডার: একাধিক অপারেশন একসাথে এবং একযোগভাবে সম্পাদিত হলে, সেগুলোর সবকটি একযোগে সফল হতে হবে।
- পার্থক্য ও কনফ্লিক্ট: একাধিক ট্রানজেকশন যদি একই ডেটা পরিবর্তন করার চেষ্টা করে, তাহলে পার্থক্য সৃষ্টি হতে পারে। এর সমাধান সঠিক isolation স্তরের মাধ্যমে করা হয়।
- লকিং: MariaDB ট্রানজেকশনের জন্য বিভিন্ন ধরনের লক ব্যবহার করতে পারে, যেমন পেজ লক বা রেকর্ড লক, যাতে একাধিক ট্রানজেকশন একসাথে এক ডেটা পরিবর্তন করতে না পারে।
সারাংশ
MariaDB-তে ট্রানজেকশন এবং ACID properties ডেটাবেসের ডেটা সুরক্ষা এবং স্থিতিশীলতা নিশ্চিত করে। ট্রানজেকশনের মাধ্যমে একাধিক অপারেশন একযোগভাবে পরিচালনা করা সম্ভব এবং ACID properties-র মাধ্যমে ডেটাবেসের ইন্টিগ্রিটি, নির্ভরযোগ্যতা এবং কার্যকারিতা বজায় রাখা হয়। এই বৈশিষ্ট্যগুলি ডেটাবেস সিস্টেমে ডেটার সঠিকতা এবং নিরাপত্তা নিশ্চিত করতে অপরিহার্য।
Transaction (ট্রানজেকশন) হলো একটি ডেটাবেস অপারেশন যা এক বা একাধিক SQL স্টেটমেন্টকে একত্রে একটি একক ইউনিট হিসেবে সম্পাদন করে। একাধিক কার্যকলাপ একসঙ্গে সম্পাদিত হলে সেগুলোকে একটি ট্রানজেকশনের মধ্যে অন্তর্ভুক্ত করা হয়। ট্রানজেকশন সম্পূর্ণ সফল বা ব্যর্থ হতে পারে, তবে এটির মধ্যে থাকা সব কার্যক্রম একসঙ্গে সফল বা ব্যর্থ হয়।
MariaDB-তে ট্রানজেকশন ব্যবস্থাপনা ডেটাবেসে ডেটা সুরক্ষা এবং যথাযথতার জন্য গুরুত্বপূর্ণ। এটি ডেটাবেসের অবস্থা সুসংগত এবং নির্ভরযোগ্য রাখে।
Transaction-এর মৌলিক বৈশিষ্ট্য
ACID (এসি.আই.ডি.) বৈশিষ্ট্য ট্রানজেকশনের প্রয়োজনীয়তা ও কার্যক্রম নির্ধারণ করে। ACID এর পূর্ণরূপ হলো:
- Atomicity (অ্যাটমিকিটি): একটি ট্রানজেকশনের সমস্ত অপারেশন একসাথে সম্পন্ন হয়, বা একদম ব্যর্থ হয়। এর মানে, ট্রানজেকশনটি একত্রে বা একেবারে কিছুই নয়।
- Consistency (সুসংগতি): ট্রানজেকশনের পূর্বে এবং পরবর্তীতে ডেটাবেসের অবস্থা সঠিক এবং সুসংগত থাকবে।
- Isolation (আইসোলেশন): একটি ট্রানজেকশনের কার্যক্রম অন্য কোনো ট্রানজেকশন থেকে বিচ্ছিন্ন থাকে। এতে অন্যান্য ট্রানজেকশন থেকে ট্রানজেকশনের ডেটা প্রভাবিত হয় না।
- Durability (টেকসইতা): একবার ট্রানজেকশন সফল হলে তার ফলাফল চিরস্থায়ী হয়ে যায়, এমনকি সিস্টেম ক্র্যাশ হলেও।
Transaction ব্যবহারের প্রয়োজনীয়তা
ট্রানজেকশন ব্যবহারের কিছু গুরুত্বপূর্ণ কারণ এবং প্রয়োজনীয়তা হল:
- ডেটা নিরাপত্তা ও এক্সিডেন্টাল ডিলিট বা আপডেট প্রতিরোধ: যদি কোনো একটি ট্রানজেকশনে কিছু ভুল হয়ে যায়, তবে পুরো ট্রানজেকশনটি রোলব্যাক (rollback) করা যাবে, যাতে ডেটাবেসের অন্য অংশগুলিতে ত্রুটি না ছড়ায়।
- একাধিক SQL অপারেশন একসাথে সম্পাদনা: একাধিক SQL কমান্ডকে একটি ইউনিট হিসেবে একত্রে সম্পন্ন করা সম্ভব হয়, যেমন একটি ব্যাংক ট্রানজেকশনে একই সময়ে অর্থ স্থানান্তর এবং ব্যালেন্স আপডেট করা।
- ব্যালান্স এবং ডেটাবেস একসঙ্গে রাখার জন্য: যখন একাধিক ব্যবহারকারী বা অ্যাপ্লিকেশন একই ডেটাবেসে কাজ করে, তখন ডেটাবেসের সঙ্গতি বজায় রাখতে ট্রানজেকশন ব্যবহৃত হয়।
- ইনডেক্স এবং লকিং-এর মাধ্যমে পারফরম্যান্স বৃদ্ধি: ট্রানজেকশন ব্যবহারের সময়, ডেটাবেসের বিভিন্ন অংশে লকিং মেকানিজম ব্যবহার করা হয়, যা ট্রানজেকশনগুলির মধ্যে সংঘর্ষ কমাতে সাহায্য করে।
MariaDB-তে Transaction শুরু করা
MariaDB-তে ট্রানজেকশন শুরু, শেষ বা রোলব্যাক করার জন্য কিছু বিশেষ SQL কমান্ড ব্যবহার করা হয়।
ট্রানজেকশন শুরু করা
ট্রানজেকশন শুরু করতে START TRANSACTION বা BEGIN কমান্ড ব্যবহার করা হয়।
START TRANSACTION;
বা
BEGIN;
ট্রানজেকশন কমিট (Commit) করা
যদি সমস্ত অপারেশন সফলভাবে সম্পন্ন হয়, তবে COMMIT কমান্ড ব্যবহার করে ট্রানজেকশনটি চূড়ান্ত করা হয়।
COMMIT;
ট্রানজেকশন রোলব্যাক (Rollback) করা
যদি কোনো ত্রুটি ঘটে, তাহলে ROLLBACK কমান্ড ব্যবহার করে পূর্ববর্তী সমস্ত অপারেশন বাতিল করা হয়।
ROLLBACK;
ট্রানজেকশন স্বয়ংক্রিয়ভাবে শেষ হওয়া (Autocommit)
MariaDB ডিফল্টভাবে autocommit মোডে থাকে, যার মানে প্রতিটি SQL কমান্ড স্বয়ংক্রিয়ভাবে একটি ট্রানজেকশন হিসেবে কার্যকর হয়। autocommit মোড বন্ধ করার জন্য:
SET autocommit = 0;
এবং যদি autocommit মোডে ফিরে যেতে চান:
SET autocommit = 1;
Transaction এর উদাহরণ
ধরা যাক, একটি ব্যাংক ট্রানজেকশন সিমুলেট করা হচ্ছে, যেখানে একটি অ্যাকাউন্ট থেকে টাকা কাটা এবং অন্য অ্যাকাউন্টে টাকা যোগ করা হয়:
START TRANSACTION;
-- প্রথম অ্যাকাউন্ট থেকে টাকা কাটা
UPDATE accounts SET balance = balance - 1000 WHERE account_id = 1;
-- দ্বিতীয় অ্যাকাউন্টে টাকা যোগ করা
UPDATE accounts SET balance = balance + 1000 WHERE account_id = 2;
-- যদি সবকিছু ঠিক থাকে, তাহলে কমিট করা হবে
COMMIT;
এছাড়া, যদি কোনো ভুল ঘটে (যেমন, কোনো একটি অ্যাকাউন্টে ব্যালেন্স না থাকার কারণে), তাহলে পুরো ট্রানজেকশন রোলব্যাক করা যাবে:
ROLLBACK;
সারাংশ
MariaDB-তে ট্রানজেকশন ব্যবহারের মাধ্যমে ডেটাবেসে ডেটার সঙ্গতি, নিরাপত্তা এবং পারফরম্যান্স বৃদ্ধি করা যায়। ACID বৈশিষ্ট্যের মাধ্যমে নিশ্চিত করা হয় যে সমস্ত অপারেশন একত্রে বা একেবারে কিছুই নয়। ট্রানজেকশন ব্যবহারে সঠিকভাবে ডেটা প্রক্রিয়াকরণ এবং বিপর্যয় প্রতিরোধ করা সম্ভব হয়, যা ডেটাবেস ব্যবস্থাপনাকে আরো শক্তিশালী এবং নির্ভরযোগ্য করে তোলে।
মারিয়া ডিবি (MariaDB) একটি রিলেশনাল ডেটাবেস ম্যানেজমেন্ট সিস্টেম (RDBMS), যেখানে ডেটাবেসের ডেটা ট্রানজেকশনকে পরিচালনা করতে COMMIT এবং ROLLBACK ব্যবহার করা হয়। এগুলি মূলত ডেটাবেসে একাধিক কাজ (যেমন, ইনসার্ট, আপডেট বা ডিলিট) একত্রে সম্পাদন করতে ব্যবহৃত হয় এবং ডেটার অখণ্ডতা রক্ষা করে।
COMMIT
COMMIT একটি SQL কমান্ড যা একটি ট্রানজেকশন (transaction) সম্পূর্ণভাবে ডেটাবেসে স্থায়ীভাবে সংরক্ষণ করে। অর্থাৎ, যখন আপনি একটি সিরিজ অপারেশন (যেমন ইনসার্ট, আপডেট, ডিলিট) করেন, COMMIT কমান্ড চলানোর মাধ্যমে সেই পরিবর্তনগুলো স্থায়ী হয়ে যাবে। COMMIT ট্রানজেকশনকে কার্যকর করে এবং ডেটাবেসে আপডেটগুলো সেভ করে দেয়।
উদাহরণ:
START TRANSACTION;
UPDATE employees
SET salary = salary + 5000
WHERE department_id = 2;
COMMIT;
এখানে, প্রথমে একটি ট্রানজেকশন শুরু করা হয়েছে (START TRANSACTION;), তারপর employees টেবিলে department_id ২ এর জন্য salary আপডেট করা হয়েছে, এবং পরে COMMIT কমান্ড ব্যবহার করে সেই পরিবর্তনগুলো স্থায়ীভাবে ডেটাবেসে সংরক্ষিত করা হয়েছে।
ROLLBACK
ROLLBACK একটি SQL কমান্ড যা চলমান ট্রানজেকশনটি বাতিল করে এবং তার পূর্বের অবস্থায় ফিরিয়ে নিয়ে আসে। যদি কোন কারণে আপনি ট্রানজেকশনটি সম্পূর্ণ করতে না চান বা কোনো ভুল পরিবর্তন করতে চান, তবে ROLLBACK ব্যবহার করে সেই পরিবর্তনগুলো ফেরত নেওয়া যায়। এটি ডেটাবেসের অখণ্ডতা রক্ষায় সহায়ক।
উদাহরণ:
START TRANSACTION;
UPDATE employees
SET salary = salary + 5000
WHERE department_id = 2;
ROLLBACK;
এখানে, START TRANSACTION দিয়ে একটি ট্রানজেকশন শুরু করা হয়েছে, তবে পরে ROLLBACK ব্যবহার করার ফলে, সমস্ত পরিবর্তন ফিরিয়ে নেওয়া হয়েছে এবং ডেটাবেস পূর্বের অবস্থায় ফিরে গেছে।
COMMIT এবং ROLLBACK এর ব্যবহারের পার্থক্য
| বৈশিষ্ট্য | COMMIT | ROLLBACK |
|---|---|---|
| কার্যকারিতা | ট্রানজেকশন সম্পন্ন করে এবং পরিবর্তনগুলি স্থায়ী করে। | ট্রানজেকশন বাতিল করে এবং পরিবর্তনগুলি পূর্বাবস্থায় ফিরিয়ে নিয়ে আসে। |
| ডেটার অখণ্ডতা | পরিবর্তনগুলিকে ডেটাবেসে সেভ করে, অর্থাৎ স্থায়ী করে। | পরিবর্তনগুলি প্রত্যাহার করে, ডেটাবেসকে পূর্বের অবস্থায় ফিরিয়ে আনে। |
| ব্যবহার | কাজ সফলভাবে সম্পন্ন হলে COMMIT করা হয়। | যদি কোন ভুল হয় বা কাজ বাতিল করতে হয়, তবে ROLLBACK করা হয়। |
COMMIT এবং ROLLBACK এর ব্যবহারিক উদাহরণ
১. ট্রানজেকশন স্টেটমেন্ট সহ ব্যবহারের উদাহরণ:
START TRANSACTION;
INSERT INTO orders (order_id, customer_id, amount)
VALUES (1001, 25, 500);
UPDATE products
SET stock_quantity = stock_quantity - 1
WHERE product_id = 101;
COMMIT; -- পরিবর্তনগুলি সেভ হবে
২. ভুল ইনপুটের জন্য ROLLBACK ব্যবহার:
START TRANSACTION;
UPDATE customers
SET phone_number = '123456789'
WHERE customer_id = 100;
-- ধরুন এখানে ভুল ফোন নম্বর দেওয়া হয়েছে
ROLLBACK; -- ভুল পরিবর্তন প্রত্যাহার করা হবে
সারাংশ
মারিয়া ডিবি (MariaDB)-তে COMMIT এবং ROLLBACK দুটি অত্যন্ত গুরুত্বপূর্ণ কমান্ড, যা ডেটাবেসে ট্রানজেকশন পরিচালনা করতে সহায়তা করে। COMMIT ব্যবহার করে পরিবর্তনগুলো স্থায়ী করা হয়, এবং ROLLBACK ব্যবহার করে কোনো ভুল বা অবাঞ্ছিত পরিবর্তন ফিরিয়ে নেওয়া হয়। এই দুটি কমান্ডের মাধ্যমে ডেটাবেসের অখণ্ডতা ও নিরাপত্তা নিশ্চিত করা সম্ভব।
Transaction Isolation Levels বা ট্রানজেকশন আইসলেশন লেভেলস হল ডেটাবেসের একটি গুরুত্বপূর্ণ বৈশিষ্ট্য, যা ট্রানজেকশনের মধ্যে ডেটার দৃশ্যমানতা এবং একে অপরের সাথে সম্পর্কিত আচরণ নির্ধারণ করে। এটি মূলত একাধিক ট্রানজেকশন যখন একে অপরের সাথে সমান্তরালভাবে চলে, তখন তাদের মধ্যে ডেটার সঠিকতা ও সামঞ্জস্য নিশ্চিত করতে ব্যবহৃত হয়। মারিয়া ডিবি (MariaDB) তে চারটি প্রধান আইসলেশন লেভেল উপলব্ধ রয়েছে, প্রতিটি আলাদা ডেটা কনসিস্টেন্সি এবং কনকারেন্সি প্রস্তাব করে।
Transaction Isolation Levels কী?
Transaction Isolation Level নির্ধারণ করে যে একাধিক ট্রানজেকশন একে অপরের মধ্যে কিভাবে প্রভাবিত হবে। একে বুঝতে হলে, কিছু সাধারণ ট্রানজেকশন সম্পর্কিত সমস্যা যেমন dirty reads, non-repeatable reads, এবং phantom reads এর ব্যাপারে জানাও দরকার।
- Dirty Read: এক ট্রানজেকশন এমন ডেটা পড়ে যা অন্য ট্রানজেকশনের মধ্যে পরিবর্তিত হতে পারে কিন্তু এখনও কমিট হয়নি।
- Non-repeatable Read: এক ট্রানজেকশন যেটি একটি ডেটার মান পড়েছে, পরবর্তীতে সেই মান অন্য ট্রানজেকশন দ্বারা পরিবর্তিত হতে পারে।
- Phantom Read: এক ট্রানজেকশনের মধ্যে পুনরায় রিড করার সময় নতুন ডেটা দেখা যেতে পারে যা প্রথমে উপস্থিত ছিল না।
মারিয়া ডিবি তে Transaction Isolation Levels
মারিয়া ডিবি (MariaDB) তে মোট চারটি Isolation Level উপলব্ধ:
১. READ UNCOMMITTED
READ UNCOMMITTED সর্বনিম্ন আইসলেশন লেভেল, যেখানে এক ট্রানজেকশন অপর ট্রানজেকশন দ্বারা পরিবর্তিত ডেটা পড়তে পারে, এমনকি তা কমিট হয়নি। এটিকে Dirty Read অনুমোদন করা হয়। এর ফলে পারফরম্যান্স উন্নত হলেও ডেটা সঠিকতার সমস্যা তৈরি হতে পারে।
- Dirty Read অনুমোদিত
- Non-repeatable Read হতে পারে
- Phantom Read হতে পারে
উদাহরণ:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
START TRANSACTION;
SELECT * FROM Employees;
২. READ COMMITTED
READ COMMITTED আইসলেশন লেভেল কিছুটা বেশি নিরাপদ, যেখানে শুধুমাত্র কমিট হওয়া ডেটা ট্রানজেকশন দ্বারা দেখা যায়। তবে, এটি Non-repeatable Read হতে পারে, কারণ এক ট্রানজেকশন দ্বিতীয়বার ডেটা পড়লে সেই ডেটার মান পরিবর্তিত হতে পারে যদি অন্য একটি ট্রানজেকশন ডেটা কমিট করে।
- Dirty Read বন্ধ
- Non-repeatable Read হতে পারে
- Phantom Read হতে পারে
উদাহরণ:
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
START TRANSACTION;
SELECT * FROM Employees;
৩. REPEATABLE READ
REPEATABLE READ আইসলেশন লেভেল অনেক বেশি নিরাপদ এবং এটি Non-repeatable Read এর সমস্যা সমাধান করে। এই লেভেলে, এক ট্রানজেকশন যখন একটি ডেটা পড়ে, তখন তা অন্য ট্রানজেকশনের দ্বারা পরিবর্তিত হতে পারে না যতক্ষণ না প্রথম ট্রানজেকশন কমিট না হয়। তবে, এটি Phantom Read অনুমোদন করতে পারে, অর্থাৎ নতুন রেকর্ডগুলো দেখতে পাওয়া যেতে পারে।
- Dirty Read বন্ধ
- Non-repeatable Read বন্ধ
- Phantom Read হতে পারে
উদাহরণ:
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
START TRANSACTION;
SELECT * FROM Employees;
৪. SERIALIZABLE
SERIALIZABLE হল সবচেয়ে শক্তিশালী আইসলেশন লেভেল, যেখানে এক ট্রানজেকশন সম্পূর্ণভাবে অন্য ট্রানজেকশনগুলির সাথে বিরোধিতা করে। এই লেভেলে, একে অপরের মধ্যে কোনো ধরণের Dirty Read, Non-repeatable Read, বা Phantom Read হয় না। এটি ডেটাবেসে পুরোপুরি সিরিয়াল কার্যক্রমের মত কাজ করে, তবে পারফরম্যান্স কিছুটা কমিয়ে দেয় কারণ একাধিক ট্রানজেকশনকে একটি সময়ে চলতে দেয় না।
- Dirty Read বন্ধ
- Non-repeatable Read বন্ধ
- Phantom Read বন্ধ
উদাহরণ:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
START TRANSACTION;
SELECT * FROM Employees;
Transaction Isolation Levels এর তুলনা
| Isolation Level | Dirty Read | Non-repeatable Read | Phantom Read |
|---|---|---|---|
| READ UNCOMMITTED | Allowed | Allowed | Allowed |
| READ COMMITTED | Not Allowed | Allowed | Allowed |
| REPEATABLE READ | Not Allowed | Not Allowed | Allowed |
| SERIALIZABLE | Not Allowed | Not Allowed | Not Allowed |
ব্যবহারকারী পরিস্থিতি অনুযায়ী আইসলেশন লেভেল নির্বাচন
- READ UNCOMMITTED: যখন পারফরম্যান্স সবচেয়ে বেশি গুরুত্বপূর্ণ, এবং ডেটার সামান্য অখণ্ডতা সমস্যা গ্রহণযোগ্য।
- READ COMMITTED: যেখানে ডেটা সামান্য পরিবর্তন হলেও চলবে এবং আপনি কমিট হওয়া ডেটাই দেখতে চান, তবে কিছু পারফরম্যান্স কম্প্রোমাইজ হবে।
- REPEATABLE READ: যখন ডেটার পুনরাবৃত্তি নিশ্চিত করা প্রয়োজন, কিন্তু পারফরম্যান্স কিছুটা কমবে।
- SERIALIZABLE: সর্বোচ্চ ডেটা সঠিকতা এবং একাধিক ট্রানজেকশনের মধ্যে সর্বোচ্চ আইসলেশন নিশ্চিত করতে হবে, তবে পারফরম্যান্স অনেকটাই কমে যাবে।
সারাংশ
মারিয়া ডিবি (MariaDB) তে Transaction Isolation Levels ব্যবহার করে আপনি ট্রানজেকশনের মধ্যে ডেটার দৃশ্যমানতা এবং একে অপরের সাথে সম্পর্কিত আচরণ নিয়ন্ত্রণ করতে পারেন। এর মাধ্যমে dirty reads, non-repeatable reads, এবং phantom reads নিয়ন্ত্রণ করা যায়। পারফরম্যান্স এবং ডেটার সঠিকতার মধ্যে সঠিক ভারসাম্য বজায় রাখতে এই লেভেলগুলির নির্বাচন গুরুত্বপূর্ণ।
Deadlock Management এবং Concurrency Control মারিয়া ডিবি (MariaDB)-তে ডেটাবেস ট্রানজেকশন ম্যানেজমেন্টের গুরুত্বপূর্ণ অংশ। এগুলি ডেটাবেসের সঠিক কর্মক্ষমতা এবং ডেটার অখণ্ডতা নিশ্চিত করতে সাহায্য করে, বিশেষ করে যখন একাধিক ট্রানজেকশন একই সময়ে সম্পাদিত হয়।
Deadlock Management
Deadlock একটি পরিস্থিতি, যেখানে দুটি বা দুটি অধিক ট্রানজেকশন একে অপরের উপর নির্ভরশীল হয়ে পড়ে এবং তারা একে অপরকে অবরুদ্ধ করে রাখে, ফলে কেউই সম্পন্ন হতে পারে না। ডেডলক সাধারণত ঘটে যখন একাধিক ট্রানজেকশন একে অপরের জন্য অপেক্ষা করছে, এবং কোনও একটির সম্পন্ন হওয়ার জন্য অন্যটির সম্পন্ন হওয়া প্রয়োজন।
ডেডলক কীভাবে ঘটে?
ধরা যাক, দুটি ট্রানজেকশন:
- ট্রানজেকশন ১: প্রথমে টেবিল A-কে লক করে এবং পরে টেবিল B-কে লক করার চেষ্টা করে।
- ট্রানজেকশন ২: প্রথমে টেবিল B-কে লক করে এবং পরে টেবিল A-কে লক করার চেষ্টা করে।
এখন, ট্রানজেকশন ১ টেবিল B-এ লক করতে চায়, কিন্তু সেই লকটি ট্রানজেকশন ২-এর দখলে। একইভাবে, ট্রানজেকশন ২ টেবিল A-এ লক করতে চায়, কিন্তু সেটি ট্রানজেকশন ১-এর দখলে। এই পরিস্থিতিতে দুটো ট্রানজেকশনই একে অপরকে অবরুদ্ধ করে রাখে, যা deadlock হিসেবে চিহ্নিত হয়।
ডেডলক ম্যানেজমেন্টে মারিয়া ডিবি
মারিয়া ডিবি স্বয়ংক্রিয়ভাবে ডেডলক সনাক্ত করে এবং এর সাথে সম্পর্কিত ট্রানজেকশনগুলিকে রোলব্যাক করে। ডেডলক সনাক্ত হলে, এক বা একাধিক ট্রানজেকশন রোলব্যাক করা হয়, এবং সাধারণত সেই ট্রানজেকশনটি যা কম রিসোর্স ব্যবহার করেছে বা কম প্রভাব ফেলেছে, সেটি প্রথমে রোলব্যাক হয়।
ডেডলক ম্যানেজমেন্ট সক্রিয় করার জন্য কিছু কনফিগারেশন সেট করা যেতে পারে:
[mysqld]
innodb_lock_wait_timeout = 50
এখানে, innodb_lock_wait_timeout হলো সময়সীমা যা ডেডলক সনাক্ত করতে ব্যবহৃত হয়। যদি কোনও ট্রানজেকশন ইননডিবি লকের জন্য ৫০ সেকেন্ডের বেশি অপেক্ষা করে, তবে এটি ডেডলক হিসেবে ধরা হবে এবং রোলব্যাক হবে।
ডেডলক লগিং
ডেডলক সম্পর্কিত লগ দেখতে, আপনি ডেটাবেসের innodb_status ব্যবহার করতে পারেন:
SHOW ENGINE INNODB STATUS;
এটি ইননডিবি স্ট্যাটাস প্রদান করবে, যার মধ্যে ডেডলক সম্পর্কিত তথ্যও থাকবে।
Concurrency Control
Concurrency Control হল ডেটাবেসের এমন একটি প্রক্রিয়া যা একাধিক ট্রানজেকশনকে একযোগভাবে সম্পাদিত হওয়ার সুযোগ প্রদান করে, তবে ডেটার অখণ্ডতা বজায় রেখে। মারিয়া ডিবি তে এটি একটি গুরুত্বপূর্ণ ভূমিকা পালন করে, বিশেষ করে যখন একাধিক ব্যবহারকারী একই সময়ে ডেটাবেসে কাজ করছেন।
Types of Concurrency Control
- Pessimistic Concurrency Control
এটি এমন একটি কৌশল, যেখানে একাধিক ট্রানজেকশন একই ডেটাতে কাজ করতে পারে না যতক্ষণ না প্রথম ট্রানজেকশনটি সম্পন্ন হয়। অর্থাৎ, যখন একটি ট্রানজেকশন কোনো ডেটাকে লক করে নেয়, তখন অন্যান্য ট্রানজেকশন সেগুলোর উপর কাজ করতে পারবে না। - Optimistic Concurrency Control
এই কৌশলে, ট্রানজেকশনগুলো একে অপরের উপর লক না করে ডেটাতে কাজ করতে পারে। ট্রানজেকশনটি শেষ হওয়ার সময় যদি কোন কনফ্লিক্ট পাওয়া যায়, তবে তখন সেগুলো রোলব্যাক হয় এবং পুনরায় চেষ্টা করা হয়।
মারিয়া ডিবি তে Concurrency Control
মারিয়া ডিবি তে InnoDB স্টোরেজ ইঞ্জিন MVCC (Multi-Version Concurrency Control) ব্যবহার করে, যা একাধিক ট্রানজেকশনকে একসাথে কার্যকর করতে সহায়তা করে। MVCC একটি ট্রানজেকশনকে ডেটাবেসে প্রিভিউ কপি বা ভার্সন তৈরি করে, যাতে ট্রানজেকশনগুলো একে অপরের উপর প্রভাব ফেলতে না পারে।
- InnoDB টেবিলগুলিতে MVCC ব্যবহার করে, একাধিক ট্রানজেকশন একে অপরের সাথে সংঘর্ষ ছাড়াই একে অপরের উপর কাজ করতে পারে।
- ডেটাবেসে লক করার সময় ROW-level locking (লাইন লকিং) ব্যবহার করা হয়, যা পেজ বা টেবিল লকিংয়ের তুলনায় আরও নির্দিষ্ট এবং কার্যকরী।
Transaction Isolation Levels
মারিয়া ডিবি-তে transaction isolation levels ব্যবহৃত হয়, যা ট্রানজেকশনগুলোর মধ্যে পারস্পরিক সম্পর্ক নিয়ন্ত্রণ করে। এতে চারটি প্রধান আইসোলেশন লেভেল আছে:
- READ UNCOMMITTED: সর্বনিম্ন আইসোলেশন, যেখানে ট্রানজেকশন একে অপরের অ-কমিটেড ডেটা দেখতে পারে।
- READ COMMITTED: প্রতিটি ট্রানজেকশন শুধুমাত্র কমিট হওয়া ডেটা দেখতে পারে।
- REPEATABLE READ: ট্রানজেকশন যে ডেটা একবার পড়েছে, তা অন্য ট্রানজেকশনের দ্বারা পরিবর্তিত হতে পারে না।
- SERIALIZABLE: সর্বোচ্চ আইসোলেশন, যেখানে একাধিক ট্রানজেকশন একে অপরের পরিপূরক না হয়ে একে একে সম্পন্ন হয়।
এটি কনফিগার করতে, আপনি নিচের SQL ব্যবহার করতে পারেন:
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
Concurrency Control-এর টিউনিং
Concurrency control-এ আরও কার্যকরী করার জন্য কিছু কনফিগারেশন সেটিংস:
- innodb_lock_wait_timeout: ট্রানজেকশন কত সেকেন্ড পর্যন্ত লক হতে পারে।
- innodb_flush_log_at_trx_commit: এই সেটিংটি ডেটাবেসের রেকর্ড লগ ফ্লাশিং নিয়ন্ত্রণ করে, যা পারফরম্যান্সে প্রভাব ফেলতে পারে।
সারাংশ
মারিয়া ডিবি (MariaDB) তে Deadlock Management এবং Concurrency Control ডেটাবেসের কার্যকারিতা এবং ডেটার অখণ্ডতা বজায় রাখতে গুরুত্বপূর্ণ ভূমিকা পালন করে। ডেডলক ম্যানেজমেন্টে সিস্টেম স্বয়ংক্রিয়ভাবে ডেডলক সনাক্ত করে এবং প্রভাবিত ট্রানজেকশন রোলব্যাক করে। অপরদিকে, কনকারেন্ট ট্রানজেকশনগুলির মধ্যে সঠিক সমন্বয় রক্ষায় MVCC এবং transaction isolation levels ব্যবহৃত হয়। যথাযথ কনফিগারেশন এবং কৌশল ব্যবহার করে আপনি মারিয়া ডিবি-তে কার্যকরী পারফরম্যান্স এবং নির্ভরযোগ্যতা অর্জন করতে পারবেন।
Read more