আমি যতদূর দেখতে পাচ্ছি বাস্তবে এটি করার কোনও কার্যকর উপায় নেই।
অন্যান্য উত্তর উল্লেখ করে DBCC PAGE
এবং বিবরণটি পাঠককে ছেড়ে দেয় and পরীক্ষা-নিরীক্ষা থেকে আমি ধরে নিই তাদের অর্থ bUse1
।
এটি অ্যাকাউন্টটি নিতে ব্যর্থ হয় যা DBCC PAGE
এটি নিজেই পৃষ্ঠার একটি ব্যবহার এবং এটি আমাদের দেখানোর আগে মানটি আপডেট হয়।
এটি প্রদর্শিত একটি স্ক্রিপ্ট নীচে রয়েছে (চালাতে 12 সেকেন্ড সময় নেয়)।
USE tempdb;
CREATE TABLE T(X INT);
INSERT INTO T VALUES(1);
DECLARE @DBCCPAGE NVARCHAR(100);
SELECT @DBCCPAGE = 'DBCC PAGE(0,' + CAST(file_id AS VARCHAR) + ',' + CAST(page_id AS VARCHAR) + ',0) WITH TABLERESULTS;'
FROM T CROSS APPLY sys.fn_PhysLocCracker (%%physloc%%)
DECLARE @DbccResults TABLE
(
ID INT IDENTITY,
ParentObject VARCHAR(1000)NULL,
Object VARCHAR(4000)NULL,
Field VARCHAR(1000)NULL,
ObjectValue VARCHAR(MAX)NULL
)
INSERT INTO @DbccResults EXEC(@DBCCPAGE)
WAITFOR DELAY '00:00:07'
INSERT INTO @DbccResults EXEC(@DBCCPAGE)
WAITFOR DELAY '00:00:05'
INSERT INTO @DbccResults EXEC(@DBCCPAGE)
SELECT *
FROM @DbccResults
WHERE Field = 'bUse1'
ORDER BY ID
EXEC(@DBCCPAGE)
DROP TABLE T
সাধারণ ফলাফল হয়
+----+--------------+-------------------------+-------+-------------+
| ID | ParentObject | Object | Field | ObjectValue |
+----+--------------+-------------------------+-------+-------------+
| 8 | BUFFER: | BUF @0x00000002FE1F1440 | bUse1 | 54938 |
| 49 | BUFFER: | BUF @0x00000002FE1F1440 | bUse1 | 54945 |
| 90 | BUFFER: | BUF @0x00000002FE1F1440 | bUse1 | 54950 |
+----+--------------+-------------------------+-------+-------------+
দ্বিতীয় ফলাফল হচ্ছে
+---------+-------------------------+--------------+--------------------+
| BUFFER: | BUF @0x00000002FE1F1440 | bpage | 0x00000002F4968000 |
| BUFFER: | BUF @0x00000002FE1F1440 | bhash | 0x0000000000000000 |
| BUFFER: | BUF @0x00000002FE1F1440 | bpageno | (1:120) |
| BUFFER: | BUF @0x00000002FE1F1440 | bdbid | 8 |
| BUFFER: | BUF @0x00000002FE1F1440 | breferences | 0 |
| BUFFER: | BUF @0x00000002FE1F1440 | bcputicks | 0 |
| BUFFER: | BUF @0x00000002FE1F1440 | bsampleCount | 0 |
| BUFFER: | BUF @0x00000002FE1F1440 | bUse1 | 54950 |
| BUFFER: | BUF @0x00000002FE1F1440 | bstat | 0x9 |
| BUFFER: | BUF @0x00000002FE1F1440 | blog | 0x1c9a |
| BUFFER: | BUF @0x00000002FE1F1440 | bnext | 0x0000000000000000 |
+---------+-------------------------+--------------+--------------------+
7 সেকেন্ড বিলম্বের পরে আউটপুটটি 7 এবং 5 সেকেন্ড বিলম্বের পরে 5 দ্বারা বাড়ানো হয়।
সুতরাং এটি স্পষ্ট বলে মনে হয় যে এই এলআরইউ মানগুলি কয়েক যুগের পর থেকে সেকেন্ড are এসকিউএল সার্ভার পরিষেবাদি পুনরায় আরম্ভ করা পর্বের পরিবর্তন হয় না তবে মেশিনটি পুনরায় চালু করে।
মানটি প্রতি 65,536 সেকেন্ডের মধ্যে গড়িয়ে যায় তাই আমি অনুমান করি যে এটি ঠিক এর মতো কিছু ব্যবহার করে system_up_time mod 65536
এটি আমার মনে একটি উত্তর না দেওয়া প্রশ্ন ছেড়ে দেয় (কোনও গ্রহণকারী?)। এসকিউএল সার্ভার ইন্টার্নাল বই অনুসারে ব্যবহার LRU-K
করে K=2
। সেখানে থাকা উচিত নয় bUse2
? যদি তাই হয় তবে কোথায়?
bUse1
মানটি পরিবর্তন না করেই পর্যবেক্ষণের একটি উপায় আছে যা আমি জানি এবং এটি বব ওয়ার্ড এখানে প্রদর্শন করেছেন demonst
এসকিউএল সার্ভার প্রক্রিয়াতে একটি ডিবাগার সংযুক্ত করুন এবং বাফার কাঠামোর মেমরি ঠিকানার জন্য রেফারেন্সযুক্ত মেমরি প্রদর্শন করুন ( 0x00000002FE1F1440
উপরে দেখানো হয়েছে )।
আমি উপরের স্ক্রিপ্টটি চালানোর সাথে সাথে এটি করেছি এবং নিম্নলিখিতগুলি দেখলাম।
(পূর্বের পরীক্ষা-নিরীক্ষা থেকে আমি হাইলাইট করা বাইটগুলিই খুঁজে পেলাম যেগুলি রানের মধ্যে পরিবর্তিত হয়েছিল তাই এটি অবশ্যই সঠিক right
একটি আশ্চর্যজনক দিক হল SELECT CAST(0xc896 as int)
= 51350
।
এটি হুবহু 3600 (এক ঘন্টা) রিপোর্টের তুলনায় কম DBCC PAGE
।
আমি বিশ্বাস করি এটি DBCC PAGE
নিজের কল করে পৃষ্ঠাগুলি ক্যাশে রাখা হচ্ছে তা অস্বীকার করার কিছু প্রচেষ্টা be একটি "সাধারণ" পৃষ্ঠার জন্য এটি নির্বাচন করুন এই এক ঘন্টার সমন্বয় ঘটে না। দৌড়ানোর পরে
SELECT *
FROM T
SELECT ((ms_ticks) % 65536000) / 1000 AS [Roughly Expected Value]
FROM sys.dm_os_sys_info
প্রত্যাশার মতো মেমোরিতে প্রদর্শিত মান।
DBCC
কমান্ড আসলে যে মান দুইবার আপডেট। একবারে
sqlmin.dll!BPool::Touch() + 0x3bfe bytes
sqlmin.dll!BPool::Get() + 0x12e bytes
sqlmin.dll!LatchedBuf::ReadLatch() + 0x14f bytes
sqlmin.dll!UtilDbccDumpPage() + 0x364 bytes
sqlmin.dll!DbccPage() + 0xfa bytes
sqllang.dll!DbccCommand::Execute() + 0x153 bytes
উচ্চ মানের সাথে আবার আবার
sqlmin.dll!LatchedBuf::FreeAndUnlatch() + 0x71 bytes
sqlmin.dll!UtilDbccDumpPage() + 0x545 bytes
sqlmin.dll!DbccPage() + 0xfa bytes
sqllang.dll!DbccCommand::Execute() + 0x153 bytes
নীচের সাথে।
আমি DBCC BUFFER
/ DBCC PAGE
কোনও উপায়ে ব্যবহার না করেই পৃষ্ঠাগুলির জন্য বাফার ঠিকানাগুলি পাওয়ার কোনও উপায় সম্পর্কে অবগত নই এবং এই দুটি পরিবর্তনই আমরা যে মূল্যটি পরিদর্শন করার চেষ্টা করছি তা ব্যবহার করে!