আমি নিম্নলিখিত সারণী তৈরি করেছি:
CREATE TABLE dbo.TestStructure
(
id INT NOT NULL,
filler1 CHAR(36) NOT NULL,
filler2 CHAR(216) NOT NULL
);
এবং তারপরে একটি ক্লাস্টারড সূচক তৈরি করেছে:
CREATE CLUSTERED INDEX idx_cl_id
ON dbo.TestStructure(id);
পরবর্তী আমি এটিকে 30 টি সারি দিয়ে পপুলেট করেছি প্রতিটি আকার 256 বাইট (টেবিল ঘোষণার ভিত্তিতে):
DECLARE @i AS int = 0;
WHILE @i < 30
BEGIN
SET @i = @i + 1;
INSERT INTO dbo.TestStructure (id, filler1, filler2)
VALUES (@i, 'a', 'b');
END;
এখন "ট্রেনিং কিট (পরীক্ষা 70-461): মাইক্রোসফ্ট এসকিউএল সার্ভার 2012 (ইটজিক বেন-গান)" বইটিতে পড়েছি তথ্যের ভিত্তিতে:
এসকিউএল সার্ভার অভ্যন্তরীণভাবে পৃষ্ঠাগুলিতে একটি ডেটা ফাইলে ডেটা সংগঠিত করে। একটি পৃষ্ঠা একটি 8 কেবি ইউনিট এবং একটি একক অবজেক্টের অন্তর্গত; উদাহরণস্বরূপ, একটি টেবিল বা একটি সূচক। একটি পৃষ্ঠা পড়ার এবং লেখার ক্ষুদ্রতম একক। পৃষ্ঠাগুলি আরও প্রসারিত মধ্যে সংগঠিত হয়। একটি পরিমাণে টানা আটটি পৃষ্ঠা থাকে। কিছু পরিমাণ থেকে পৃষ্ঠাগুলি কোনও একক অবজেক্ট বা একাধিক বস্তুর সাথে সম্পর্কিত হতে পারে। পৃষ্ঠাগুলি যদি একাধিক অবজেক্টের অন্তর্ভুক্ত হয়, তবে সীমাটিকে একটি মিশ্র মাত্রা বলা হয়; পৃষ্ঠাগুলি যদি কোনও একক অবজেক্টের অন্তর্ভুক্ত হয়, তবে সেই পরিমাণটিকে অভিন্ন পরিমাণ বলে called এসকিউএল সার্ভার মিশ্রিত এক্সটেন্টসগুলিতে কোনও বস্তুর প্রথম আট পৃষ্ঠাগুলি সঞ্চয় করে। যখন কোনও বস্তু আট পৃষ্ঠার বেশি হয়ে যায়, এসকিউএল সার্ভার এই বস্তুর জন্য অতিরিক্ত ইউনিফর্ম এক্সটেন্টস বরাদ্দ করে। এই সংস্থার সাথে, ছোট বস্তুগুলি কম স্থান নষ্ট করে এবং বড় অবজেক্টগুলি কম খণ্ডিত হয়।
সুতরাং এখানে আমার প্রথম মিশ্র মাত্রা 8 কেবি পৃষ্ঠা রয়েছে, এটি 76 76৮০ বাইট দিয়ে পপুলেটেড হয়েছে (আমি 30 বার 256 বাইট সাইজের সারিটি sertedোকিয়েছি, তাই 30 * 256 = 7680), আমার রান আকারের চেক প্র্যাকটি যাচাই করা আছে তা পরীক্ষা করতে - এটি নিম্নলিখিত ফলাফলটি প্রদান করে
index_type_desc: CLUSTERED INDEX
index_depth: 1
index_level: 0
page_count: 1
record_count: 30
avg_page_space_used_in_percent: 98.1961947121324
name : TestStructure
rows : 30
reserved : 16 KB
data : 8 KB
index_size : 8 KB
unused : 0 KB
সুতরাং 16 কেবিটি টেবিলের জন্য সংরক্ষিত আছে, প্রথম 8 কেবি পৃষ্ঠাটি রুট আইএএম পৃষ্ঠার জন্য, দ্বিতীয়টি হ'ল পাতাগুলির ডেটা স্টোরেজ পৃষ্ঠার জন্য যা 8KB occupation 7.5 কেবি অধিকৃত রয়েছে, এখন যখন আমি 256 বাইট সহ একটি নতুন সারি sertোকি:
INSERT INTO dbo.TestStructure (id, filler1, filler2)
VALUES (1, 'a', 'b');
এটি একই পৃষ্ঠায় সঞ্চিত নয় যদিও এটির 256 বাইট (7680 বি + 256 = 7936 যা এখনও 8KB এর চেয়ে কম ছোট) রয়েছে, একটি নতুন ডেটা পৃষ্ঠা তৈরি করা হয়েছে, তবে সেই নতুন সারিটি একই পুরানো পৃষ্ঠায় ফিট হতে পারে কেন, এসকিউএল সার্ভার যখন নতুন স্থান তৈরি করে যখন এটি স্থান সংরক্ষণ করতে পারে এবং অনুসন্ধানের সময়টি বিদ্যমান পৃষ্ঠায় এটি সন্নিবেশ করিয়ে কেনে?
দ্রষ্টব্য: হিপ সূচীতে একই জিনিস ঘটছে।