কীভাবে পুনরুত্পাদন করতে হবে "ডেটা চলাচলের কারণে NOLOCK দিয়ে স্ক্যান চালিয়ে যেতে পারেনি"


10

আমি মাঝে মধ্যে NOLOCKকিছু বড় কাজের সাথে "ডেটা চলাচলের কারণে স্ক্যান চালিয়ে যেতে পারিনি ", যা WITH (NOLOCK)নির্বাচিত প্রশ্নগুলিতে থাকে।

আমি বুঝতে পারি যে এটির একটি পৃষ্ঠা বিভক্ত হয়ে যাওয়ার পরে ডেটা বাছাই করার চেষ্টা করার সাথে এর কিছু করার আছে - যা মনে করা হচ্ছিল যে ডেটা আর থাকবে না - আমি ধরে নিই যা আমার পরিবেশে ঘটছে।

আমি কীভাবে এটি পুনরুত্পাদন করব?

আমি ত্রুটিটি ধরার জন্য একটি স্বল্প-মেয়াদী কাজ করার চেষ্টা করছি এবং যখন এটি ঘটে তখন আবার চেষ্টা করব, তবে আমি যদি এটি পুনরুত্পাদন করতে না পারি তবে এটি পরীক্ষা করতে পারছি না। এটির কারণ হিসাবে যুক্তিযুক্ত কোনও নির্ভরযোগ্য উপায় আছে?

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

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

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

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


1
আপনি কি NOLOCKএই কাজগুলি থেকে সরানো বিবেচনা করেছেন ? যদি এই প্রশ্নের ফলাফলগুলি সঠিক বলে মনে করা হয় তবে আপনার উদ্বেগের মধ্যে 601 হওয়া উচিত । পল হোয়াইট ডেটা পড়ার একটি বিশেষত ভয়ানক উদাহরণ দেখায় যা এখানে সম্ভব না হওয়া উচিত ।
অ্যারন বারট্রান্ড

3
আপনি চাকরিতে সেট DEADLOCK_PRIORITYকরতে LOWপারেন, যাতে যদি ডেডলক থাকে তবে চাকরীগুলি ব্যর্থ হবে, অ্যাপ্লিকেশনগুলিতে নয়। এর পরে, আপনি অচল তালিকাগুলি নিয়ে গবেষণা করতে পারেন এবং তারা কেন ঘটছে তা খুঁজে পেতে এবং সেই সমস্যাটি সমাধান করতে পারেন। এটি একটি খুব সাধারণ ফিক্স হতে পারে, যেমন দুটি স্টেটমেন্টের ক্রমটি অদলবদল করা। সমস্যা যাই হোক না কেন, সমাধান নয় , তাই এটি সবচেয়ে সহজ কারণ NOLOCKহ'ল জোর করার চেষ্টা করা বন্ধ করুন।
অ্যারন বারট্র্যান্ড

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

1
আপনি উল্লেখ করেছিলেন যে অচলাবস্থার সন্ধানের জন্য আপনি বেশ কঠিন সময় কাটাচ্ছেন। প্রদত্ত যে আপনি ২০০৮ আর 2 এ আছেন আপনি এখানে দেখতে পাবেন: sqlservercentral.com/articles/deadlock/65658 জোনাথন কেহায়িয়াস রিং বাফার থেকে অচলাবস্থার তথ্য টানতে চলেছে।
কেনেথ ফিশার 21

উত্তর এবং মন্তব্যগুলি অন্তর্নিহিত সমস্যাটিকে ভালভাবে সম্বোধন করে, তবে আপনি কি এখনও এটিকে বৌদ্ধিক অনুশীলন হিসাবে পুনরুত্পাদন করার উপায় খুঁজতে আগ্রহী?
জেমস এল

উত্তর:


8

যেহেতু NOLOCK ইস্যুগুলির একটি সম্ভাব্য 'ব্যান্ড এইড' হ'ল NOLOCK ব্যবহার বন্ধ করা এবং READ_COMMITTED_SNAPSHOT বিচ্ছিন্নতা ব্যবহার শুরু করা, তাই আমি আপনাকে কেন্দ্র লিটেলের http://www.brentozar.com এ ব্লগ পোস্টের দিকে ইঙ্গিত করতে চাই : স্ন্যাপশট বাস্তবায়ন বা পড়ুন প্রতিশ্রুতিবদ্ধ এসকিউএল সার্ভারে স্ন্যাপশট বিচ্ছিন্নকরণ: একটি গাইড

কেন্দ্র READ_COMMITTED_SNAPSHOT বিচ্ছিন্নতা স্তরটি ব্যবহার করে সুবিধাগুলি এবং ঝুঁকি নিয়ে মোটামুটি বিশদ সরবরাহ করে।

  1. এই বিচ্ছিন্নতা স্তরটি ডাটাবেস কোডের জন্য ডিফল্ট বিচ্ছিন্নতা স্তরে পরিণত হয়।
  2. READ_COMMITTED_SNAPSHOT বিচ্ছিন্নতা স্তরে পরিবর্তন আনতে আপনার ডাটাবেসে কেবলমাত্র একজন ব্যবহারকারী থাকতে হবে।
  3. এমনকি যদি আপনি READ_COMMITTED_SNAPSHOT বিচ্ছিন্নতা ব্যবহার করেন তবে আপনার ডিফল্টটিকে ওভাররাইড করার কারণে আপনাকে এখনও NOLOCK ইঙ্গিতগুলি সরিয়ে ফেলতে হবে
  4. আপনার কোডগুলির কয়েকটিতেও নিরাময়ের দরকার রয়েছে এমন সমস্যাও থাকতে পারে।

কয়েক বছর আগে আমরা একটি ডাটাবেসে READ_COMMITTED_SNAPSHOT বিচ্ছিন্নতা প্রয়োগ করেছি যা ব্লক করে মারাত্মকভাবে ভুগছিল । তবে একবার আমরা বিচ্ছিন্নতার স্তরটি পরিবর্তন করেছি আমরা কয়েকটা সমালোচনামূলক অঞ্চলে অচলাবস্থা শুরু করি ।

এটা কেন হল? আগের বিচ্ছিন্নতা স্তরটি ভারী অবরুদ্ধ হওয়ার কারণে, কোডটি "কখনই" ডেডলকিংয়ের পর্যায়ে পৌঁছতে পারে না। তবে, READ_COMMITTED_SNAPSHOT বিচ্ছিন্নতার সাথে, প্রশ্নগুলি এগিয়ে চলতে পারে moving যাইহোক, আর অপেক্ষারত লেনদেনের কিছু শতাংশ অচল করে দেওয়া শুরু করে।

ভাগ্যক্রমে আমাদের কেস দ্রুত সমাধান করা হয়েছিল অচলাবস্থার পয়েন্টগুলি নির্ধারণ করে এবং আরও কিছু যুক্তিযুক্ত কলামের আদেশ পেতে কয়েকটি টেবিলে সূচিগুলি সামঞ্জস্য করে। এটি আমাদের লক করার সমস্যাগুলিকে ব্যাপকভাবে হ্রাস করেছে।

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