Sobes.tech
Senior

მუშაკი გრძელვადიანი მუშაობა (2 წუთი), ტრანზაქცია რჩება ბაზაში ჩავარდნის დროს — რა უნდა გავაკეთო?

sobes.tech AI

პასუხი AI-სგან

যদি একজন কর্মী দীর্ঘ সময় (প্রায় 2 মিনিট) কাজ করে এবং পতনের সময়ে লেনদেনটি ডাটাবেসে থাকে, তবে এর মানে লেনদেনটি সঠিকভাবে শেষ হয়নি (commit/rollback), এবং ডাটাবেস ব্লক রাখে।

কি করবেন:

  1. Go-তে একটি টাইমআউট সহ প্রসঙ্গ ব্যবহার করুন যাতে লেনদেনের সময় সীমিত হয়। উদাহরণস্বরূপ:
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer cancel()

err := db.WithContext(ctx).Transaction(func(tx *gorm.DB) error {
    // অপারেশনসমূহ
    return nil
})
  1. ত্রুটি পরিচালনা করুন এবং ব্যর্থ হলে রোলব্যাক নিশ্চিত করুন।

  2. ডাটাবেস লগ পরীক্ষা করুন যাতে আটকে থাকা লেনদেনগুলি শনাক্ত করা যায় এবং প্রয়োজনে ম্যানুয়ালি শেষ করুন।

  3. হ্রদস্পন্দন বা স্বাস্থ্য পরীক্ষা মেকানিজম ব্যবহার বিবেচনা করুন যাতে পতনের সময় কাজগুলি স্বয়ংক্রিয়ভাবে পুনরায় শুরু হয়।

  4. কর্মীর কাজের প্রক্রিয়া অপ্টিমাইজ করুন, যাতে লেনদেন দীর্ঘ সময় ধরে না থাকে — সম্ভবত কাজটি ছোট ছোট অংশে ভাগ করুন।

এটি গুরুত্বপূর্ণ যে, লেনদেনের জীবনকাল নিয়ন্ত্রণ করুন এবং সেগুলি সঠিকভাবে শেষ করুন, যাতে ব্লকিং এবং স্থবির অবস্থা এড়ানো যায়।