এসকিউএল সার্ভারে "উইথ (নলক)" কী?


610

কেউ with (nolock)যখন জিজ্ঞাসা করা উচিত তখন সেগুলি কীভাবে ব্যবহার করা উচিত?

উদাহরণস্বরূপ, আপনার যদি উচ্চ লেনদেনের হার এবং নির্দিষ্ট টেবিলগুলিতে প্রচুর ডেটা সহ একটি ব্যাঙ্কিং অ্যাপ্লিকেশন থাকে তবে কোন ধরণের প্রশ্নগুলিতে ঠিক আছে? আপনার যখন সর্বদা এটি ব্যবহার করা উচিত / কখনই ব্যবহার না করা উচিত তখনও কি কিছু ঘটনা আছে?


আমি subquestioned stackoverflow.com/questions/3836282/... এবং stackoverflow.com/questions/3836032/... বেশিরভাগই জনাথন অ্যালেন এর উত্তর stackoverflow.com/questions/686724/...
গেন্নাদি Vanin Геннадий Ванин

1
এখানে একটি লিঙ্ক - mssqltips.com/sqlservertip/2470/…
বাষ্প

উত্তর:


461

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


156
বেশিরভাগ ব্যাঙ্কিং অ্যাপ্লিকেশনগুলি নিরাপদে নলক ব্যবহার করতে পারে কারণ তারা ব্যবসায়িক অর্থে লেনদেন। আপনি কেবল নতুন সারি লিখেন, আপনি সেগুলি কখনও আপডেট করেন না।
জোনাথন অ্যালেন

49
@ গ্রাওনওল্ফ- একটি butোকানো তবে অনাবৃত সারিটি এখনও নোংরা পড়তে পারে।
সাসমান 21

16
@ সাসমান- আপনি যদি কখনও রোলব্যাক লেনদেন না করেন তবে তাতে কিছু আসে যায় না। এবং কেবল সন্নিবেশ করানোর টেবিলের সাথে, রোলব্যাকের সম্ভাবনা কম নয় lim এবং যদি সেগুলি ঘটে থাকে, আপনি এখনও দিনের বৈকল্পিক প্রতিবেদনের শেষে এগুলি সব ঠিক করবেন।
জোনাথন অ্যালেন

1
আমি আবদ্ধ আমি ধরে নেই কোনও যুক্ত লক ইঙ্গিত রয়েছে। পরীক্ষার জন্য:
রস বুশ

11
আপনি যদি এটির NOLOCKসাথে ব্যবহার করেন SELECTআপনি কোনও নির্বাচন করার সময় টেবিলে ডেটা everোকানো (বা আপডেট করা) হলে একই সারিগুলি একাধিকবার (নকল তথ্য) ফেরানোর ঝুঁকি চালান run
ইয়ান বয়ড

170

প্রশ্নটি আরও খারাপ:

  • একটি অচলাবস্থা, বা
  • একটি ভুল মূল্য?

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

একটি আর্থিক ডাটাবেসে আপনি ব্যবসায়ের লেনদেন ব্যবহার করেন। এর অর্থ প্রতিটি অ্যাকাউন্টে একটি সারি যুক্ত করা। এটি অত্যন্ত গুরুত্বপূর্ণ যে এই লেনদেনগুলি সম্পূর্ণ হয় এবং সারিগুলি সফলভাবে লেখা হয়।

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

এটি বলেছিল যে এসকিউএল সার্ভার 2005 NOLOCKপ্রয়োজনীয় বাগগুলি সর্বাধিক স্থির করেছে । সুতরাং আপনি যদি এসকিউএল সার্ভার 2000 বা তার আগে ব্যবহার না করেন তবে আপনার এটির দরকার হবে না।

আরও পঠন
সারি স্তরের সংস্করণ


22
সাময়িকভাবে কোনও অ্যাকাউন্টের ভারসাম্য পাওয়া ভুল কথা নয়? সেই লেনদেনটি যদি এমন হয় যেখানে আপনি কোনও ওভারড্রাফটের সীমা ছাড়াই এটিএম থেকে নগদ আদায় করছেন?
শিখছি

