নির্বাচনী বিবৃতিতে নোলক ইঙ্গিতটির প্রভাব


199

আমি অনুমান করি আসল প্রশ্নটি হ'ল:

যদি আমি নোংরা পড়ার বিষয়ে চিন্তা না করি তবে একটি (SEX) বিবৃতিতে (NOLOCK) ইঙ্গিতটি যুক্ত করা এর কার্য সম্পাদনকে প্রভাবিত করবে:

  1. বর্তমান নির্বাচন বিবৃতি
  2. প্রদত্ত টেবিলের বিপরীতে অন্যান্য লেনদেন

উদাহরণ:

Select * 
from aTable with (NOLOCK)

3
এই এসও এবং ডিবিএ উত্তরগুলি আসলে কী ঘটছে তা সম্পর্কে একটু পরিষ্কার।
ট্রাইপড

উত্তর:


289

1) হ্যাঁ , একটি নির্বাচন NOLOCKএকটি সাধারণ নির্বাচনের চেয়ে দ্রুত সম্পন্ন হবে।

২) হ্যাঁ , এর সাথে একটি নির্বাচন NOLOCKপ্রভাবিত টেবিলের বিপরীতে অন্যান্য প্রশ্নের সাথে একটি সাধারণ নির্বাচনের চেয়ে দ্রুত শেষ করতে দেয়।

কেন এমন হবে?

NOLOCKসাধারণত (আপনার ডিবি ইঞ্জিনের উপর নির্ভর করে) এর অর্থ আমাকে আপনার ডেটা দিন, এবং এটি কী অবস্থায় রয়েছে তা আমি যত্ন করে না এবং আপনি এটি পড়ার পরেও এটি ধরে রাখা বিরক্ত করবেন না। এটি একসাথে দ্রুত, কম সংস্থান-নিবিড় এবং খুব বিপজ্জনক।

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

আপনার কাছে ডেটার অবস্থা কী তা জানার সত্যিই কোনও উপায় নেই।

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

সর্বদা NOLOCKসতর্কতার সাথে ইঙ্গিতটি ব্যবহার করুন এবং সন্দেহজনকভাবে যে কোনও ডেটা ফিরে আসে তা ব্যবহার করুন।


ধন্যবাদ। এটিই আমি ধরে নিচ্ছি তবে সহকর্মী এটি সম্পর্কে জিজ্ঞাসাবাদ করেছিলেন এবং আমার প্রাথমিক গবেষণা আমাকে প্রশ্নবিদ্ধ করেছিল। এসকিউএল সার্ভার 2005 ডকুমেন্টেশন বলছে যে সমস্ত নির্বাচিত বিবৃতিগুলির জন্য এনওলোকের সাথে ডিফল্ট লকিংয়ের পরিকল্পনা রয়েছে! আমি তখন অনুমান করেছিলাম যে আমার ইঙ্গিতগুলি এলোমেলো হয়ে উঠবে ...
বব প্রোবস্ট

2
... 2005 এবং এর কোনও প্রভাব নেই। আমরা এখনই 2000 চালাচ্ছি (আমাদের বিক্রেতাকে ধন্যবাদ) এবং ডকুমেন্টেশনে এর মতো কোনও বিবৃতি নেই।
বব প্রোবস্ট

4
আপনার বন্ধুর ডকুমেন্টেশন পড়তে হবে। সারণী ইঙ্গিত (লেনদেন-এসকিউএল) msdn.microsoft.com/en-us/library/ms187373(SQL.90).aspx
পিটসবার্গ ডিবিএ

9
পার্শ্ব দ্রষ্টব্য: এটি যদি সত্য হয় তবে তা হবে নিরঙ্কুশ বিশৃঙ্খলা।
পিটসবার্গ ডিবিএ 21

1
পয়েন্ট 1 এবং 2 টি 1) -র মধ্যে সীমাবদ্ধ করা দরকার "... যখন সন্নিবেশ / আপডেট / মোছার ক্রিয়াটি টেবিলে মুলতুবি থাকে " " এবং 2) "... এর বিরুদ্ধে প্রশ্নের সন্নিবেশ / আপডেট / মোছার অনুমতি দেবে ..."। পার্থক্যটি অন্য প্রক্রিয়াটি সম্পূর্ণ হওয়ার অপেক্ষায় থাকায় আমি (ব্যক্তিগত পছন্দ) "দ্রুত" এর উদাহরণগুলিকে "তাড়াতাড়ি" এ পরিবর্তন করব।
21:40 '

61

ভাগ করা লকগুলির অভাবের কারণে নোলক বেশিরভাগ নির্বাচনী বিবৃতি দ্রুততর করে। এছাড়াও, লকগুলি ইস্যু না করার অর্থ লেখকরা আপনার নির্বাচনের দ্বারা বাধা পাবে না।

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

আপনার নিষ্পত্তিস্থলে বিচ্ছিন্নতা স্তরের সমস্ত সম্পর্কিত তথ্য পাশাপাশি টেবিলের ইঙ্গিতগুলি এখানে রয়েছে।

ট্রানসেকশন আইসোলেশন লেভেল সেট করুন

সারণী ইঙ্গিত (লেনদেন-এসকিউএল)


