কোনও প্রক্রিয়া অচলাবস্থার শিকার হওয়ার কারণ


105

আমার একটি সিলেক্টের একটি প্রক্রিয়া রয়েছে যা 5 থেকে 10 মিনিটের ক্রম অনুসারে শেষ করতে দীর্ঘ সময় নেয়।
আমি বর্তমানে এমএস এসকিউএল ডাটাবেস ইঞ্জিনের ইঙ্গিত হিসাবে NOLOCK ব্যবহার করছি না।
একই সময়ে আমাদের কাছে একই প্রক্রিয়াটি একই ডেটাবেস এবং একই টেবিলগুলিতে আপডেট এবং সন্নিবেশ করানো রয়েছে।
প্রথম প্রক্রিয়াটি সম্প্রতি শুরু হয়েছিল, একটি বার্তা দিয়ে অকালপূর্বে শেষ করতে

দক্ষতা: অন্য প্রক্রিয়াটির সাথে লক সংস্থাগুলিতে লেনদেন ডেডলক করা হয়েছিল এবং অচলাবস্থার শিকার হিসাবে নির্বাচিত হয়েছে।

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

  1. কোনও লেনদেনের জন্য কার্যকর সময়টি কি সংযুক্ত প্রক্রিয়াটিকে অচলাবস্থার শিকার হিসাবে চিহ্নিত করার সম্ভাবনা তৈরি করতে পারে?
  2. যদি আমি কোনও নলক ইঙ্গিত দিয়ে নির্বাচনটি সম্পাদন করি তবে এটি কী সমস্যাটি সরিয়ে দেবে?
  3. আমি সন্দেহ করি যে নির্বাচনী বিবৃতিতে WHWEE ধারাটির অংশ হিসাবে পরীক্ষা করা একটি ডেটটাইম ফিল্ড ধীর অনুসন্ধানের সময় ঘটাচ্ছে। আমি কি এই ক্ষেত্রের উপর ভিত্তি করে একটি সূচক তৈরি করতে পারি? এটা পরামর্শ দেওয়া হয়?

পয়েন্ট 1 এর আংশিক উত্তর: একটি সময়সীমা নিয়ে কোনও অচলাবস্থাকে বিভ্রান্ত করবেন না। আপনি যদি সময়সাপেক্ষে ভুগছিলেন তবে একটি লেনদেন শেষ করার সাথে জড়িত সময়টি অন্য অনুপস্থিতির জন্য দায়ী হতে পারে। এছাড়াও, আপনি কোন সংস্থায় ডেডলক করছেন তা (এটি কোনও সূচক বা কোনও টেবিল?) তা অবগত হওয়া অবধারিত হবে।
নিলবি

1
ডেটাব্লক_প্রিয়রিটি সেট করুন উচ্চ ডেটাব্যাসের পরে ডাবনাম সেট মাল্টি_উসার;
gstackoverflow

উত্তর:


128

প্রশ্নোত্তর: কোনও লেনদেনের সময় কার্যকর করতে কার্যকর প্রক্রিয়াটিকে অচলাবস্থার শিকার হিসাবে চিহ্নিত করার সম্ভাবনা তৈরি করতে পারে কি?

নির্বাচিতটি ক্ষতিগ্রস্থ হবেন কারণ এটি কেবলমাত্র ডেটা পড়েছিল, সুতরাং লেনদেনের সাথে এটির সাথে কম ব্যয় যুক্ত হয়েছে তাই শিকার হিসাবে বেছে নেওয়া হয়েছে:

ডিফল্টরূপে, ডেটাবেস ইঞ্জিন লেনদেন চালাবার সেশনটি অচলাবস্থার শিকার হিসাবে বেছে নেয় যা পিছনে পিছনে কম ব্যয়বহুল । বিকল্পভাবে, কোনও ব্যবহারকারী SET DEADLOCK_PRIORITYবিবৃতিটি ব্যবহার করে অচলাবস্থায় সেশনগুলির অগ্রাধিকার নির্দিষ্ট করতে পারেন । DEADLOCK_PRIORITY কম, সাধারণ বা উচ্চ স্থানে সেট করা যেতে পারে, বা বিকল্পভাবে ব্যাপ্তির কোনও পূর্ণসংখ্যার মান (-10 থেকে 10) এ সেট করা যেতে পারে।

Q2 এর। যদি আমি কোনও নলক ইঙ্গিত দিয়ে নির্বাচনটি সম্পাদন করি তবে এটি কী সমস্যাটি সরিয়ে দেবে?

না। বিভিন্ন কারণে:

