নলক কি সবসময় খারাপ?


34

আমি একজন প্রতিবেদন বিকাশকারী যিনি আমার প্রশ্নগুলিকে যথাসম্ভব দক্ষ করে তুলতে চান। আমি এমন কোনও ডিবিএর সাথে কাজ করতাম যিনি আমাকে বলেছিলেন - আমি বিশ্বাস করি কারণ আমি সবসময় একটি প্রোডাকশন সার্ভারের প্রতিবেদনের সাথে ডিল করি - NOLOCKপ্রতিটি একক প্রশ্নের জন্য ব্যবহার করতে ।

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

যেহেতু আমার বেশিরভাগ এসকিউএল প্রশিক্ষণটি বিভিন্ন ডিবিএর সাথে বিভিন্ন মতামত নিয়ে এসেছে, তাই আমি এটি বিভিন্ন ধরণের ডিবিএর কাছে জানতে চেয়েছিলাম।


1
এই আলোচনার অপর পক্ষ: dba.stackexchange.com/q/2684/2660
নিক চামাস

উত্তর:


30

যদি আপনার প্রতিবেদনটি আপডেট করে যাতে আপনার ডিবিএ সঠিক হয়: আপনার একেবারে ব্যবহার করা উচিত নয় NOLOCK। খুব সত্য যে হয় দ্বন্দ্ব স্পষ্ট ইঙ্গিত যে আপনি যদি হয় হবে মলিন ব্যবহার সার্চ যদি আপনি ভুল প্রতিবেদন পেতে হবে।

আমার মতে, এর চেয়ে সবসময় আরও ভাল বিকল্প থাকে NOLOCK:

  • আপনার উত্পাদনের টেবিলগুলি কেবল কার্যকরভাবে পড়ে এবং কখনই সংশোধিত হয় না? ডাটাবেসটি কেবলমাত্র পড়ার জন্য চিহ্নিত করুন!
  • টেবিল স্ক্যানগুলি লক বিবাদের কারণ? টেবিলগুলি যথাযথভাবে সূচক করুন, উপকারগুলি একাধিক।
  • পরিবর্তন করতে পারবেন না / সঠিকভাবে সূচক কীভাবে জানবেন না? এসএনএপশট বিচ্ছিন্নতা ব্যবহার করুন ।
  • স্ন্যাপশট ব্যবহার করতে অ্যাপ্লিকেশন পরিবর্তন করতে পারবেন না? প্রতিশ্রুতিবদ্ধ স্ন্যাপশট চালু করুন !
  • আপনি সারি সংস্করণটির প্রভাব পরিমাপ করেছেন এবং প্রমাণ রয়েছে যে এটির কার্যকারিতা প্রভাবিত করে? আপনি কি ডেটা ইনডেক্স করতে পারবেন না? এবং আপনি ভুল রিপোর্টে ঠিক আছেন ? তারপরে খুব কম সময়ে নিজেকে কোনও অনুগ্রহ এবং ব্যবহার করুন SET TRANSACTION ISOLATION LEVEL, কোনও প্রশ্নের ইঙ্গিত নয়। পরে প্রতিটি ক্যোয়ারী পরিবর্তন করার পরিবর্তে বিচ্ছিন্নতা স্তর ঠিক করা আরও সহজ হবে।

6
সতর্কতা অবলম্বন করুন: পড়ার প্রতিশ্রুতিবদ্ধ স্ন্যাপশট চালু করা কিছু কোড ভঙ্গ করতে পারে।
একে

33

এটা সবসময় খারাপ হয় না ।

অবশ্যই এটি আপনাকে অননুমোদিত মানগুলি পড়তে দেয় (এটি আবার ঘূর্ণায়মান হতে পারে এবং তাই যুক্তিযুক্তভাবে কখনও উপস্থিত থাকতে পারে না) পাশাপাশি একাধিকবার মানগুলি পড়ার মতো ঘটনাকে মঞ্জুরি দেয়।