2
আমি সম্মত, কিন্তু সম্পূর্ণ না; এটি উল্লেখ করা গুরুত্বপূর্ণ যে কোনও অনুলিপি / অনাবৃত ইঙ্গিতটি আসলে ক্যোয়ারের গতি উন্নত করে না, তবে আরও দ্রুত এটি প্রদর্শিত হয় কারণ এটি পূর্ববর্তী প্রশ্নের সম্পূর্ণ হওয়ার জন্য অপেক্ষা করতে হবে না wait সুতরাং সত্যিই, ক্যোয়ারীটি এসইএমএস দ্রুততর না হয়ে দ্রুততর হয় (আমার মনে হয়)।
মাওজ

1
@ বোরহানমুজ ওয়েল, লক ম্যানেজারের কাছ থেকে লকের জন্য অনুরোধ না করার থেকে সঞ্চয় রয়েছে। এমনকি যদি অন্য কোনও প্রশ্ন অপেক্ষা না করে থাকে তবে এর একটি খরচ এবং একটি মেমরির ওভারহেড রয়েছে।
পিটসবার্গ ডিবিএ

1
আমি আমার কয়েকজন কাজের সঙ্গীর সাথে এটি নিয়ে আলোচনা করছিলাম। আমি এটি বুঝতে পারছি, WITH (NOLOCK) ইঙ্গিতটি ব্যবহার করে এমন কোনও প্রশ্নের জন্য এখনও একটি স্কিমা-ভাগ করা লক অর্জন করা প্রয়োজন ( mssqltips.com/sqlservertip/2470/… )।
মোজ

1
হ্যাঁ, তবে পৃষ্ঠাগুলিতে বা এক্সটেন্টে হাজারে ভাগ করা লক নেই। একটি স্কিমা লক হ'ল এক লক, কয়েক নয়। আমরা যদি পেডেন্টিক হতে চাই, আমরা এটি নিয়ে বিতর্ক চালিয়ে যেতে পারি, তবে হ্যাঁ, সেখানে লক ওভারহেডের একটি সংক্ষিপ্ত পরিমাণ থাকবে। সঞ্চয় উল্লেখযোগ্য। এটিতে
পিটসবার্গ ডিবিএ

14

উপরে যা বলা হয়েছে তা ছাড়াও, আপনার খুব সচেতন হওয়া উচিত যে নোলক আসলে আপনার নির্বাচনের আগে প্রতিশ্রুতিবদ্ধ সারিগুলি না পাওয়ার ঝুঁকি চাপিয়ে দেয় ।

দেখুন http://blogs.msdn.com/sqlcat/archive/2007/02/01/preferencesly-committed-rows-might-be-mused-if-nolock-hint-is-used.aspx


6

এটি আরও দ্রুত হবে কারণ এটিতে লকগুলির জন্য অপেক্ষা করতে হবে না


কত দ্রুত? আপনি কি কোনও গতির উন্নতির নম্বর সরবরাহ করতে পারেন?
ইউজেনিউ টোরিকা

5
আপনার ডেটা দিয়ে আপনি কী করছেন এবং আপনি সাধারণত কতক্ষণ লক অর্জনের জন্য অপেক্ষা করতে হয় তার উপর "কতটা" নির্ভর করে depends
স্টিংজি জ্যাক

একমাত্র সঠিক মানদণ্ডটি হ'ল আপনি নিজের তৈরি এবং চালান। সবাই আপনাকে যা বলেছে তা "চেকটি মেইলে রয়েছে" এর মতোই ভাল। আমি আমার নিজস্ব মানদণ্ড চালিয়ে বহুবার মিথ ও মিথ্যা প্রমাণ করেছি।
ট্র্যাভিসো

T @ ট্র্যাভিসো - সম্পূর্ণ সঠিক। আমি NOLOCK কয়েকবার ধীরে ধীরে চালিত করেছি। কেন পুরোপুরি নিশ্চিত নয়, তবে সমস্যা সমাধানের সময় আমি এটি ব্যবহার করছি এবং আমি উত্পাদনকে নেতিবাচক (ওভার) প্রভাবিত করতে চাই না
স্টিংজি জ্যাক

2
  • উত্তরটি হ্যাঁ, যদি কোয়েরিটি একবারে একাধিকবার চালানো হয়, কারণ প্রতিটি লেনদেনের জন্য অন্যদের সম্পূর্ণ হওয়ার অপেক্ষার প্রয়োজন হবে না। যাইহোক, যদি কোয়েরিটি একবার নিজেই চালানো হয় তবে উত্তরটি হ'ল না is

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

ক্লাস্টার ইনডেক্স রয়েছে এমন টেবিলগুলিতে কেবলWITH (NOLOCK) SELECT স্টেটমেন্টগুলিতে ব্যবহার করতে সাবধান হন ।

উইথ (নোলক) প্রায়শই ডেটাবেস পড়ার লেনদেনগুলিকে গতিময় করার একটি যাদু উপায় হিসাবে ব্যবহার করা হয়।

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

যদি উইথ (নোলক) কোনও টেবিলটিতে প্রয়োগ করা হয় যার একটি ক্লাস্টারযুক্ত সূচি নেই তবে সারি-সূচকগুলি ফলাফল-সারণিতে প্রবাহিত হওয়ার কারণে অন্যান্য লেনদেনের দ্বারা পরিবর্তন করা যেতে পারে। এর মানে হল যে ফলাফল-সেটটি সারিগুলি অনুপস্থিত বা একই সারিতে একাধিকবার প্রদর্শিত হতে পারে।

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

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