আমি এমন কোনও কোয়েরি দেখেছি যা দেখে মনে হচ্ছে কিছু ব্লক করার তদন্ত করছি:
SELECT SomeField FROM SomeTable NOLOCK
আমি দেখেছি NOLOCK
এবং কৌতূহলী ছিলাম কীভাবে এটি অন্যান্য ক্যোয়ারিকে ব্লক করে দিতে পারে, এই ক্ষেত্রে DELETE
বিবৃতিতে। আমি লকগুলি ব্যবহার করে একটি তাত্ক্ষণিকভাবে sp_lock
দেখেছি এবং আমি যা দেখেছি তা এখানে:
DB S GRANT
TAB IS GRANT
PAG S GRANT
এখন, আমার বোধগম্যতা হল যে NOLOCK
কেবল একটি স্কিমা-স্থিতিশীলতা লক নেওয়ার কথা, কেন তখন এটি আইএস লকটি ধরেছিল?
আমার কৌতূহল বেহাল। আমি BOL লাগছিল এবং সেখানে এটি ব্যবহার করার দুটি উপায় ছিল দেখে WITH (NOLOCK)
এবং অবচিত (NOLOCK)
, তাই আমি ঐ ব্যবহার করে দেখুন করার সিদ্ধান্ত নিয়েছে। আমি নিম্নলিখিত জিজ্ঞাসা চালিয়ে অনুসরণ করে চালিয়েছি sp_lock
:
SELECT SomeField FROM SomeTable WITH (NOLOCK)
ডিবি এস গ্রান্ট ট্যাব এস-এস গ্রান্ট
SELECT SomeField FROM SomeTable (NOLOCK)
ডিবি এস গ্রান্ট ট্যাব এস-এস গ্রান্ট
নিশ্চিতভাবেই, আমার স্কিমা-স্থিতিশীলতা লক রয়েছে। সুতরাং আমার প্রশ্নটি হ'ল: এখানে কী চলছে? যদি NOLOCK ব্যবহারের জন্য গৃহীত সিনট্যাক্স হয় WITH (NOLOCK)
বা হয় (NOLOCK)
তবে কোয়েরি ত্রুটিটি বের করে যখন এটি কেবল প্লেইন NOLOCK
(প্রথম বন্ধনী ছাড়াই) দিয়ে চলে? যদি এটি সমর্থিত হয় তবে কেন একটি আইএস লক দখল করা হচ্ছে? আমি এখানে কি মিস করছি? আমি একটি উত্তর খুঁজছি অনলাইন, কিন্তু এখন পর্যন্ত সংক্ষেপে এসেছি।
আমি 2008R2 এবং 2012 উভয়ই এটি পরীক্ষা করেছি।
SELECT SomeField FROM SomeTable NOLOCK (NOLOCK)
ডাবল