একমাত্র বিচ্ছিন্নতা স্তর যা এই গ্যারান্টি দেয় যে আপনি এই জাতীয় কোনও অসঙ্গতিগুলির মুখোমুখি হবেন না সেটি হ'ল সিরিয়ালাইজযোগ্য / স্ন্যাপশট। পুনরায় পাঠযোগ্য মানগুলির অধীনে কোনও স্ক্যানটি এই সারিতে পৌঁছানোর আগে একটি কী সরিয়ে নিয়ে গেলে (কী আপডেটের কারণে) সরিয়ে নেওয়া যায়, পড়ার জন্য প্রতিশ্রুতিবদ্ধ মানগুলির অধীনে দু'বার পড়তে পারে যদি কোনও কী আপডেটের ফলে পূর্ববর্তী পঠিত সারিটি এগিয়ে যাওয়ার কারণ হয়।

এই বিষয়গুলির অধীনে উত্থাপিত হওয়ার সম্ভাবনা বেশি nolockতবে ডিফল্টরূপে, এই বিচ্ছিন্ন পর্যায়ে এটি বরাদ্দ আদেশের স্ক্যান ব্যবহার করবে যখন এটি অনুমান করে সেখানে pages৪ টিরও বেশি পৃষ্ঠা পড়তে হবে । পাশাপাশি সূচি কী আপডেটের কারণে সারিগুলি পৃষ্ঠাগুলির মধ্যে সরে যাওয়ার পরে উত্থাপিত বিষয়গুলির বিষয়শ্রেণীতে এই বরাদ্দের আদেশ হওয়া স্ক্যানগুলি পৃষ্ঠা বিভাজনগুলির সাথে সমস্যাগুলিও ঝুঁকির মধ্যে রয়েছে (যেখানে নতুন বরাদ্দকৃত পৃষ্ঠাটি বিন্দুটির চেয়ে আগে ফাইলে থাকলে সারিগুলি বাদ দেওয়া যেতে পারে) যদি ইতিমধ্যে স্ক্যান করা পৃষ্ঠাটি ফাইলের পরবর্তী পৃষ্ঠায় বিভক্ত হয় তবে ইতিমধ্যে দু'বার স্ক্যান হয়েছে বা পড়বে।

সহজ (একক টেবিল) জন্য অন্তত এটা এই স্ক্যান ব্যবহার নিরুত্সাহিত এবং একটি কী এ স্ক্যান আদেশ পাওয়ার সম্ভাবনা আছে জিজ্ঞাস্য nolockকেবল একটি যোগ করে ORDER BY index_keyক্যোয়ারী যাতে Orderedসম্পত্তির IndexScanহয় true

তবে যদি আপনার প্রতিবেদনের অ্যাপ্লিকেশনটির জন্য একেবারে সুনির্দিষ্ট পরিসংখ্যানের প্রয়োজন না হয় এবং এই জাতীয় অসংগতির বৃহত্তর সম্ভাবনা সহ্য করতে পারে তবে তা গ্রহণযোগ্য হতে পারে।

তবে অবশ্যই আপনার এই আশাটি যে সমস্ত ম্যাজিক "টার্বো" বোতাম রয়েছে তা সমস্ত প্রশ্নের উপর চেক করবেন না। পাশাপাশি সেই বিচ্ছিন্নতা স্তরে অসাধারণ ফলাফলের মুখোমুখি হওয়ার বৃহত্তর সম্ভাবনা বা কোনও ফলাফলই পাওয়া যায় না ("ডেটা মুভমেন্টের কারণে NOLOCK দিয়ে স্ক্যান চালিয়ে যেতে পারেনি" ত্রুটিযুক্ত) এমন ঘটনাও রয়েছে যেখানে এর সাথে পারফরম্যান্স nolock আরও খারাপ হতে পারে


