ده مثال عملی منحصربهفرد برای TRUNCATE TABLE ... WITH (PARTITIONS(...))
مثال 1: تعریف پایه با مقدار ثابت در TRUNCATE TABLE ... WITH (PARTITIONS(...))
در مثال شماره 1، سناریوی «تعریف پایه با مقدار ثابت» برای TRUNCATE TABLE ... WITH (PARTITIONS(...)) اجرا میشود. هدف این است که رفتار Partition List در یک نمونه قابل بازتولید دیده شود و نتیجه بدون نیاز به اجرای ذهنی قابل فهم باشد.
CREATE PARTITION FUNCTION pf_Truncate_01 (int) AS RANGE RIGHT FOR VALUES (100,200,300);
CREATE PARTITION SCHEME ps_Truncate_01 AS PARTITION pf_Truncate_01 ALL TO ([PRIMARY]);
CREATE TABLE dbo.Truncate_01 (Id int NOT NULL, Note nvarchar(40) NULL) ON ps_Truncate_01(Id);
INSERT INTO dbo.Truncate_01 VALUES (90,N'P1'),(110,N'P2'),(210,N'P3'),(310,N'P4');
TRUNCATE TABLE dbo.Truncate_01 WITH (PARTITIONS (2));
SELECT $PARTITION.pf_Truncate_01(Id) AS PartitionNo, COUNT(*) AS RowCount
FROM dbo.Truncate_01 GROUP BY $PARTITION.pf_Truncate_01(Id) ORDER BY PartitionNo;
| شاخص | خروجی نمونه |
|---|
| پارتیشن حذفشده | 2 |
| ردیفهای دیگر | باقی میمانند |
تحلیل مثال 1 برای TRUNCATE TABLE ... WITH (PARTITIONS(...)): این سناریو نشان میدهد Partition Range باید همراه کنترل کاتالوگ و مقدارهای مرزی بررسی شود. کاربرد واقعی آن در پاکسازی بازههای مشخص با لاگ کمتر از DELETE است.
مثال 2: اجرای سناریو روی جدول نمونه در TRUNCATE TABLE ... WITH (PARTITIONS(...))
در مثال شماره 2، سناریوی «اجرای سناریو روی جدول نمونه» برای TRUNCATE TABLE ... WITH (PARTITIONS(...)) اجرا میشود. هدف این است که رفتار Partition Range در یک نمونه قابل بازتولید دیده شود و نتیجه بدون نیاز به اجرای ذهنی قابل فهم باشد.
CREATE PARTITION FUNCTION pf_Truncate_02 (int) AS RANGE RIGHT FOR VALUES (200,300,400);
CREATE PARTITION SCHEME ps_Truncate_02 AS PARTITION pf_Truncate_02 ALL TO ([PRIMARY]);
CREATE TABLE dbo.Truncate_02 (Id int NOT NULL, Note nvarchar(40) NULL) ON ps_Truncate_02(Id);
INSERT INTO dbo.Truncate_02 VALUES (190,N'P1'),(210,N'P2'),(310,N'P3'),(410,N'P4');
TRUNCATE TABLE dbo.Truncate_02 WITH (PARTITIONS (3));
SELECT $PARTITION.pf_Truncate_02(Id) AS PartitionNo, COUNT(*) AS RowCount
FROM dbo.Truncate_02 GROUP BY $PARTITION.pf_Truncate_02(Id) ORDER BY PartitionNo;
| شاخص | خروجی نمونه |
|---|
| پارتیشن حذفشده | 3 |
| ردیفهای دیگر | باقی میمانند |
تحلیل مثال 2 برای TRUNCATE TABLE ... WITH (PARTITIONS(...)): این سناریو نشان میدهد Page Deallocation باید همراه کنترل کاتالوگ و مقدارهای مرزی بررسی شود. کاربرد واقعی آن در پاکسازی بازههای مشخص با لاگ کمتر از DELETE است.
مثال 3: استفاده در SELECT و گزارشگیری در TRUNCATE TABLE ... WITH (PARTITIONS(...))
در مثال شماره 3، سناریوی «استفاده در SELECT و گزارشگیری» برای TRUNCATE TABLE ... WITH (PARTITIONS(...)) اجرا میشود. هدف این است که رفتار Page Deallocation در یک نمونه قابل بازتولید دیده شود و نتیجه بدون نیاز به اجرای ذهنی قابل فهم باشد.
CREATE PARTITION FUNCTION pf_Truncate_03 (int) AS RANGE RIGHT FOR VALUES (300,400,500);
CREATE PARTITION SCHEME ps_Truncate_03 AS PARTITION pf_Truncate_03 ALL TO ([PRIMARY]);
CREATE TABLE dbo.Truncate_03 (Id int NOT NULL, Note nvarchar(40) NULL) ON ps_Truncate_03(Id);
INSERT INTO dbo.Truncate_03 VALUES (290,N'P1'),(310,N'P2'),(410,N'P3'),(510,N'P4');
TRUNCATE TABLE dbo.Truncate_03 WITH (PARTITIONS (4));
SELECT $PARTITION.pf_Truncate_03(Id) AS PartitionNo, COUNT(*) AS RowCount
FROM dbo.Truncate_03 GROUP BY $PARTITION.pf_Truncate_03(Id) ORDER BY PartitionNo;
| شاخص | خروجی نمونه |
|---|
| پارتیشن حذفشده | 4 |
| ردیفهای دیگر | باقی میمانند |
تحلیل مثال 3 برای TRUNCATE TABLE ... WITH (PARTITIONS(...)): این سناریو نشان میدهد Aligned Index باید همراه کنترل کاتالوگ و مقدارهای مرزی بررسی شود. کاربرد واقعی آن در پاکسازی بازههای مشخص با لاگ کمتر از DELETE است.
مثال 4: کنترل شرط و بازه هدف در TRUNCATE TABLE ... WITH (PARTITIONS(...))
در مثال شماره 4، سناریوی «کنترل شرط و بازه هدف» برای TRUNCATE TABLE ... WITH (PARTITIONS(...)) اجرا میشود. هدف این است که رفتار Aligned Index در یک نمونه قابل بازتولید دیده شود و نتیجه بدون نیاز به اجرای ذهنی قابل فهم باشد.
CREATE PARTITION FUNCTION pf_Truncate_04 (int) AS RANGE RIGHT FOR VALUES (400,500,600);
CREATE PARTITION SCHEME ps_Truncate_04 AS PARTITION pf_Truncate_04 ALL TO ([PRIMARY]);
CREATE TABLE dbo.Truncate_04 (Id int NOT NULL, Note nvarchar(40) NULL) ON ps_Truncate_04(Id);
INSERT INTO dbo.Truncate_04 VALUES (390,N'P1'),(410,N'P2'),(510,N'P3'),(610,N'P4');
TRUNCATE TABLE dbo.Truncate_04 WITH (PARTITIONS (1));
SELECT $PARTITION.pf_Truncate_04(Id) AS PartitionNo, COUNT(*) AS RowCount
FROM dbo.Truncate_04 GROUP BY $PARTITION.pf_Truncate_04(Id) ORDER BY PartitionNo;
| شاخص | خروجی نمونه |
|---|
| پارتیشن حذفشده | 1 |
| ردیفهای دیگر | باقی میمانند |
تحلیل مثال 4 برای TRUNCATE TABLE ... WITH (PARTITIONS(...)): این سناریو نشان میدهد Minimal Logging باید همراه کنترل کاتالوگ و مقدارهای مرزی بررسی شود. کاربرد واقعی آن در پاکسازی بازههای مشخص با لاگ کمتر از DELETE است.
مثال 5: ترکیب با قابلیت مکمل SQL Server در TRUNCATE TABLE ... WITH (PARTITIONS(...))
در مثال شماره 5، سناریوی «ترکیب با قابلیت مکمل SQL Server» برای TRUNCATE TABLE ... WITH (PARTITIONS(...)) اجرا میشود. هدف این است که رفتار Minimal Logging در یک نمونه قابل بازتولید دیده شود و نتیجه بدون نیاز به اجرای ذهنی قابل فهم باشد.
CREATE PARTITION FUNCTION pf_Truncate_05 (int) AS RANGE RIGHT FOR VALUES (500,600,700);
CREATE PARTITION SCHEME ps_Truncate_05 AS PARTITION pf_Truncate_05 ALL TO ([PRIMARY]);
CREATE TABLE dbo.Truncate_05 (Id int NOT NULL, Note nvarchar(40) NULL) ON ps_Truncate_05(Id);
INSERT INTO dbo.Truncate_05 VALUES (490,N'P1'),(510,N'P2'),(610,N'P3'),(710,N'P4');
TRUNCATE TABLE dbo.Truncate_05 WITH (PARTITIONS (2));
SELECT $PARTITION.pf_Truncate_05(Id) AS PartitionNo, COUNT(*) AS RowCount
FROM dbo.Truncate_05 GROUP BY $PARTITION.pf_Truncate_05(Id) ORDER BY PartitionNo;
| شاخص | خروجی نمونه |
|---|
| پارتیشن حذفشده | 2 |
| ردیفهای دیگر | باقی میمانند |
تحلیل مثال 5 برای TRUNCATE TABLE ... WITH (PARTITIONS(...)): این سناریو نشان میدهد Fast Cleanup باید همراه کنترل کاتالوگ و مقدارهای مرزی بررسی شود. کاربرد واقعی آن در پاکسازی بازههای مشخص با لاگ کمتر از DELETE است.
تصویر دوم جریان ورودی تا خروجی TRUNCATE TABLE ... WITH (PARTITIONS(...)) را با تمرکز بر Partition Range، Minimal Logging و اعتبارسنجی نتیجه نمایش میدهد.
مثال 6: بررسی رفتار NULL یا داده مرزی در TRUNCATE TABLE ... WITH (PARTITIONS(...))
در مثال شماره 6، سناریوی «بررسی رفتار NULL یا داده مرزی» برای TRUNCATE TABLE ... WITH (PARTITIONS(...)) اجرا میشود. هدف این است که رفتار Fast Cleanup در یک نمونه قابل بازتولید دیده شود و نتیجه بدون نیاز به اجرای ذهنی قابل فهم باشد.
CREATE PARTITION FUNCTION pf_Truncate_06 (int) AS RANGE RIGHT FOR VALUES (600,700,800);
CREATE PARTITION SCHEME ps_Truncate_06 AS PARTITION pf_Truncate_06 ALL TO ([PRIMARY]);
CREATE TABLE dbo.Truncate_06 (Id int NOT NULL, Note nvarchar(40) NULL) ON ps_Truncate_06(Id);
INSERT INTO dbo.Truncate_06 VALUES (590,N'P1'),(610,N'P2'),(710,N'P3'),(810,N'P4');
TRUNCATE TABLE dbo.Truncate_06 WITH (PARTITIONS (3));
SELECT $PARTITION.pf_Truncate_06(Id) AS PartitionNo, COUNT(*) AS RowCount
FROM dbo.Truncate_06 GROUP BY $PARTITION.pf_Truncate_06(Id) ORDER BY PartitionNo;
| شاخص | خروجی نمونه |
|---|
| پارتیشن حذفشده | 3 |
| ردیفهای دیگر | باقی میمانند |
تحلیل مثال 6 برای TRUNCATE TABLE ... WITH (PARTITIONS(...)): این سناریو نشان میدهد Safety Guard باید همراه کنترل کاتالوگ و مقدارهای مرزی بررسی شود. کاربرد واقعی آن در پاکسازی بازههای مشخص با لاگ کمتر از DELETE است.
مثال 7: ثبت خطای رایج و نسخه اصلاحشده در TRUNCATE TABLE ... WITH (PARTITIONS(...))
در مثال شماره 7، سناریوی «ثبت خطای رایج و نسخه اصلاحشده» برای TRUNCATE TABLE ... WITH (PARTITIONS(...)) اجرا میشود. هدف این است که رفتار Safety Guard در یک نمونه قابل بازتولید دیده شود و نتیجه بدون نیاز به اجرای ذهنی قابل فهم باشد.
CREATE PARTITION FUNCTION pf_Truncate_07 (int) AS RANGE RIGHT FOR VALUES (700,800,900);
CREATE PARTITION SCHEME ps_Truncate_07 AS PARTITION pf_Truncate_07 ALL TO ([PRIMARY]);
CREATE TABLE dbo.Truncate_07 (Id int NOT NULL, Note nvarchar(40) NULL) ON ps_Truncate_07(Id);
INSERT INTO dbo.Truncate_07 VALUES (690,N'P1'),(710,N'P2'),(810,N'P3'),(910,N'P4');
TRUNCATE TABLE dbo.Truncate_07 WITH (PARTITIONS (4));
SELECT $PARTITION.pf_Truncate_07(Id) AS PartitionNo, COUNT(*) AS RowCount
FROM dbo.Truncate_07 GROUP BY $PARTITION.pf_Truncate_07(Id) ORDER BY PartitionNo;
| شاخص | خروجی نمونه |
|---|
| پارتیشن حذفشده | 4 |
| ردیفهای دیگر | باقی میمانند |
تحلیل مثال 7 برای TRUNCATE TABLE ... WITH (PARTITIONS(...)): این سناریو نشان میدهد Partition List باید همراه کنترل کاتالوگ و مقدارهای مرزی بررسی شود. کاربرد واقعی آن در پاکسازی بازههای مشخص با لاگ کمتر از DELETE است.
مثال 8: سناریوی سازمانی دورهای در TRUNCATE TABLE ... WITH (PARTITIONS(...))
در مثال شماره 8، سناریوی «سناریوی سازمانی دورهای» برای TRUNCATE TABLE ... WITH (PARTITIONS(...)) اجرا میشود. هدف این است که رفتار Partition List در یک نمونه قابل بازتولید دیده شود و نتیجه بدون نیاز به اجرای ذهنی قابل فهم باشد.
CREATE PARTITION FUNCTION pf_Truncate_08 (int) AS RANGE RIGHT FOR VALUES (800,900,1000);
CREATE PARTITION SCHEME ps_Truncate_08 AS PARTITION pf_Truncate_08 ALL TO ([PRIMARY]);
CREATE TABLE dbo.Truncate_08 (Id int NOT NULL, Note nvarchar(40) NULL) ON ps_Truncate_08(Id);
INSERT INTO dbo.Truncate_08 VALUES (790,N'P1'),(810,N'P2'),(910,N'P3'),(1010,N'P4');
TRUNCATE TABLE dbo.Truncate_08 WITH (PARTITIONS (1));
SELECT $PARTITION.pf_Truncate_08(Id) AS PartitionNo, COUNT(*) AS RowCount
FROM dbo.Truncate_08 GROUP BY $PARTITION.pf_Truncate_08(Id) ORDER BY PartitionNo;
| شاخص | خروجی نمونه |
|---|
| پارتیشن حذفشده | 1 |
| ردیفهای دیگر | باقی میمانند |
تحلیل مثال 8 برای TRUNCATE TABLE ... WITH (PARTITIONS(...)): این سناریو نشان میدهد Partition Range باید همراه کنترل کاتالوگ و مقدارهای مرزی بررسی شود. کاربرد واقعی آن در پاکسازی بازههای مشخص با لاگ کمتر از DELETE است.
مثال 9: اجرای تراکنشی و امکان Rollback در TRUNCATE TABLE ... WITH (PARTITIONS(...))
در مثال شماره 9، سناریوی «اجرای تراکنشی و امکان Rollback» برای TRUNCATE TABLE ... WITH (PARTITIONS(...)) اجرا میشود. هدف این است که رفتار Partition Range در یک نمونه قابل بازتولید دیده شود و نتیجه بدون نیاز به اجرای ذهنی قابل فهم باشد.
CREATE PARTITION FUNCTION pf_Truncate_09 (int) AS RANGE RIGHT FOR VALUES (900,1000,1100);
CREATE PARTITION SCHEME ps_Truncate_09 AS PARTITION pf_Truncate_09 ALL TO ([PRIMARY]);
CREATE TABLE dbo.Truncate_09 (Id int NOT NULL, Note nvarchar(40) NULL) ON ps_Truncate_09(Id);
INSERT INTO dbo.Truncate_09 VALUES (890,N'P1'),(910,N'P2'),(1010,N'P3'),(1110,N'P4');
TRUNCATE TABLE dbo.Truncate_09 WITH (PARTITIONS (2));
SELECT $PARTITION.pf_Truncate_09(Id) AS PartitionNo, COUNT(*) AS RowCount
FROM dbo.Truncate_09 GROUP BY $PARTITION.pf_Truncate_09(Id) ORDER BY PartitionNo;
| شاخص | خروجی نمونه |
|---|
| پارتیشن حذفشده | 2 |
| ردیفهای دیگر | باقی میمانند |
تحلیل مثال 9 برای TRUNCATE TABLE ... WITH (PARTITIONS(...)): این سناریو نشان میدهد Page Deallocation باید همراه کنترل کاتالوگ و مقدارهای مرزی بررسی شود. کاربرد واقعی آن در پاکسازی بازههای مشخص با لاگ کمتر از DELETE است.
مثال 10: ممیزی Performance و متادیتا در TRUNCATE TABLE ... WITH (PARTITIONS(...))
در مثال شماره 10، سناریوی «ممیزی Performance و متادیتا» برای TRUNCATE TABLE ... WITH (PARTITIONS(...)) اجرا میشود. هدف این است که رفتار Page Deallocation در یک نمونه قابل بازتولید دیده شود و نتیجه بدون نیاز به اجرای ذهنی قابل فهم باشد.
CREATE PARTITION FUNCTION pf_Truncate_10 (int) AS RANGE RIGHT FOR VALUES (1000,1100,1200);
CREATE PARTITION SCHEME ps_Truncate_10 AS PARTITION pf_Truncate_10 ALL TO ([PRIMARY]);
CREATE TABLE dbo.Truncate_10 (Id int NOT NULL, Note nvarchar(40) NULL) ON ps_Truncate_10(Id);
INSERT INTO dbo.Truncate_10 VALUES (990,N'P1'),(1010,N'P2'),(1110,N'P3'),(1210,N'P4');
TRUNCATE TABLE dbo.Truncate_10 WITH (PARTITIONS (3));
SELECT $PARTITION.pf_Truncate_10(Id) AS PartitionNo, COUNT(*) AS RowCount
FROM dbo.Truncate_10 GROUP BY $PARTITION.pf_Truncate_10(Id) ORDER BY PartitionNo;
| شاخص | خروجی نمونه |
|---|
| پارتیشن حذفشده | 3 |
| ردیفهای دیگر | باقی میمانند |
تحلیل مثال 10 برای TRUNCATE TABLE ... WITH (PARTITIONS(...)): این سناریو نشان میدهد Aligned Index باید همراه کنترل کاتالوگ و مقدارهای مرزی بررسی شود. کاربرد واقعی آن در پاکسازی بازههای مشخص با لاگ کمتر از DELETE است.