13
@ শিখুন: কেউ যদি আপনার কার্ড চার্জ করার 30 সেকেন্ড আগে আপনি টাকা বের করেন তবে কি হবে? যতক্ষণ না সমস্ত যোগাযোগই ক্ষণিকের ক্ষণস্থায়ী না হয়, ততক্ষণে ওভারড্রাফ্টগুলি জীবনের সত্য ঘটনা ঘটবে।
জোনাথন অ্যালেন

6
+1 আর্থিক অ্যাপে (সর্বত্র, কেবলমাত্র ব্যাঙ্কগুলিতে নয়), আপডেট বা মুছে ফেলা হয় না। এমনকি ভুল অপারেশনগুলি রেকর্ড সন্নিবেশ করে সংশোধন করা হয়। ইংরেজিতে এই শব্দটি কী? এটা কি "স্টোরানো"? গুগল আমাকে এই প্রশ্নের উত্তর দিতে সহায়তা করেনি
জেনাডি ভ্যানিন Ванин Ванин

7
দেরীতে প্রবেশ ... ডেডলকগুলি ধরা এবং আবার চেষ্টা করা উচিত। নোংরা
পাঠ্যের

4
@ জোনাথন অ্যালেন মাত্র একটি ফাই, শব্দটি ইউটিপস্ট, ইউপি নয়।
জিমি ডি

57

দুর্ভাগ্যক্রমে এটি কেবল অনির্দিষ্ট ডেটা পড়া সম্পর্কে নয়। পটভূমিতে আপনি পৃষ্ঠাগুলি দু'বার পড়া শেষ করতে পারেন (পৃষ্ঠা বিভাজনের ক্ষেত্রে), বা আপনি পৃষ্ঠাগুলি পুরোপুরি মিস করতে পারেন। সুতরাং আপনার ফলাফলগুলি গুরুতরভাবে স্কিউড হতে পারে।

পরীক্ষা করে দেখুন Itzik বিন্-Gan থেকে এর নিবন্ধ । এখানে একটি অংশ:

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


5
আরও কিছুটা নিচে তিনি কীভাবে একই সারিটি দু'বার পাবেন তা ব্যাখ্যা করেছেন: আমি টেবিল টি 1 পুনরায় তৈরি করব যাতে কল 1 এ ক্লাস্টারড ইনডেক্সটি আইজিএনওর_ডিউপি_কেই বিকল্পের সাথে একটি অনন্য সূচক হিসাবে সংজ্ঞায়িত হবে। এর অর্থ হ'ল ডুপ্লিকেট মানগুলি কল 1 তে বিদ্যমান থাকতে পারে না এবং এটিও হ'ল নকল কী সন্নিবেশ করার প্রচেষ্টা লেনদেনকে ব্যর্থ করবে না এবং ত্রুটি উত্পন্ন করবে না বরং কেবল একটি সতর্কতা তৈরি করবে। আপনি যদি এই অদ্ভুত বিকল্পটি ব্যবহার না করেন তবে আপনাকে সম্ভবত দুবার সারি পাওয়ার বিষয়ে চিন্তা করতে হবে না
জানুহুদেক

তারযুক্ত বিকল্প ব্যতীত আপনি ডুপ সারিগুলি পেতে পারেন - উদাহরণস্বরূপ, যদি আপনার কোয়েরিতে কোনও অনন্য নয় এমন একটি সূচককে ব্যবহার করে। যদিও এটি অনাহারে অনন্য নয়।
আরএমডি

54

নলক ইঙ্গিতটির বৈধ ব্যবহারের জন্য পাঠ্য বইয়ের উদাহরণটি হ'ল একটি উচ্চ আপডেটের ওলটিপি ডাটাবেসের বিরুদ্ধে নমুনা দেওয়ার প্রতিবেদন করা।

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


31

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

যদি আপনার লক করার সমস্যা হয় তবে সংস্করণটি প্রয়োগ করুন এবং আপনার কোডটি পরিষ্কার করুন।

কোনও লকই ভুল ভ্যালু দেয় না এটি ফ্যান্টম রেকর্ড এবং নকলগুলি ফিরিয়ে দেয়।

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

ন্যায়বিচারে, এখানে দুটি বিশেষ পরিস্থিতি রয়েছে যেখানে কোনও নলক ইঙ্গিতটি ইউটিলিটি সরবরাহ করতে পারে