চতুর্থাংশ 3। আমি সন্দেহ করি যে নির্বাচনী বিবৃতিতে WHWEE ধারাটির অংশ হিসাবে পরীক্ষা করা একটি ডেটটাইম ফিল্ড ধীর অনুসন্ধানের সময় ঘটাচ্ছে। আমি কি এই ক্ষেত্রের উপর ভিত্তি করে একটি সূচক তৈরি করতে পারি? এটা পরামর্শ দেওয়া হয়?

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

99% আত্মবিশ্বাসের সাথে আমি ঘোষণা করি যে আপনার অচলাবস্থা আপডেটের সাথে বিরোধী একটি বড় টেবিল স্ক্যান দ্বারা কেস করা হয়েছে। কারণ বিশ্লেষণ করতে ডেডলক গ্রাফ ক্যাপচার করে শুরু করুন । আপনাকে খুব সম্ভবত আপনার ডাটাবেসের স্কিমা অনুকূল করতে হবে। আপনি কোনও পরিবর্তন করার আগে, এই বিষয়টি ডিজাইনিং সূচী এবং উপ-নিবন্ধগুলি পড়ুন।


আপনার পুরো উত্তর জন্য আপনাকে ধন্যবাদ। আমার ধারণা এখনও আমার একটি প্রশ্ন রয়েছে। আমি কেন অন্য পরিবেশে না শুধুমাত্র একটি পরিবেশে অচলাবস্থার পরিস্থিতি পাব। যদিও সফটওয়্যারটি একই রকম। আপনার উত্তরটি পরামর্শ দেয় যে সিলেক্ট ক্যোয়ারী চালানোর সময়সীমাটি কোনও তাত্পর্য রাখে না এবং এটি সত্য যে এটি প্রতি সিলেক্ট ক্যোয়ারী যা প্রক্রিয়াটিকে ব্যর্থ করে তুলছে। তবে, কেন কেবল যখন নির্বাচিত ক্যোয়ারী কার্যকর করতে দীর্ঘ সময় নেয়?
এলিয়ট

4
ক্যোয়ারির দৈর্ঘ্য অচলাবস্থার শিকারটিকে বেছে নেওয়ার ক্ষেত্রে কোনও পার্থক্য করে না । এটি কমপক্ষে দুটি কারণ দ্বারা অচলাবস্থা সৃষ্টি করতে পার্থক্য তৈরি করে: 1) সাধারণ সম্ভাবনা। ক্যোয়ারি যত দীর্ঘ হবে, সমবর্তী আপডেটগুলি ওভারল্যাপ করার এবং ডেডলকগুলিতে চালিত হওয়ার সম্ভাবনা তত বেশি। 2) একটি বৃহত টেবিলটি সম্পূর্ণ আলাদা ক্যোয়ারী পরিকল্পনা ব্যবহার করতে পারে, এটি একটি ডেডলকগুলির পক্ষে সংবেদনশীল।
রিমাস রুসানু

12

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


34
কেউ ব্যাখ্যা করতে পারেন কেন? (যাদু সমাধানগুলি খুব বেশি সহায়ক নয়)
ওগ্রান্ডেডিইনে

1
এই লোকটি তার পোস্টে এটি ব্যাখ্যা করেছে: mssqltips.com/sqlservertip/2517/…
siga0984

6

এখানে উত্তরগুলি চেষ্টা করার মতো, তবে আপনার কোডটিও পর্যালোচনা করা উচিত। বিশেষত এখানে পলিফনের উত্তরটি পড়ুন: এসকিউএল সার্ভার 2005 এবং সি # অ্যাপ্লিকেশনটিতে ডেডলক থেকে কীভাবে মুক্তি পাবেন?

এটি সম্মতি সংক্রান্ত সমস্যাটি ব্যাখ্যা করে এবং আপনার প্রশ্নগুলিতে "উইথ (আপডেটলক)" এর ব্যবহার কীভাবে আপনার অচলাবস্থার পরিস্থিতি সংশোধন করতে পারে - আপনার কোড ঠিক কী করছে তার উপর নির্ভর করে। যদি আপনার কোড এই প্যাটার্নটি অনুসরণ করে তবে নোংরা পাঠ ইত্যাদির অবলম্বন করার আগে এটি সম্ভবত আরও ভাল করা fix


0

যদিও @ রেমাস Rusanu এর ইতিমধ্যে একটি excelent উত্তর, কেস এক এগিয়ে এ আপনি আরো ভালো অন্তর্দৃষ্টি খুঁজছেন হয় এসকিউএল সার্ভারের অচলাবস্থা কারণ ও ট্রেস কৌশল, আমি পড়তে আপনার সুপারিশ করবে ব্র্যাড McGehee 's SQL সার্ভার 2005 প্রোফাইলার ব্যবহার ট্র্যাক নিচে ডেডলক কিভাবে

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