এসকিউএল সার্ভার লেনদেনের সময়সীমা


9

লেনদেনের সাথে জড়িত একটি ডাটাবেস পরিবর্তনের জন্য টাইমআউট হওয়ার জন্য এসকিউএল সার্ভার ২০০৮ আর 2 এর কোনও উপায় আছে কি? আমাদের এমন একটি দৃশ্য রয়েছে যেখানে আমাদের অ্যাপ্লিকেশন কোডটি একটি ব্যতিক্রম স্থগিত করে বা ছোঁড়ে এবং কোনও রোলব্যাক বা প্রতিশ্রুতিবদ্ধ করতে ব্যর্থ হয়। এরপরে অন্য সেশনগুলি লেনদেনটি সম্পূর্ণ হওয়ার জন্য অপেক্ষা করে hang

উত্তর:


20

মার্কের উত্তর প্রসারিত করা হচ্ছে ...

যখন ক্লায়েন্টের টাইমআউট ইভেন্ট ঘটে (উদাহরণস্বরূপ .net কমান্ডটাইমআউট), ক্লায়েন্ট এসকিউএল সার্ভারে একটি "ABORT" প্রেরণ করে। এসকিউএল সার্ভারটি তখন সহজেই ক্যোয়ারী প্রসেসিংটি ত্যাগ করে। কোনও লেনদেন আবার ঘুরিয়ে দেওয়া হয় না, কোনও লক প্রকাশ হয় না।

এখন, সংযোগটি পুলটিতে ফিরে এসেছে, সুতরাং এটি এসকিউএল সার্ভারে বন্ধ নেই isn't যদি এটি কখনও ঘটে (কেআইএলএল বা ক্লায়েন্ট রিবুট ইত্যাদির মাধ্যমে) তবে লেনদেন + লক সাফ হয়ে যাবে। নোট করুন যে sp_reset_connication এগুলি করার জন্য বিজ্ঞাপন দেওয়া সত্ত্বেও সেগুলি সাফ করবে না বা সাফ করবে না

গর্ভপাত থেকে এই ডিপ্রিটাস অন্যান্য প্রক্রিয়া অবরুদ্ধ করবে।

এসকিউএল সার্ভারকে ক্লায়েন্ট টাইম আউট (স্পষ্টভাবে, ABORT ইভেন্টগুলি) লকগুলি স্পষ্ট লেনদেন করার উপায়টি হল SET XACT_ABORT চালু।

আপনি এটি এসএসএমএসে 2 টি কোয়েরি উইন্ডো খোলার যাচাই করতে পারেন:

উইন্ডো 1:

মেনু ক্যোয়ারিতে ... ক্যোয়ারী বিকল্পগুলি 5 সেকেন্ডের একটি সময়সীমা নির্ধারণ করে এটি চালান

BEGIN TRAN
UPDATE sometable WITH (TABLOCKX) SET foo = foo WHERE 1 = 0;
WAITFOR DELAY '00:00:10' -- just has to be longer then timeout

উইন্ডো 2, এটি চিরকাল অপেক্ষা করবে (অথবা আপনার সময়সীমাটি হিট করবে)

SELECT * FROM sometable

SET XACT_ABORT চালু এর আকর্ষণীয় পার্শ্ব প্রতিক্রিয়াও রয়েছে:

  • অন্তর্ভুক্ত রোলব্যাকের ক্ষেত্রে @@ ট্রান্ট শূন্যে সেট করা আছে তবে ত্রুটি 266 টি দমন করা হয় (যদি এমন হয় যদি @@ ট্রানট্র্যাক্ট সঞ্চিত সংগ্রহ থেকে প্রস্থান এবং প্রস্থানের ক্ষেত্রে আলাদা হয়)
  • XACT_STATE হবে -১ (এটি "ডুমুড")

এর সংমিশ্রণের অর্থ হ'ল আপনি আংশিক কমিটি / রোলব্যাকের জন্য সঞ্চয়পত্রগুলি (যদিও, আমি সঠিক আচরণটি স্মরণ করতে পারি না) ব্যবহার করতে পারবেন না। যা আমার জন্য উপযুক্ত