1) 2005-এর পূর্বের স্কুয়েল সার্ভার ডাটাবেসের জন্য লাইভ ওএলটিপি ডাটাবেসের বিরুদ্ধে দীর্ঘ ক্যোয়ারি চালানো দরকার এটি একমাত্র উপায় হতে পারে

2) দুর্বলভাবে লিখিত অ্যাপ্লিকেশন যা রেকর্ডগুলি লক করে এবং ইউআই এবং পাঠকদের কাছে নিয়ন্ত্রণ অনির্দিষ্টকালের জন্য অবরুদ্ধ। যদি অ্যাপ্লিকেশন ঠিক করা না যায় (তৃতীয় পক্ষ ইত্যাদি) এবং ডেটাবেস হয় ২০০৫-এর পূর্ববর্তী বা সংস্করণ চালু না করা যায় তবে নলক এখানে সহায়ক হতে পারে।


11
আমি আপনার সাথে একমত যে NOLOCK দুর্বল লিখিত কোড তৈরি করতে ব্যবহার করা উচিত নয়। যাইহোক, আমি মনে করি যে জনাথনের আপনার আক্রমণটি অনুমোদনহীন কারণ তিনি কখনই ডেটাবেস লেনদেনের কথা উল্লেখ করেননি । তিনি কেবল উল্লেখ করেছিলেন যে আর্থিক অ্যাপ্লিকেশনগুলি সাধারণত সম্পাদনাগুলি রেকর্ড করতে দেয় না (স্পষ্টত কিছু ব্যতিক্রম আছে)। আপনার তহবিল স্থানান্তর উদাহরণে, তিনি বলছে আপনি ছিল এটা অদ্ভুত হবে পরিবর্তন ঘটান পরিবর্তে অ্যাকাউন্টের ব্যালেন্স মান যোগ মন্দের একটা খতিয়ান করার জন্য একটি ডেবিট / ক্রেডিট এন্ট্রি।
chrnola

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

24

NOLOCKএর সমতুল্য READ UNCOMMITTED, তবে মাইক্রোসফ্ট বলেছে এটির জন্য UPDATEবা DELETEবিবৃতি দেওয়ার জন্য আপনার ব্যবহার করা উচিত নয় :

আপডেট বা ডিলিট বিবৃতিগুলির জন্য: এই বৈশিষ্ট্যটি মাইক্রোসফ্ট এসকিউএল সার্ভারের ভবিষ্যতের সংস্করণে সরানো হবে। নতুন উন্নয়ন কাজে এই বৈশিষ্ট্যটি ব্যবহার করা এড়িয়ে চলুন এবং বর্তমানে এই বৈশিষ্ট্যটি ব্যবহার করে এমন অ্যাপ্লিকেশনগুলিকে সংশোধন করার পরিকল্পনা করুন।

http://msdn.microsoft.com/en-us/library/ms187373.aspx

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

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED


21

আপনি যখন কেবলমাত্র ডেটা পড়ছেন তখন আপনি এটি ব্যবহার করতে পারবেন এবং আপনি যে ডেটা প্রতিশ্রুতিবদ্ধ না তা ফিরে পেয়ে যাবেন কিনা সে সম্পর্কে আপনি সত্যিই চিন্তা করেন না।

এটি একটি পঠন অপারেশনে দ্রুততর হতে পারে তবে আমি কতটা দ্বারা সত্য তা বলতে পারি না।

সাধারণভাবে, আমি এটি ব্যবহারের বিরুদ্ধে প্রস্তাব দিচ্ছি - আপত্তিজনক ডেটা পড়া কিছুটা বিভ্রান্তিকর হতে পারে।


1
এটি দুর্দান্ত লাগবে যদি আপনি এসকিউএল সার্ভার 2005 এর সারি সংস্করণ রয়েছে বলে উল্লেখ করেছেন যাতে নলক এমনকি কোনও প্রয়োজন হয় না।
জোনাথন অ্যালেন

ঠিক আছে, এসকিউএল সার্ভার ২০০৫-এ "উইথ (নোলক)" এখনও এর জায়গা রয়েছে - তবে সুবিধাগুলি পাতলা এবং পাতলা পাচ্ছে, এটি সত্য।
marc_s

18

