আমি আমার বর্তমান পরিবেশে নোলকের বিরুদ্ধে লড়াই করছি। একটি যুক্তি যা আমি শুনেছি তা হ'ল লকিংয়ের ওভারহেড একটি ক্যোয়ারিকে ধীর করে দেয়। সুতরাং, এই ওভারহেডটি ঠিক কতটা হতে পারে তা দেখতে আমি একটি পরীক্ষা তৈরি করেছি।
আমি আবিষ্কার করেছি যে NOLOCK আসলে আমার স্ক্যানটি ধীর করে দেয়।
প্রথমে আমি আনন্দিত ছিলাম, তবে এখন আমি কেবল বিভ্রান্ত হয়ে পড়েছি। আমার পরীক্ষাটি কি কোনওভাবে অবৈধ? নলককে আসলে কিছুটা দ্রুত স্ক্যানের অনুমতি দেওয়া উচিত নয়? এখানে কি হচ্ছে?
এখানে আমার স্ক্রিপ্ট:
USE TestDB
GO
--Create a five-million row table
DROP TABLE IF EXISTS dbo.JustAnotherTable
GO
CREATE TABLE dbo.JustAnotherTable (
ID INT IDENTITY PRIMARY KEY,
notID CHAR(5) NOT NULL )
INSERT dbo.JustAnotherTable
SELECT TOP 5000000 'datas'
FROM sys.all_objects a1
CROSS JOIN sys.all_objects a2
CROSS JOIN sys.all_objects a3
/********************************************/
-----Testing. Run each multiple times--------
/********************************************/
--How fast is a plain select? (I get about 587ms)
DECLARE @trash CHAR(5), @dt DATETIME = SYSDATETIME()
SELECT @trash = notID --trash variable prevents any slowdown from returning data to SSMS
FROM dbo.JustAnotherTable
ORDER BY ID
OPTION (MAXDOP 1)
SELECT DATEDIFF(MILLISECOND,@dt,SYSDATETIME())
----------------------------------------------
--Now how fast is it with NOLOCK? About 640ms for me
DECLARE @trash CHAR(5), @dt DATETIME = SYSDATETIME()
SELECT @trash = notID
FROM dbo.JustAnotherTable (NOLOCK)
ORDER BY ID --would be an allocation order scan without this, breaking the comparison
OPTION (MAXDOP 1)
SELECT DATEDIFF(MILLISECOND,@dt,SYSDATETIME())
আমি যা চেষ্টা করেছি তা কার্যকর হয়নি:
- বিভিন্ন সার্ভারে চলছে (একই ফলাফল, সার্ভারগুলি 2016-SP1 এবং 2016-SP2, উভয়ই শান্ত ছিল)
- বিভিন্ন সংস্করণে dbfiddle.uk এ চলছে (গোলমাল, তবে সম্ভবত একই ফলাফল)
- ইঙ্গিতগুলির পরিবর্তে বিচ্ছিন্ন স্তর সেট করুন (একই ফলাফল)
- টেবিলে লক বর্ধন বন্ধ করা হচ্ছে (একই ফলাফল)
- প্রকৃত ক্যোয়ারী পরিকল্পনায় স্ক্যানের বাস্তব প্রয়োগের সময় পরীক্ষা করা (একই ফলাফল)
- ইঙ্গিত পুনরায় কম্পাইল (একই ফলাফল)
- কেবল ফাইলগ্রুপ পড়ুন (একই ফলাফল)
সর্বাধিক প্রতিশ্রুতিবদ্ধ অনুসন্ধানটি ট্র্যাশ ভেরিয়েবল অপসারণ এবং কোনও ফলাফল ফলাফল নয় results প্রথমদিকে এটি নলোককে সামান্য দ্রুত দেখিয়েছিল, কিন্তু আমি যখন আমার বসকে ডেমো দেখিয়েছিলাম তখন নোলক আরও ধীর হয়ে ফিরেছিল।
এটি নলক সম্পর্কে কী যা ভেরিয়েবল অ্যাসাইনমেন্ট সহ স্ক্যানকে ধীর করে দেয়?