Temporal Tables SQL Server 2016 এবং তার পরবর্তী সংস্করণে একটি গুরুত্বপূর্ণ ফিচার যা ডেটার ইতিহাস ট্র্যাক করতে এবং পরিবর্তনগুলির ইতিহাস বজায় রাখতে সাহায্য করে। এটি বিশেষভাবে ব্যবহৃত হয় যেখানে ডেটা সময় অনুযায়ী পরিবর্তিত হয় এবং সেই পরিবর্তনগুলির একটি ইতিহাস রাখা প্রয়োজন। Temporal Table Maintenance এবং Performance Management হল সেই প্রক্রিয়া যেখানে সময়গত টেবিলগুলির কার্যকারিতা এবং রক্ষণাবেক্ষণ নিশ্চিত করা হয়, যাতে ডেটার স্থায়িত্ব এবং সিস্টেমের পারফরম্যান্স ঠিক রাখা যায়।
1. Temporal Tables কী?
Temporal Tables বা System-Versioned Tables এমন ধরনের টেবিল যা ডেটার সময়ভিত্তিক ইতিহাস ট্র্যাক করে। যখনই কোনো রেকর্ডের ডেটা পরিবর্তিত হয়, তখন পুরনো ডেটা ঐ টেবিলের ইতিহাসের অংশ হিসেবে সংরক্ষিত থাকে এবং নতুন ডেটা বর্তমান টেবিলের অংশ হিসেবে রেকর্ড করা হয়।
1.1. Temporal Tables এর স্ট্রাকচার
- System-Versioned Table: এটি মূল টেবিল যা বর্তমান ডেটা ধারণ করে।
- History Table: এটি ঐ টেবিলের ইতিহাস সংরক্ষণ করে, যেখানে পূর্বের রেকর্ডগুলো রাখা হয়।
যেকোনো ডেটার আপডেট বা ডিলিট হলে, SQL Server স্বয়ংক্রিয়ভাবে সেই পরিবর্তন ইতিহাস টেবিলে সংরক্ষণ করে।
1.2. Temporal Table তৈরি করা
Temporal Table তৈরি করার জন্য PERIOD FOR SYSTEM_TIME কীওয়ার্ড ব্যবহার করা হয়। একটি সাধারণ Temporal Table তৈরি করার উদাহরণ:
CREATE TABLE Employees
(
EmployeeID INT PRIMARY KEY,
Name NVARCHAR(100),
Position NVARCHAR(50),
Salary DECIMAL(18, 2),
ValidFrom DATETIME2 GENERATED ALWAYS AS ROW START HIDDEN NOT NULL,
ValidTo DATETIME2 GENERATED ALWAYS AS ROW END HIDDEN NOT NULL,
PERIOD FOR SYSTEM_TIME (ValidFrom, ValidTo)
)
WITH (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.EmployeesHistory));
এখানে:
ValidFromএবংValidToকলামগুলি ডেটার সময়কাল ট্র্যাক করে।SYSTEM_VERSIONING = ONএ হিষ্ট্রি টেবিলের জন্য dbo.EmployeesHistory তৈরি করা হয়।
2. Temporal Table Maintenance
Temporal Table Maintenance নিশ্চিত করে যে, ডেটাবেসে সময়ভিত্তিক টেবিলগুলো নিয়মিত রক্ষণাবেক্ষণ করা হচ্ছে, যাতে তাদের কার্যকারিতা এবং নিরাপত্তা ঠিক থাকে।
2.1. History Table Management
History Table স্বয়ংক্রিয়ভাবে পূর্ণ হবে যখন কোনো রেকর্ড পরিবর্তিত বা মুছে ফেলা হবে। এই টেবিলের সাইজ বৃদ্ধি পেলে পারফরম্যান্সে নেতিবাচক প্রভাব পড়তে পারে। এর জন্য কিছু নিয়মিত রক্ষণাবেক্ষণ পদ্ধতি রয়েছে:
- Historical Data Cleanup: নিয়মিত পুরনো ইতিহাস ডেটা মুছে ফেলতে হবে, যেমন প্রতি তিন মাস পর পুরনো ডেটা মুছে ফেলা। এতে টেবিলের আকার ছোট থাকবে এবং পারফরম্যান্স ঠিক থাকবে।
DELETE FROM dbo.EmployeesHistory
WHERE ValidTo < '2023-01-01';
- Data Archiving: ইতিহাসের ডেটা অন্য ডেটাবেস বা টেবিলে আর্কাইভ করা যেতে পারে, যাতে মূল ডেটাবেসটি ছোট এবং দ্রুত থাকে।
2.2. History Table Performance Optimization
- Indexing: History table-এ ইনডেক্স তৈরি করা অত্যন্ত গুরুত্বপূর্ণ, কারণ এটি দ্রুত ডেটা অনুসন্ধান এবং রিটার্ন করতে সহায়তা করে। বিশেষ করে,
ValidFromএবংValidToকলামগুলিতে ইনডেক্স তৈরি করা উচিত।
CREATE NONCLUSTERED INDEX IX_EmployeesHistory_ValidFrom
ON dbo.EmployeesHistory (ValidFrom);
- Partitioning: বড় আকারের ইতিহাস টেবিলের ক্ষেত্রে, আপনি partitioning ব্যবহার করতে পারেন, যা ডেটাকে ভাগ করে এবং দ্রুত অনুসন্ধান নিশ্চিত করে।
CREATE PARTITION FUNCTION pf_date (DATETIME2)
AS RANGE RIGHT FOR VALUES ('2022-01-01', '2023-01-01');
CREATE PARTITION SCHEME ps_date
AS PARTITION pf_date
ALL TO ([PRIMARY]);
2.3. System Versioning Configuration
System Versioning নিয়ন্ত্রণ করার জন্য, টেবিলের স্টেটাস পরিবর্তন করা প্রয়োজন হতে পারে, যেমন:
- Disable System Versioning: কিছু সময়ের জন্য যদি ইতিহাস ট্র্যাক করা না চাই, তবে আপনি System Versioning বন্ধ করতে পারেন।
ALTER TABLE Employees SET (SYSTEM_VERSIONING = OFF);
- Enable System Versioning: আবার এটিকে চালু করতে পারেন।
ALTER TABLE Employees SET (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.EmployeesHistory));
3. Temporal Table Performance Management
Temporal Table Performance Management হল সেই প্রক্রিয়া যা নিশ্চিত করে যে সময়ভিত্তিক টেবিলগুলির কার্যকারিতা এবং পারফরম্যান্স অপটিমাইজড রয়েছে। এটি সংশ্লিষ্ট টেবিলগুলির যথাযথ রক্ষণাবেক্ষণ, পর্যবেক্ষণ এবং উন্নতির মাধ্যমে করা হয়।
3.1. Query Optimization
- Avoid Full Table Scans: Temporal table এ টেবিল স্ক্যান করা এড়াতে indexing গুরুত্বপূর্ণ। যেমন,
ValidFromএবংValidToকলামগুলিতে ইনডেক্স তৈরি করা, যাতে সময়কাল অনুসারে ডেটা দ্রুত খুঁজে পাওয়া যায়। - Efficient Queries: যখন history table থেকে ডেটা নির্বাচন করা হয়, তখন আপনার কুয়েরি সঠিকভাবে অপটিমাইজ করা উচিত, যাতে অপ্রয়োজনীয় রেকর্ড লোড না হয়।
SELECT EmployeeID, Name, Position, Salary
FROM dbo.Employees FOR SYSTEM_TIME AS OF '2023-01-01'
WHERE EmployeeID = 1;
3.2. Data Purging Strategy
Data Purging বা data cleanup একটি গুরুত্বপূর্ণ স্ট্রাটেজি, যা বড় ইতিহাস টেবিল থেকে পুরনো ডেটা নিয়মিত মুছে ফেলে। এটির জন্য SQL Server Agent ব্যবহার করে সিডিউল করা যায়।
- SQL Server Agent Job তৈরি করে, পুরনো ডেটা (যেমন, 1 বছরের পুরনো) অটোমেটিকভাবে মুছে ফেলার জন্য একটি জব তৈরি করতে পারেন।
EXEC sp_add_job @job_name = 'Purge Old Data';
EXEC sp_add_jobstep @job_name = 'Purge Old Data', @step_name = 'Delete Old History Data',
@command = 'DELETE FROM dbo.EmployeesHistory WHERE ValidTo < DATEADD(YEAR, -1, GETDATE())';
EXEC sp_start_job @job_name = 'Purge Old Data';
3.3. Monitoring and Performance Tuning
- Performance Counters: SQL Server-এর Dynamic Management Views (DMVs) এবং Performance Counters ব্যবহার করে Temporal Table-এর পারফরম্যান্স মনিটর করা যেতে পারে।
SELECT *
FROM sys.dm_db_index_physical_stats (NULL, NULL, NULL, NULL, 'DETAILED');
- Query Store: Query Store ব্যবহার করে, সময়ভিত্তিক টেবিলের উপর চলা কুয়েরি পারফরম্যান্স বিশ্লেষণ করা যেতে পারে। এতে সময়ের সাথে পারফরম্যান্সে কোনো সমস্যা ঘটলে সেটি চিহ্নিত করা সহজ হয়।
সারাংশ
Temporal Tables ডেটাবেসে সময়ভিত্তিক ডেটা সংরক্ষণ এবং ইতিহাস ট্র্যাকিংয়ের জন্য অত্যন্ত গুরুত্বপূর্ণ ফিচার। এর মাধ্যমে আমরা ডেটার পূর্ববর্তী অবস্থাগুলিকে সহজে রক্ষণাবেক্ষণ করতে পারি। তবে, এর কার্যকারিতা নিশ্চিত করতে এবং পারফরম্যান্স বজায় রাখতে history table management, indexing, partitioning, এবং data cleanup কৌশলগুলো প্রয়োগ করা জরুরি। Proper maintenance এবং performance tuning করলে Temporal Tables SQL Server-এর একটি শক্তিশালী এবং কার্যকরী ফিচার হয়ে ওঠে।
Read more