এটি ঠিক আছে, অন্য একটি ক্ষেত্রে একটি রিপোর্টিং ডাটাবেসে রয়েছে, যেখানে ডেটা সম্ভবত বয়সের এবং সম্ভবত লেখার ঘটনা ঘটে না। এই ক্ষেত্রে, বিকল্পটি ডিফল্ট বিচ্ছিন্নকরণ স্তরটি পরিবর্তন করে প্রশাসক দ্বারা ডাটাবেস বা টেবিল স্তরে সেট করা উচিত।

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

আমি এই ধারণাটিও দ্বিতীয় করব যে এটি সম্ভবত ব্যাঙ্কিং অ্যাপে ভাল ধারণা নয় । বা ইনভেন্টরি অ্যাপ্লিকেশন। বা আপনি যে কোনও জায়গায় লেনদেনের বিষয়ে ভাবছেন।


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

15

সহজ উত্তর - যখনই আপনার এসকিউএল ডেটা পরিবর্তন করে না, এবং আপনার কাছে এমন একটি ক্যোয়ারী রয়েছে যা অন্য ক্রিয়াকলাপে (লকিংয়ের মাধ্যমে) হস্তক্ষেপ করতে পারে।

রিপোর্টগুলির জন্য ব্যবহৃত যে কোনও প্রশ্নের জন্য এটি বিবেচনা করা উপযুক্ত, বিশেষত যদি কোয়েরিটি 1 সেকেন্ডের চেয়ে বেশি লাগে।

এটি বিশেষত কার্যকর যদি আপনার কোনও ওল্যাপ-টাইপ রিপোর্ট থাকে তবে আপনি কোনও ওলটিপি ডাটাবেসের বিরুদ্ধে চলেছেন।

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


11

সংক্ষিপ্ত উত্তর:

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

দীর্ঘ উত্তর:

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

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

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

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


2
চূড়ান্ত সিদ্ধান্ত পরিবর্তন না করলে অননুমোদিত ডেটা পড়া গ্রহণযোগ্য is উদাহরণস্বরূপ, আপনি যদি আগামী 6 মাস ধরে আপনার খুচরা স্টোরটি কত টাকা উপার্জন করতে চলেছে তা প্রজেক্ট করার চেষ্টা করছেন, যখন দেখেন যে ট্যামি 3 টি রোল কাগজের তোয়ালে কিনেছিলেন যখন তিনি 3 টি কিনেছিলেন তখন ভবিষ্যতের বিষয়ে আপনার মতামত পরিবর্তন করবে না ।
জোনাথন অ্যালেন

1
যদি আপনার ফিল্টারটি এখন অন্তর্ভুক্ত করে, আপনি কোয়েরিটি চালানোর মুহুর্তে আপনার ডেটা ভুল হতে চলেছে। যদি আপনার ফিল্টারটিতে কেবল historicalতিহাসিক ডেটা অন্তর্ভুক্ত থাকে তবে READ UNCOMITTED এটি ব্যবহার করা একেবারেই প্রভাব ফেলবে না। এটিএসএস স্ট্যান্ডার্ডের অন্তর্ভুক্ত করার একটি কারণ রয়েছে।
জোনাথন অ্যালেন

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

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

10

আমার 2 সেন্ট - এটি ব্যবহারে বোধগম্য হয় WITH (NOLOCK) যখন আপনার প্রতিবেদন তৈরি করা দরকার। এই মুহুর্তে, ডেটা খুব বেশি পরিবর্তন হবে না এবং আপনি এই রেকর্ডগুলি লক করতে চাইবেন না।


2
আমার মনে হয় আপনি যদি বর্তমান পরিবর্তনগুলির বিষয়ে চিন্তা না করেন তবে উইথ (নলক) আরও ভাল।
আব্দুল সবুর

9

আপনি যদি আর্থিক লেনদেন পরিচালনা করে থাকেন তবে আপনি কখনই ব্যবহার করতে চাইবেন না nolocknolockপ্রচুর আপডেট রয়েছে এমন বড় সারণীগুলি থেকে নির্বাচন করতে সবচেয়ে ভাল ব্যবহৃত হয় এবং আপনি যে রেকর্ডটি পান সেটি সম্ভবত পুরানো হতে পারে কিনা তা আপনার যত্ন নেই।

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


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

8

