একটি অনির্দিষ্ট WAITFOR গুলি চালানো লগ ফাইলের আকার বাড়ায়?


16

আমার অ্যাপ্লিকেশনের শেষ প্রকাশে, আমি একটি কমান্ড যুক্ত করেছি যা পরিষেবা ব্রোকারের কাতারে যখন কিছু আসে তখন অপেক্ষা করতে বলে:

WAITFOR (RECEIVE CONVERT(int, message_body) AS Message FROM MyQueue)

ডিবিএ আমাকে বলে যে সংযোজন থেকে লগের আকারগুলি ছাদ দিয়ে গেছে। এটা কি সঠিক হতে পারে? নাকি আমার অন্য কোথাও খোঁজ করা উচিত?

উত্তর:


17

যে কোনও সক্রিয় উন্মুক্ত লেনদেন লগটিকে পিন করবে, কাটা রোধ করবে এবং শেষ পর্যন্ত বৃদ্ধি ঘটবে। আপনি যদি কোনও লেনদেন শুরু করেন, লগটিতে লিখুন এবং তারপরে চিরকাল অপেক্ষা করুন কোনও বার্তা আপনাকে শেষ পর্যন্ত জাগিয়ে তুলবে, আপনি সবেমাত্র লগটি পিন করেছেন এবং এটিকে বাড়িয়ে তুলবেন।

ইদানীং আমি লুপের সাথে সাথে লোকেদের সক্রিয় পদ্ধতিতে WAITFOR এড়িয়ে চলার পরামর্শ দিতে শুরু করেছি। কেবলমাত্র একটি গ্রহণযোগ্য বিষয় জারি করুন এবং সম্পন্ন করুন, আপনার জন্য অ্যাক্টিভেশন প্রক্রিয়াটি লুপ করুন (এটি করে) এবং অপেক্ষার অপেক্ষা রাখে না, কেবল সরল প্রাপ্তি।

RECEIVE এর WAITFOR স্বাদ অভ্যন্তরীণভাবে একটি সেভিপয়েন্ট তৈরি করে। এটি লগ তৈরি করে (কমপক্ষে 3 টি লগ রেকর্ডস) এবং অপেক্ষা করার সময় প্রকৃতপক্ষে লগটি পিন করে। দীর্ঘ WAITFOR সময়সীমা (বা আরও খারাপ, একটি অসীম) হওয়া খুব খারাপ অভ্যাস হবে।


1
চান WAITFOR (...) TIMEOUT 3600000সমস্যার সমাধান? যেমন প্রতি ঘন্টা রিলিজ।
ক্রুদ্ধহ্যাকার

2
আপনার লগ এক ঘন্টা মধ্যে অনেক বৃদ্ধি হবে । ওয়েটফোর (আরইসি আইআইইভি) 5 সেকেন্ডের মতো বিরতির জন্য বোঝানো হয় ...
রেমাস রুসানু

1
আপনার লেনদেন আসলে সক্রিয় কেন তাও তদন্ত করা উচিত (লিখিত লগ রয়েছে)। আদর্শ পরিষেবা ব্রোকার প্যাটার্ন দো রিসিভের আগে কোনও লিখন জারি করে না।
রেমাস রুসানু

1
আমি আপনার শেষ মন্তব্য বুঝতে পারি না। লেনদেন সক্রিয় কারণ আমি একটি WAITFOR (RECEIVE...বিস্তৃত করতে পারলাম ? সম্ভবত, আমি ভুল বুঝেছি।
রাগান্বিত হ্যাকার

8
begin transaction; waitfor(receive...)অপেক্ষা করার সময় কোনও লগ রেকর্ড তৈরি করবে না (লেনদেনটি 'সক্রিয় করবে না)' এবং লগটি পিন করবে না। কেবলমাত্র begin transaction;[insert|update|delete];waitfor(receive...)লেনদেনকে 'অ্যাক্টিভেট' করতে (লগ রেকর্ড তৈরি করা) তৈরি করবে এবং এভাবে অপেক্ষা করার সময় লগটি আসলে পিন করবে।
রেমাস রুসানু

5

এসকিউএল সার্ভার ২০০৮ আর 2-তে, আমি যদি একটি ওয়েটফোর (রিসিভ) চালায় তবে ডিবিসিসি ওপেনট্রান চালান, এটি কোনও পূর্ববর্তী আপডেটের অভাবে এমনকি লেনদেনকে সক্রিয় হিসাবে দেখায়।


2
সঠিক, WAITFOR অভ্যন্তরীণভাবে একটি সেভপয়েন্ট তৈরি করে এবং এটি লগ লিখনকে ট্রিগার করে যাতে এটি স্থানে লগটি পিন করে।
রিমাস রুসানু


@ বিঙ্কি যে মন্তব্যটি এসকিউএল সার্ভার 2005-কে বোঝায়। এটি 2008 আর 2 এর জন্য। আমি যদি সঠিকভাবে মনে করি তবে তারা এই ইস্যুটি নিয়ে আলাদা আচরণ করে।
রিমাস রুসানু
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.