Senior
მუშაკი გრძელვადიანი მუშაობა (2 წუთი), ტრანზაქცია რჩება ბაზაში ჩავარდნის დროს — რა უნდა გავაკეთო?
sobes.tech AI
პასუხი AI-სგან
যদি একজন কর্মী দীর্ঘ সময় (প্রায় 2 মিনিট) কাজ করে এবং পতনের সময়ে লেনদেনটি ডাটাবেসে থাকে, তবে এর মানে লেনদেনটি সঠিকভাবে শেষ হয়নি (commit/rollback), এবং ডাটাবেস ব্লক রাখে।
কি করবেন:
- Go-তে একটি টাইমআউট সহ প্রসঙ্গ ব্যবহার করুন যাতে লেনদেনের সময় সীমিত হয়। উদাহরণস্বরূপ:
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer cancel()
err := db.WithContext(ctx).Transaction(func(tx *gorm.DB) error {
// অপারেশনসমূহ
return nil
})
-
ত্রুটি পরিচালনা করুন এবং ব্যর্থ হলে রোলব্যাক নিশ্চিত করুন।
-
ডাটাবেস লগ পরীক্ষা করুন যাতে আটকে থাকা লেনদেনগুলি শনাক্ত করা যায় এবং প্রয়োজনে ম্যানুয়ালি শেষ করুন।
-
হ্রদস্পন্দন বা স্বাস্থ্য পরীক্ষা মেকানিজম ব্যবহার বিবেচনা করুন যাতে পতনের সময় কাজগুলি স্বয়ংক্রিয়ভাবে পুনরায় শুরু হয়।
-
কর্মীর কাজের প্রক্রিয়া অপ্টিমাইজ করুন, যাতে লেনদেন দীর্ঘ সময় ধরে না থাকে — সম্ভবত কাজটি ছোট ছোট অংশে ভাগ করুন।
এটি গুরুত্বপূর্ণ যে, লেনদেনের জীবনকাল নিয়ন্ত্রণ করুন এবং সেগুলি সঠিকভাবে শেষ করুন, যাতে ব্লকিং এবং স্থবির অবস্থা এড়ানো যায়।