আমি কিছু করার জন্য একটি "পরবর্তী ব্যাচ" পুনরুদ্ধার করতে ব্যবহার করেছি। কোন সঠিক আইটেম এই ক্ষেত্রে এটি বিবেচনা করে না, এবং আমার অনেক ব্যবহারকারী এই একই ক্যোয়ারী চালাচ্ছেন।


1
কাজের একটি সারিতে একটি ব্যাকগ্রাউন্ড টাস্ক উপস্থাপন করার জন্য আমরা অনুরূপ কিছু করি। যদি, এটি কোনও নির্দিষ্ট রেকর্ডে পৌঁছে যায় তবে এটি আর বিদ্যমান / নির্বাচনের মানদণ্ডের সাথে মেলে না, এটি কেবল পরবর্তীটিতে চলে যায়।
ট্রিপহাউন্ড

7

"নোংরা" ডেটা সহ আপনি ঠিক থাকলে নলক ব্যবহার করুন। যার অর্থ নলকটি এমন ডেটাও পড়তে পারে যা পরিবর্তিত এবং / অথবা অনিবন্ধিত ডেটা প্রক্রিয়ায় রয়েছে।

উচ্চতর লেনদেনের পরিবেশে এটি ব্যবহার করা সাধারণত ভাল ধারণা নয় এবং সে কারণেই এটি কোয়েরিতে কোনও ডিফল্ট বিকল্প নয়।


3
আপনার কেবলমাত্র একবার প্রয়োজন এটি একটি উচ্চ লেনদেনের পরিবেশে। যদি আপনার টেবিলগুলি বেশিরভাগ অলস থাকে তবে আপনি এটির মাধ্যমে কোনও লাভ করতে পারবেন না।
জোনাথন অ্যালেন

7

আমি বিশেষত এসকিউএল সার্ভার 2000 ডেটাবেসে উচ্চ ক্রিয়াকলাপ সহ (নোলক) ইঙ্গিতটি ব্যবহার করি। এসকিউএল সার্ভার 2005 এ এটির প্রয়োজন আছে তা আমি নিশ্চিত নই। আমি সম্প্রতি ক্লায়েন্টের ডিবিএর অনুরোধে একটি এসকিউএল সার্ভার 2000-এ এই ইঙ্গিতটি যুক্ত করেছি, কারণ তিনি প্রচুর এসপিআইডি রেকর্ড লকটি লক্ষ্য করছিলেন।

আমি কেবল এটিই বলতে পারি যে ইঙ্গিতটি ব্যবহার করা আমাদের ক্ষতি করে না এবং লকিংয়ের সমস্যাটি নিজেই সমাধান করেছে বলে মনে হয়। সেই নির্দিষ্ট ক্লায়েন্টের ডিবিএ মূলত জোর দিয়েছিল যে আমরা ইঙ্গিতটি ব্যবহার করি।

যাইহোক, আমি যে ডেটাবেসগুলি মোকাবিলা করি সেগুলি এন্টারপ্রাইজ মেডিকেল দাবী সিস্টেমগুলির ব্যাক-এন্ডস, তাই আমরা লক্ষ লক্ষ রেকর্ড এবং 20+ টেবিলের সাথে অনেকগুলিতে যোগ দিয়ে কথা বলছি। আমি জোড়ার প্রতিটি টেবিলের জন্য সাধারণত একটি WITH (নলক) ইঙ্গিত যুক্ত করি (এটি যদি কোনও উত্পন্ন টেবিল না হয় তবে আপনি সেই নির্দিষ্ট ইঙ্গিতটি ব্যবহার করতে পারবেন না)


1
এসকিউএল সার্ভার 2005 "সারি সংস্করণ" যুক্ত করেছে যা নলকের প্রয়োজনীয়তা হ্রাস করতে পারে। আমরা সম্প্রতি আপগ্রেড করেছি এবং আমাদের ডিবিএগুলি ব্যবহার বন্ধ করতে প্রশিক্ষণ দিচ্ছি না।
জোনাথন অ্যালেন

5

সহজ উত্তরটি একটি সহজ প্রশ্ন - আপনার ফলাফলগুলি পুনরাবৃত্তিযোগ্য হওয়া দরকার? যদি হ্যাঁ হয় তবে কোনও পরিস্থিতিতে NOLOCKS উপযুক্ত নয়

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

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