কম্পিউটার টিউটোরিয়াল

MySQL-এ স্টোরড প্রসিডিউর/ট্রিগারে ডিলে (SLEEP) যোগ করা

MySQL-এ স্টোরড প্রসিডিউর বা ট্রিগারের এক্সিকিউশনে কৃত্রিম ডিলে যোগ করতে SLEEP(seconds) ফাংশন ব্যবহার করুন। এটি মূলত টেস্টিং, ডিবাগিং বা রেট লিমিটিংয়ে কাজে লাগে।

সিনট্যাক্স

SELECT SLEEP(seconds);  -- সেকেন্ডে (ফ্লোটিং পয়েন্ট সাপোর্টেড)

স্টোরড প্রসিডিউরে উদাহরণ

DELIMITER //

CREATE PROCEDURE delay_message()
BEGIN
    SELECT SLEEP(20);  -- ২০ সেকেন্ড অপেক্ষা
    SELECT 'AFTER SLEEPING 20 SECONDS, BYE!!!' AS message;
END //

DELIMITER ;

-- কল
CALL delay_message();

ফলাফল

+-----------+
| SLEEP(20) |
+-----------+
| 0         |  -- ২০ সেকেন্ড পর রিটার্ন
+-----------+
1 row in set (20.00 sec)

+------------------------------------+
| message                            |
+------------------------------------+
| AFTER SLEEPING 20 SECONDS, BYE!!!  |
+------------------------------------+
1 row in set (20.01 sec)

ট্রিগারে SLEEP (সতর্কতা: লক হোল্ড করে)

CREATE TRIGGER trg_slow_insert
BEFORE INSERT ON sensitive_table FOR EACH ROW
BEGIN
    SELECT SLEEP(0.1);  -- ১০০ms ডিলে
END;

সতর্কতা: ট্রিগারে SLEEP ব্যবহার করলে লক হোল্ড থাকে, কনকারেন্সি হামার করতে পারে। প্রোডাকশনে এড়ান।

ব্যবহারিক কেস

  • টেস্টিং: টাইমআউট, রেট্রি লজিক, ডেডলক সিমুলেশন
  • রেট লিমিটিং: API কল লিমিট করার জন্য (বেটার: অ্যাপ্লিকেশন লেভেলে)
  • ডিবাগিং: স্লো ক্যোয়ারি সিমুলেট করতে

বিকল্প: বাজে প্র্যাকটিস এড়াতে

প্রোডাকশনে ডিলে যোগ করার পরিবর্তে:

  • অ্যাপ্লিকেশন লেভেলে রেট লিমিটার (Token Bucket, Leaky Bucket)
  • কানেকশন পুল টাইমআউট কনফিগারেশন
  • অ্যাসিঙ্ক্রোনাস প্রসেসিং (মেসেজ কিউ)

সেশন টাইমআউট সতর্কতা

SLEEP সময় wait_timeout / interactive_timeout অতিক্রম করলে কানেকশন ড্রপ হতে পারে।

  1. অ্যান্ড্রয়েডে विलম্ব (Delay) সেট করার পদ্ধতি

  2. MySQL-এ সতর্কবার্তা (warnings) দমন করার পদ্ধতি

  3. MySQL স্টোরড প্রোসিডিউরে শর্ত সেট করা (IF...ELSE)

  4. MySQL-এ COALESCE() ব্যবহার করে খালি সারি/NULL-এর জন্য ডিফল্ট মান সেট করা