NOLOCK (SQL সার্ভার ইঙ্গিত) খারাপ অভ্যাস?


125

আমি ওয়েবসাইট এবং অ্যাপ্লিকেশন যে তৈরীর ব্যবসা আছি না > উদাঃ - মিশন সমালোচনামূলক। ব্যাংকিং সফটওয়্যার, স্পেস ফ্লাইট, নিবিড় পরিচর্যা পর্যবেক্ষণ অ্যাপ্লিকেশন ইত্যাদি আপনার ধারণাটি পাওয়া যায়।

সুতরাং, সেই বিশাল দাবি অস্বীকারের সাথে, কিছু এসকিএল বিবৃতিতে NOLOCK ইঙ্গিতটি ব্যবহার করা কি খারাপ? বেশ কয়েক বছর আগে, একজন সহকর্মী এসকিএল প্রশাসকের পরামর্শ দেওয়া হয়েছিল যে আমি "নোংরা পাঠ" নিয়ে খুশি থাকলে আমার NOLOCK ব্যবহার করা উচিত যা আমার সিস্টেমের বাইরে কিছুটা পারফরম্যান্স দেবে কারণ প্রতিটি পাঠক লক করে না টেবিল / সারি / যাই হোক না কেন।

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

আমি সম্প্রতি এটি সম্পর্কে কিছু গুগলিং করেছি এবং এই পোস্টটি জুড়ে এসেছি ।

তাহলে, কিছু স্কেল ডিবি গুরু সেন্সির দয়া করে আমাকে আলোকিত করতে পারেন?


আমি এটি স্যাম পাই না, আপনি বলছেন যে এটি কোনও ভারী পড়ার ওয়েবসাইট হলে স্ন্যাপশট বিচ্ছিন্নতা ব্যবহার করুন। কিন্তু তারপরে আপনি বলছেন যে তাই করেছে, এবং এটি খারাপ? বা কেবল তাদের নলক ব্যবহার?
খাঁটি.ক্রোম

উত্তর:


67

NOLOCK ইঙ্গিত সহ, SELECTবিবৃতিটির জন্য লেনদেনের বিচ্ছিন্নতা স্তর READ UNCOMMITTED। এর অর্থ হ'ল ক্যোয়ারীটি নোংরা এবং বেমানান ডেটা দেখতে পারে।

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

আমি যখন স্ন্যাপশট বিচ্ছিন্নতা সাহায্য করে এবং যখন এটির ক্ষতি হয় তখন আমি পড়ার পরামর্শ দিই - এমএসডিএন বেশিরভাগ পরিস্থিতিতে স্ন্যাপশটের পরিবর্তে রিড কমিটেড স্ন্যাপশট ব্যবহার করার পরামর্শ দেয়।


1
রেক্স, স্ন্যাপশট বিচ্ছিন্নতা সম্পর্কে একটি নোট যোগ করুন নির্দ্বিধায়।
স্যাম জাফরন

2
হ্যাঁ, স্যাম স্ন্যাপশট বিচ্ছিন্নতা বলছে এবং আপনি পড়ার প্রতিশ্রুতিবদ্ধ স্ন্যাপশট প্রস্তাব দিচ্ছেন। আমি এতটা বিভ্রান্ত হয়ে
পড়ছি

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

