การแบ่งพาร์ติชัน SQL Server 2008 R2 - FileGroup เดียวกัน, 1 ไฟล์, 2 partition_numbers - ช่วยเหลือ


10

เป็นครั้งแรกที่ฉันแบ่งพาร์ติชันใน SQL Server ฉันเรียนรู้จากคู่มือ Brent Ozar ซึ่งยอดเยี่ยม :)

สองสามครั้งที่ฉันได้พบกับสถานการณ์แปลก ๆ เมื่อฉันวิ่ง:

SELECT *
FROM ph.FileGroupDetail
ORDER BY partition_number
Go

มีกลุ่มไฟล์เดียวกันแสดงสองครั้งโดยมี 2 partition_numbers ที่แตกต่างกัน 1 อย่างถูกต้องในตอนท้ายด้วยค่าช่วงอื่น ๆ ที่เริ่มต้นด้วย null range_value

คลิกที่นี่เพื่อดูภาพขยาย

ป้อนคำอธิบายรูปภาพที่นี่

คำถามสองข้อ:

  1. สิ่งนี้เกิดขึ้นได้อย่างไรฉันไปผิดที่ไหน

  2. ฉันจะแก้ไขปัญหานี้ได้อย่างไรซึ่งหมายถึงวิธีกำจัดอย่างใดอย่างหนึ่งในตอนเริ่มต้นเนื่องจากฉันมีพาร์ติชันว่างเปล่าที่จุดเริ่มต้น

ฉันพยายามลบไฟล์ (ทำงานเมื่อมันว่างเปล่า) และ filegroup แต่ filegroup บอกว่าไม่สามารถลบได้

มีใครช่วยอธิบายได้ว่าเรื่องนี้เกิดขึ้นได้อย่างไรและจะกำจัดรายการพาร์ติชั่น 2 ได้อย่างไร?


3
Steve คุณสามารถโพสต์ชุดรูปแบบพาร์ติชั่นและฟังก์ชั่นของคุณได้หรือไม่?
PseudoToad

@steve - มีประโยชน์สำหรับคุณที่จะโพสต์รูปแบบพาร์ทิชันและฟังก์ชั่นตามที่ Gizmo ร้องขอ
Thronk

1
คุณสามารถแสดง partition_id จาก sys.partitions ได้หรือไม่?
user_0

คำตอบ:


3

ผลลัพธ์บ่งชี้ถึงขอบเขตของพาร์ติชัน NULL ที่ชัดเจน ณ จุดหนึ่งเมื่อฟังก์ชันNEXT USEDfilegroup ถูกตั้งค่าเป็น DailyAlbertFG30 นอกจากนี้ฉันไม่เห็น DailyAlbertFG2 ใช้ อาจมีครั้งหนึ่งเคยเป็นพาร์ติชันในกลุ่มไฟล์นั้นที่ถูกรวมเข้าด้วยกันในภายหลัง

ด้านล่างเป็นสคริปต์ที่แสดงวิธีการสร้างพาร์ติชัน FG30 ที่มีขอบเขต NULL อาจมีการเพิ่มขอบเขต NULL โดยไม่ได้ตั้งใจ

CREATE PARTITION FUNCTION DailyAlbertPF1 (datetime2(3)) AS RANGE RIGHT FOR VALUES();
GO
CREATE PARTITION SCHEME DailyAlbertPS1 AS PARTITION DailyAlbertPF1 ALL TO ([DailyAlbertFG1]);
GO
CREATE TABLE dbo.FactAgentAlbertPortalSessionEntries
    (
      DateTimeColumn datetime2(3)
    )
ON  DailyAlbertPS1(DateTimeColumn);
GO

DECLARE @FileGroupNumber int = 1;
DECLARE @DateTimeBoundary datetime2(3) = '2015-04-15T00:00:00.000';
DECLARE @SQL nvarchar(MAX);
WHILE @DateTimeBoundary <= '2015-05-14T00:00:00.000'
BEGIN
    SET @SQL = N'ALTER PARTITION SCHEME DailyAlbertPS1 NEXT USED DailyAlbertFG' + CAST(@FileGroupNumber AS nvarchar(5)) + N';';
    EXEC(@SQL);
    ALTER PARTITION FUNCTION DailyAlbertPF1() SPLIT RANGE(@DateTimeBoundary);
    SET @DateTimeBoundary = DATEADD(day, 1, @DateTimeBoundary);
    SET @FileGroupNumber += 1;
END;
--add NULL boundary on DailyAlbertFG30
SET @DateTimeBoundary = NULL;
ALTER PARTITION SCHEME DailyAlbertPS1 NEXT USED DailyAlbertFG30;
ALTER PARTITION FUNCTION DailyAlbertPF1() SPLIT RANGE(@DateTimeBoundary);
GO

0
  1. ฉันไม่รู้ นี่ไม่ใช่กรณีที่ผิดปกติต่อ se คุณสามารถกำหนดพาร์ติชันให้กับกลุ่มไฟล์ได้อย่างอิสระ ไม่จำเป็นต้องเป็น 1: 1 บางทีคุณอาจสร้าง FG ผิดขึ้นมาใหม่โดยไม่ตั้งใจหรือคุณมีการกำหนดค่าที่ไม่ดีในช่วงเวลาสั้น ๆ ความผิดปกตินี้ไม่มีอะไรต้องกังวลแต่แน่นอนคุณสามารถทำความสะอาดได้
  2. คุณสามารถกำจัดหนึ่งในพาร์ทิชันที่ว่างเปล่าโดยการรวมหนึ่งในพาร์ทิชันอื่น มีคำแนะนำที่ดีในเว็บเกี่ยวกับวิธีการทำเช่นนี้ นี่เป็นเรื่องง่ายที่จะทำและทันทีในกรณีนี้ คุณสามารถย้ายพาร์ติชั่นไปยัง FG ที่ต้องการได้โดยสร้างใหม่ การสร้างพาร์ติชันที่ว่างเปล่าขึ้นมาใหม่เป็นเรื่องด่วน

เมื่อคุณล้างข้อมูลเรียบร้อยแล้วและคุณพบ FGs ว่างคุณสามารถดร็อปได้เช่นกัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.