আমি ধরে নিয়েছি যে কমান্ডের "ALL" ফর্ম দ্বারা সম্পাদিত প্রতিটি সূচক অপারেশন অনুসরণ করে, পরবর্তী সূচি পুনর্নির্মাণের আগে লেনদেনের লগ ডেটা ফ্লাশ করা হবে। আসলে কীভাবে এটি কাজ করে, বা সূচি পুনর্নির্মাণগুলি লগ হয় যেন তারা কোনও লেনদেনের অংশ?
1) লগ ফ্লাশিং: সিম্পল পুনরুদ্ধার মডেল প্রতিটি লেনদেনের পরে লগ পরিষ্কার করে না, তবে চেকপয়েন্টগুলিতে। ( আরও তথ্যের জন্য লিঙ্ক )
2 ক) সমস্ত পুনর্নির্মাণ: হ্যাঁ, পুনরায় বিল্ড করা সমস্ত একক লেনদেন হিসাবে কাজ করে। সূচকগুলির মধ্যে পুনর্নির্মাণগুলির নিজস্ব লেনদেন রয়েছে, তবে সামগ্রিক অপারেশন শেষ অবধি সম্পূর্ণরূপে প্রতিশ্রুতিবদ্ধ নয়। হ্যাঁ, আপনি পৃথক সূচি পুনর্নির্মাণের মাধ্যমে লগ ফাইলের বৃদ্ধি সীমিত করতে পারেন (এবং সম্ভবত CHECKPOINT কমান্ড জারি করেছেন)।
2 বি) প্রুফ! এখানে, একটি ডেমো স্ক্রিপ্ট আছে। (2016 দেব-এ নির্মিত) প্রথমে টেবিল এবং সূচী সহ একটি পরীক্ষা ডিবি সেট করুন:
USE master
GO
CREATE DATABASE Test_RebuildLog
GO
ALTER DATABASE Test_RebuildLog
SET RECOVERY SIMPLE
GO
USE Test_RebuildLog
GO
CREATE TABLE IndexTest
(ID int identity(1,1),
a char(1),
b char(1))
CREATE CLUSTERED INDEX CIX_IndexTest_ID ON IndexTest(ID)
CREATE INDEX IX_IndexTest_a ON IndexTest(a)
CREATE INDEX IX_IndexTest_b ON IndexTest(b)
INSERT IndexTest
(a,b)
VALUES ('a','b'),('z','y'),('s','r')
এখন আপনি সমস্ত পুনঃনির্মাণ এবং পৃথকভাবে পুনর্নির্মাণের মধ্যে লগ ক্রিয়াকলাপের তুলনা করতে পারেন
CHECKPOINT
GO
ALTER INDEX ALL ON IndexTest REBUILD
SELECT *
FROM sys.fn_dblog(NULL,NULL)
WHERE Operation = 'LOP_COMMIT_XACT'
OR Operation = 'LOP_BEGIN_XACT'
GO
CHECKPOINT
GO
ALTER INDEX CIX_IndexTest_ID ON IndexTest REBUILD
ALTER INDEX IX_IndexTest_a ON IndexTest REBUILD
ALTER INDEX IX_IndexTest_b ON IndexTest REBUILD
SELECT *
FROM sys.fn_dblog(NULL,NULL)
WHERE Operation = 'LOP_COMMIT_XACT'
OR Operation = 'LOP_BEGIN_XACT'
GO
নোট করুন যে প্রথম উন্মুক্ত লেনদেন (আমার জন্য লেনদেন আইডি 0000: 000002fa) সমস্ত পুনরায় বিল্ডিংয়ের শেষ না হওয়া পর্যন্ত প্রতিশ্রুতিবদ্ধ নয়, তবে সূচি অনুসারে সূচি পুনর্নির্মাণের জন্য তারা ক্রমাগত প্রতিশ্রুতিবদ্ধ।