নলক == প্রতিশ্রুতিবদ্ধ সারিগুলি মিস হয়ে গেলে, নিঃশর্ত সারিগুলি অন্তর্ভুক্ত করা হয় কিনা আমি তা বিবেচনা করি না, বিরল ক্ষেত্রে একই সারিটি একাধিকবার ফিরে আসে এবং খুব বিরল ক্ষেত্রে সারিগুলি ফিরে আসে যা আমার প্রশ্নের সাথে মেলে না। ( ব্লগস.এমএসডিএন / বি / এসকিএলএকটি / আরচিভ / ২০০7/২০১১/২ দেখুন , এই বিষয়ে অন্য এসও কি'আনের কাছ থেকে পাওয়া)
অ্যান্ড্রু হিল

106

স্ট্যাক ওভারফ্লোতে কাজ করার আগে, আমি NOLOCKসেই প্রিন্সিপালের বিরুদ্ধে ছিলাম যে আপনি সম্ভাব্যতার SELECTসাথে একটি সম্পাদন করতে পারেন NOLOCKএবং ডেটা দিয়ে ফলাফল ফিরে পেতে পারেন যা পুরানো বা অসঙ্গত থাকতে পারে। ভাবার একটি বিষয় হ'ল একই সময়ে কয়টি রেকর্ড সন্নিবেশ / আপডেট করা হতে পারে অন্য প্রক্রিয়া একই টেবিল থেকে ডেটা নির্বাচন করতে পারে। যদি এটি অনেক কিছু ঘটে থাকে তবে আপনি ডেটাবেস মোড ব্যবহার না করা হলে অচলাবস্থার উচ্চ সম্ভাবনা রয়েছে READ COMMITED SNAPSHOT

এর পরে আমি NOLOCKকীভাবে এটির SELECTকার্যকারিতা উন্নতি করতে পারে এবং ব্যাপকভাবে লোড হওয়া এসকিউএল সার্ভারে ডেডলকগুলি দূর করতে পারে তার সাক্ষী দেওয়ার পরে আমি আমার দৃষ্টিভঙ্গি পরিবর্তন করেছি । এমন অনেক সময় আছে যে আপনি আপনার যত্ন নিতে পারেন না যে আপনার ডেটা ঠিক 100% প্রতিশ্রুতিবদ্ধ নয় এবং আপনার ফলস্বরূপ দ্রুত ফলাফলের প্রয়োজন পরেও তা পুরানো হয়ে গেছে।

ব্যবহার করার কথা ভাবলে নিজেকে একটি প্রশ্ন জিজ্ঞাসা করুন NOLOCK:

আমার জিজ্ঞাসায় কি এমন কোনও সারণি অন্তর্ভুক্ত রয়েছে যার মধ্যে বেশিরভাগ INSERT/ UPDATEকমান্ড রয়েছে এবং যদি কোনও জিজ্ঞাসা থেকে ফিরে আসা ডেটা কোনও নির্দিষ্ট মুহুর্তে এই পরিবর্তনগুলি অনুপস্থিত হতে পারে তবে আমি কি যত্নশীল?

উত্তরটি যদি না হয় তবে NOLOCKকর্মক্ষমতা উন্নত করতে ব্যবহার করুন ।


আমি কেবল NOLOCKস্ট্যাক ওভারফ্লোর জন্য কোড বেসের মধ্যে কীওয়ার্ডটির জন্য একটি দ্রুত অনুসন্ধান করেছি এবং 138 টি উদাহরণ খুঁজে পেয়েছি, তাই আমরা এটি বেশ কয়েকটি জায়গায় ব্যবহার করি।


7
আইএমও, এটি কিছুটা সরল। ক্লাস্টারড ইনডেক্স থেকে চাপ নিলে কভার ইনডেক্স ব্যবহার করে ডেডলকগুলি সরানো যেতে পারে।
মিচ গম 6

8
আমি ভাল সূচক কভারেজের গুরুত্ব হ্রাস করতে চাই না। এমন অনেক সময় আছে যেগুলি NOLOCK ব্যবহার করে অনুসন্ধানগুলি টেবিলগুলিতে সূচী দ্বারা সুনির্দিষ্ট সংখ্যক সন্নিবেশ / আপডেটের মাধ্যমে উপলব্ধ লাভের উপরে অতিরিক্ত কর্মক্ষমতা যুক্ত করতে পারে। স্ট্যাক ওভারফ্রোতে ক্যোরির গতিটি ভুল বা গায়েবিষ্ট ডেটার ব্যয়েও সর্বোচ্চ m
জিওফ ডালগাস

9
স্পষ্টতই একটি ব্যবহার করে সদৃশ সারি পাওয়া যাবেNOLOCK । এর অর্থ আমাকে আপনার উত্তরকে হ্রাস করতে হবে। দুঃখিত।
এরিক

1
@ মিচওয়েট এ SELECT, কেবল একটি কভারিং সূচক থেকে পড়া, অচলাবস্থার কারণ হতে পারে। এসপিআইডি 1) SELECTকভারিং সূচক থেকে একটি শুরু করুন । এসপিআইডি 2) UPDATEটেবিলের একটি শুরু করুন । আপডেট পরে কভারিং সূচক আপডেট করার দিকে সরানো হয়। UPDATEদ্বারা তালাবদ্ধ একটি সূচক পরিসীমা পৌঁছায় SELECTএবং অবরুদ্ধ হয়ে যায়। এসপিআইডি 1) এখনও কভারিং সূচকের মাধ্যমে সন্ধান করছে, এটির দ্বারা লক করা একটি ব্যাপ্তি আবিষ্কার করে UPDATEএবং অবরুদ্ধ হয়ে যায়। অচলাবস্থা । কিছুই এই অচলাবস্থার সমাধান করতে পারে না (এসকিউএল সার্ভার ত্রুটি 1205 ধরা, এবং স্বয়ংক্রিয়ভাবে পুনরায় চেষ্টা করা বা ব্যবহার করা ব্যতীত NOLOCK)
ইয়ান বয়ড

