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