3
+1 - আমরা এটিকে অনেক বেশি ব্যবহার করি কারণ আমাদের উত্পাদনের টেবিলগুলি কখনই সংশোধন হয় না।
জেএনকে

@ জেএনকে আপনি কী বোঝাতে চেয়েছেন কখনই সংশোধন হয় না?
কুবেরচাঁন

4
মার্টিন, আমি কিছুটা পৃথক শব্দ প্রস্তাব করব: "প্রতিশ্রুতিবদ্ধ মানগুলির অধীনে উভয়ই মিস করা যায় এবং একাধিকবার পড়তে পারে"। কিছু বিদেশী ক্ষেত্রে আমরা একাধিকবার সারি পুনরুদ্ধার করতে পারি।
একে

@ স্টারশীপ ৩০০০ আমরা উত্পাদনে যে ডেটা নিযুক্ত করি তা মূলত শেষ ব্যবহারকারীদের জন্য কেবল পঠনযোগ্য, তাই তাদের বেশিরভাগ মতামতের নোল ইঙ্গিত রয়েছে
জেএনকে

11

আপনার গ্রাহকরা কি প্রতিবেদনে অসঙ্গত ফলাফলগুলি সহ্য করছেন? উত্তরটি যদি না হয় তবে আপনার NOLOCK ব্যবহার করা উচিত নয় - আপনি সম্মতিতে ভুল ফলাফল পেতে পারেন। আমি এখানে , এখানে এবং এখানে কয়েকটি উদাহরণ লিখেছি । এই উদাহরণগুলি READ COMMITTED এবং REPEATABLE READ এর অধীনে অসঙ্গতি আউটপুট দেখায় তবে আপনি সেগুলি টুইট করতে পারেন এবং NOLOCK এর সাথেও ভুল ফলাফল পেতে পারেন।


আমি তৈরি বেশিরভাগ প্রতিবেদন বর্তমান ডেটাতে চালিত হয় না। বেশিরভাগ গ্রাহকের চলমান প্রতিবেদনগুলি গতকালের ডেটা। যদি এমন হয় তবে আপনার উত্তর কি বদলে যাবে?
ডেটাগার্ল

8

আমি তৈরি বেশিরভাগ প্রতিবেদন বর্তমান ডেটাতে চালিত হয় না। বেশিরভাগ গ্রাহকের চলমান প্রতিবেদনগুলি গতকালের ডেটা। যদি এমন হয় তবে আপনার উত্তর কি বদলে যাবে?

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

আপনি এটি সেট আপ করতে পারেন যাতে এটি প্রতি রাতে একটি ব্যাকআপ থেকে স্বয়ংক্রিয়ভাবে পুনরুদ্ধার হয়
স্পষ্টতই আপনার প্রতিবেদনগুলি গ্রাহকের সাইটে সার্ভারে চলছে, সুতরাং এটি সেট আপ করা আপনার পক্ষে কার্যকর সমাধান হতে পারে কিনা তা আমি জানি না।
(তবে তারপরেও ... তাদের যেকোন উপায়ে ব্যাকআপ থাকা উচিত, সুতরাং এগুলি পুনরুদ্ধার করার জন্য আপনার কেবল কিছু সার্ভার স্পেস দরকার)

আমি ইন-হাউস ডেভেলপার, তাই এটি আমার পক্ষে সহজ কারণ সার্ভার এবং ডেটাবেসগুলিতে আমার সম্পূর্ণ নিয়ন্ত্রণ রয়েছে।

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

কাজের ক্ষেত্রেও আমার একই অবস্থা:
আমরা প্রায় সমস্ত রিপোর্টিং স্টাফের জন্য এই জাতীয় একটি প্রোডাকশন ডেটাবেস অনুলিপি ব্যবহার করছি, তবে কয়েকটি ক্যোয়ারী রয়েছে যার জন্য আজকের ডেটা প্রয়োজন।


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