2
আমি মনে করি যে এই উত্তরটি লক্ষ করার জন্য গুরুত্বপূর্ণ বিষয়টি হ'ল হাতের সমস্যার জন্য এটি উপযুক্ত ছিল । আপনার আবেদনের উপর নির্ভর করে, বাসি / অমীমাংসিত / নকল / নিখোঁজ ডেটা ঝুঁকি ট্রেডফুলের পক্ষে উপযুক্ত নয়।
হলিস্টিক বিকাশকারী

20

যদি আপনি নোংরা পড়ার বিষয়ে উদ্বিগ্ন হন না (যেমন মূলত রিড অবস্থায়) তবে NOLOCKতা ঠিক আছে।

কিন্তু সচেতন যে লক সমস্যার সংখ্যাগরিষ্ঠ আপনার প্রশ্নের কাজের চাপ জন্য 'সঠিক' ইনডেক্স (অভিমানী হার্ডওয়্যার টাস্ক আপ হয়) হচ্ছে না কারণে হতে।

এবং গুরুর ব্যাখ্যাটি সঠিক ছিল। এটি সাধারণত আরও গুরুতর সমস্যার জন্য একটি ব্যান্ড-সহায়তা সমাধান।

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


3
হুম .. আমি এখনও পাই না। সুতরাং এটি ঠিক আছে, তবে এটি খুব খারাপ রূপও ... আপনি কি বলছেন?
খাঁটি.ক্রোম

এই ধারণাটি নিয়ে যে আপনি ময়লা পড়ার বিষয়ে কখনও যত্নশীল হন না, তবে তাতে কোনও ক্ষতি হবে না। তবে এটি সাধারণত লক্ষণটির চিকিত্সা করার একটি কারণ এবং কারণ নয় ...
মিচ গম

2
ঠিক আছে, আমি মনে করি না যে এর ন্যায্য রেক্সেমটি একেবারে উজ্জীবিত ছিল, আমি মনে করি আপনি যখন নলক ব্যবহার করেন তখন স্বেচ্ছাসেবী ত্রুটিগুলি সমাধান করেন নি। আপনার ওয়েবসাইটটিতে একবারে ফাঁকা ত্রুটি পৃষ্ঠাটি পাওয়া ভাল নয়, এটি সত্যিই খারাপ রূপ। আমি এই উক্তিটি অপছন্দ করি যে "" আপনি যদি নোংরা বিষয় সম্পর্কে যত্ন নেন না তবে এটি সূক্ষ্ম পড়ে "... এটি জরিমানা নয়, এমনকি যদি আপনি নোংরা পাঠ্য সম্পর্কে যত্নবান হন না
স্যাম সাফ্রন

একটি কোয়েরি একটি ব্যতিক্রম উত্পন্ন করে যখন আপনি পুনরায় চেষ্টা করার জন্য যুক্তি প্রয়োগ করেন নি তখন ফাঁকা পৃষ্ঠা আপনি পাবেন। আপনার সাইটগুলিতে কী ঘটে যখন ক্যোয়ারী এক্সিকিউশন ব্যতিক্রম ব্যতীত ফলাফল দেয়, আপনার কি সর্বত্র পুনরায় চেষ্টা করার যুক্তি রয়েছে?
স্যাম জাফরন

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

13

সন্দেহ যে এটি "গুরু" ছিলেন যিনি উচ্চ ট্র্যাফিকের কোনও অভিজ্ঞতা পেয়েছিলেন ...

ব্যক্তি সম্পূর্ণ লোড হওয়া পৃষ্ঠাটি দেখার সময় ওয়েবসাইটগুলি সাধারণত "নোংরা" হয়। একটি ফর্ম বিবেচনা করুন যা ডাটাবেস থেকে লোড হয় এবং তারপরে সম্পাদিত ডেটা সংরক্ষণ করে ?? এটি মূর্খতাপূর্ণ যেহেতু লোকেরা নোংরা পড়ার বিষয়ে যেমন কোনও সংখ্যা নেই।

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

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