এসইটি XACT_ABORT এ লিঙ্কগুলি:

নেস্টেড স্টোরেড প্রোকসগুলিতে:

এসপি_সেট_ সংযোগে:


ভাবী বলে হাই! "নোট করুন যে sp_reset_connication এগুলি করার জন্য বিজ্ঞাপন দেওয়া সত্ত্বেও এগুলি তাদের সাফ করবে না বা সাফ করবে না" - এসকিউএল সার্ভারের আপ-টু-ডেট সংস্করণগুলিতে এটি আর সত্য বলে আমি বিশ্বাস করি না?
কামিল্ক

11

সমস্যাটির বিবরণে পর্যাপ্ত তথ্য না থাকায় আমি দ্বিধায় এই জবাব দিচ্ছি যে এটি সর্বোত্তম পরামর্শ। "স্তব্ধ হয়ে যায় বা একটি ব্যতিক্রম ছোঁড়ে" ইঙ্গিত দেয় যে সমস্যার উত্সটি সঠিকভাবে বোঝা যায় নি, তাই সাবধানতার সাথে এগিয়ে যান।

এই সবচেয়ে সহজ সমাধান সম্ভবত SET XACT_ABORT ON

XACT_ABORTরান-টাইম ত্রুটির ক্ষেত্রে এসকিউএল সার্ভার কোনও লেনদেনকে রোলব্যাক করবে কিনা তা নির্ধারণ করে। ডিফল্টটি SET XACT_ABORT OFFকেবলমাত্র বিবৃতিটি রোলব্যাক করবে যা কোনও ত্রুটি সৃষ্টি করেছিল, কোনও পিতামাতার লেনদেন উন্মুক্ত রেখে দেয়।

ডিফল্ট সেটিংয়ের "গোটচা" পার্শ্ব-প্রতিক্রিয়াটি হ'ল সময়সীমা ঠিক একই সমস্যার কারণ হতে পারে, একটি উন্মুক্ত লেনদেন যা ক্লায়েন্টদের পরিচালনা এবং রোলব্যাক করার দায়িত্ব। যদি ক্লায়েন্টটি / ধরা / রোলব্যাক চেষ্টা না করে তবে লেনদেনটি অতি-সহিংসতার সাথে উপস্থিত না হওয়া পর্যন্ত (এবং আমি @ জিবিএন উদ্ধৃতি দিয়ে) অবধি উন্মুক্ত থাকবে KILL <spid>

দ্য ট্যেলটি এসকিউএল সার্ভারে ত্রুটি পরিচালনার বিষয়ে আর্মল্যান্ড সোমমারস্কোগের নিবন্ধগুলি উদ্ধৃত করেছে যাতে এই পরিস্থিতিগুলি এবং আরও অনেক কিছু মোকাবেলার জন্য আপনার প্রয়োজনীয় সমস্ত পটভূমি এবং কৌশল রয়েছে।

সম্পাদনা (নিম্নলিখিত মন্তব্য): উন্মুক্ত লেনদেন শনাক্ত করতে, sp_Woisactive সম্ভবত সবচেয়ে বৈশিষ্ট্য সম্পূর্ণ।


কিছু গুগলিংয়ের সাথে আমি হ্যাং হওয়ার সময় উন্মুক্ত লেনদেনের উপায় খুঁজে পেয়েছি - সম্ভবত এটিই সেরা সমাধান। এটি কোডে অনাবৃত লেনদেনের কারণ কী তা খুঁজে পাওয়া এবং কোডের ছিদ্রগুলি ঠিক করা। অন্যদের জন্য রেফারেন্স জন্য। > - DBCC OPENTRAN প্রাচীনতম সক্রিয় লেনদেন ফেরৎ msdn.microsoft.com/en-us/library/ms182792.aspx নাকি আরো কিছু ভালো? -> weblogs.sqlteam.com/mladenp/archive/2008/04/29/…
ডেভিড গ্রে রাইট

আমি সবসময়ই ভেবেছিলাম এরল্যান্ড এসইটি
gbn
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.