এর অর্থ কী তা জানুন এবং উপযুক্ত হলে এটি ব্যবহার করুন। আপনার ডেটাবেস এই দিনগুলিতে প্রায় সর্বদা আপনার প্রধান বোতল ঘাড় হয়ে থাকবে এবং NOLOCK ব্যবহার সম্পর্কে স্মার্ট থাকায় আপনাকে হাজার হাজার অবকাঠামো সংরক্ষণ করতে পারে।

সম্পাদনা: এটি কেবলমাত্র অচলাবস্থার সাথে এটির সহায়তা করে না, আপনি শেষ না হওয়া পর্যন্ত অন্য সবাইকে কতটা অপেক্ষা করতে যাচ্ছেন তা তদ্বিপরীতও হয়।

EF4 এ নলক ইঙ্গিত ব্যবহার করছেন?


10

উত্তরগুলির কোনওটিই ভুল নয়, তবে কিছুটা বিভ্রান্তিও হতে পারে।

  • একক মান / সারিগুলির জিজ্ঞাসা করার সময় NOLOCK ব্যবহার করা সর্বদা খারাপ অভ্যাস - আপনি সম্ভবত কখনও ভুল তথ্য প্রদর্শন করতে চান না বা এমনকি ভুল ডেটাতে কোনও পদক্ষেপ নিতে চান না।
  • রুক্ষ পরিসংখ্যান সম্পর্কিত তথ্য প্রদর্শন করার সময়, NOLOCK খুব কার্যকর হতে পারে। উদাহরণস্বরূপ SO নিন: কোনও প্রশ্নের মতামতের সঠিক সংখ্যা, বা কোনও ট্যাগের জন্য প্রশ্নের সঠিক সংখ্যা পড়তে লক নেওয়া বাজে কথা হবে । আপনি এখন "স্কিএল-সার্ভার" দিয়ে ট্যাগ করা 3360 টি প্রশ্ন ভুলভাবে বর্ণনা না করে এবং একটি লেনদেন রোলব্যাকের কারণে, এক সেকেন্ড পরে 3359 টি প্রশ্ন জিজ্ঞাসা করে না কেউই পাত্তা দেয় না।

আমি আপনার প্রথম বিষয়টির সাথে একমত হই না don't যদি আপনি একক মান / সারিগুলি অনুসন্ধান করছেন এবং আপনি এই সারির জন্য একটি অনন্য আইডি নির্দিষ্ট করছেন, এবং আপনি জানেন যে অন্য কোনও প্রক্রিয়া এটি অ্যাক্সেস করবে না, তবে নোলক ব্যবহার করা পুরোপুরি গ্রহণযোগ্য, এবং একযোগে প্রয়োগে ব্লকিং হ্রাস করে।
tuseau

1
না এইটা না. সারিটি অন্যান্য কারণে পরিবর্তিত হতে পারে, উদাহরণস্বরূপ অন্য সারি সন্নিবেশ করানো পৃষ্ঠায় বিভক্ত হয়। যথাযথ সূচক, পড়ুন প্রতিশ্রুতিবদ্ধ স্ন্যাপশট এবং স্ন্যাপশট বিচ্ছিন্নতা প্রায় সবসময়ই ভাল ধারণা।
মার্ক সোওুল

1
@ টিউসউ যদি আপনি "জানেন" যে অন্য কোনও প্রক্রিয়া সারিটি অ্যাক্সেস করবে না, লক নেওয়ার কাজটি কোনও কিছুই ব্লক করবে না, সুতরাং আপনাকে (ব্যবহারিকভাবে) কিছুই ব্যয় করতে হবে না
অ্যান্ড্রু হিল

2

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

পড়া নির্দেশ এবং অন্যান্য দরিদ্র ধারনা

আপনি স্কাইল সার্ভারটি আরও গভীর বুঝতে পারবেন। আমি সাধারণত নিয়মটি অনুসরণ করি যে এসকিউএল ইঙ্গিতগুলি ILভিল, কিন্তু দুর্ভাগ্যক্রমে আমি এখনই এগুলি ব্যবহার করি এবং যখন আমি এসকিউএল সার্ভারকে বাধ্যতামূলক করতে বিরক্ত হই ... তবে এগুলি বিরল ঘটনা।

লুক


2

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


2

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


2

আমি বিশ্বাস করি যে নোলক ব্যবহার করা কার্যত কখনই সঠিক নয়।

আপনি যদি একটি একক সারিটি পড়ছেন, তবে সঠিক সূচীর অর্থ হ'ল পৃথক সারির ক্রিয়াগুলি দ্রুত সম্পন্ন হওয়ায় আপনার কোনও প্রয়োজন নেই।

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

নলোকক একটি সার্গেট ট্যাগ যা "এই উত্তরটিতে সদৃশ সারি, মুছে ফেলা সারিগুলি বা রোলব্যাকের কারণে কখনও সন্নিবেশ করা হয়নি এমন সারিগুলি থাকলে তা আমি বিবেচনা করি না"

নলকের আওতায় থাকা ত্রুটিগুলি:

  • যে সারিগুলি মিলবে সেগুলি মোটেই ফিরে আসে না।
  • একক সারি একাধিকবার ফিরে আসে (একই প্রাথমিক কীটির একাধিক উদাহরণ সহ)
  • যে সারি মিলছে না তা ফেরত দেওয়া হয়েছে।

নোলক নির্বাচন চলাকালীন কোনও ক্রিয়াকলাপ যা কোনও পৃষ্ঠা বিভক্ত করতে পারে তা এই জিনিসগুলির কারণ হতে পারে। প্রায় কোনও ক্রিয়াকলাপ (এমনকি একটি মুছুনও) কোনও পৃষ্ঠা বিভক্ত করতে পারে।

অতএব: আপনি যদি জানেন যে আপনি চলমান অবস্থায় সারিটি পরিবর্তন হবে না তবে নলকটি ব্যবহার করবেন না, কারণ একটি সূচক দক্ষ পুনরুদ্ধারের অনুমতি দেবে।

আপনি যদি সন্দেহ করেন যে ক্যোরি চলাকালীন সারিটি পরিবর্তন হতে পারে এবং আপনি যথার্থতার বিষয়ে যত্নশীল হন তবে নলক ব্যবহার করবেন না।

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


2

আরও ভাল সমাধান, যখন সম্ভব হয়:

  • প্রতিবেদনের ডাটাবেসে আপনার ডেটা (লগ-প্রতিলিপি ব্যবহার করে) প্রতিলিপি করুন।
  • সান স্ন্যাপশট ব্যবহার করুন এবং ডিবি'র একটি ধারাবাহিক সংস্করণ মাউন্ট করুন
  • এমন একটি ডাটাবেস ব্যবহার করুন যার মধ্যে আরও ভাল মৌলিক লেনদেনের বিচ্ছিন্নতা স্তর রয়েছে

এসএনএপএসএইচটি-র লেনদেনের বিচ্ছিন্নতা স্তর তৈরি করা হয়েছিল কারণ এমএস ওরাকলের কাছে বিক্রয় হারাচ্ছিল। ওরাকল এই সমস্যাটি এড়াতে পূর্বাবস্থায় ফেরত / পুনরায় লগ ব্যবহার করে। পোস্টগ্রিস এমভিসিসি ব্যবহার করে। ভবিষ্যতে এমএসের হেকাটন এমভিসিসি ব্যবহার করবে, তবে উত্পাদন প্রস্তুত হতে কয়েক বছর দূরে।


উপরে একটি টাইপো আছে। আমি বলতে চাই "আরও ভাল মৌলিক লেনদেনের বিচ্ছিন্নতা ব্যবস্থা"।
pwy

1
এসএনএপশট লেনদেনের বিচ্ছিন্নতা স্তর হ'ল এমএসের আবিষ্কার। মূলত এটি ডেটা টিএমপিডিবিতে একটি টেম্প টেবিলের মধ্যে রাখে। ডিবিটি বাক্সের সমস্ত ডিবিতে ভাগ করা আছে। সুতরাং, আপনি যখন সম্ভব হবে তখন TEMPDB এর জন্য এসএসডি ব্যবহার করতে চাইবেন। অন্যান্য বিকল্পগুলির তুলনায় এটি সম্ভবত কম প্রচেষ্টা।
pwy

1

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

ফলাফল সেটটিতে এমন সারিগুলি থাকতে পারে যা এখনও প্রতিশ্রুতিবদ্ধ হয় নি, যা প্রায়শই পরে ঘোরানো হয়।

একটি ত্রুটি বা ফলাফল সেট খালি থাকতে পারে, সারি নিখোঁজ হতে পারে বা একই সারিতে একাধিকবার প্রদর্শিত হতে পারে।

এটি হ'ল কারণ অন্যান্য লেনদেনগুলি একই সময়ে আপনি এটি পড়ছেন data

READ COMMITTED একটি অতিরিক্ত সমস্যা যুক্ত করে যেখানে একক কলামের মধ্যে ডেটা দূষিত হয় যেখানে একাধিক ব্যবহারকারী একই ঘরে একই পরিবর্তন করে change


-2

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


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