SQL Server 2008 R2 Partisi - FileGroup yang sama, 1 File, 2 partisi_number - BANTUAN

10

Ini pertama kali saya pergi ke partisi di SQL Server, saya belajar dari panduan Brent Ozar yang luar biasa :)

Beberapa kali saya mengalami skenario yang aneh; ketika saya menjalankan:

SELECT *
FROM ph.FileGroupDetail
ORDER BY partition_number
Go

Ada filegroup yang sama menunjukkan dua kali dengan 2 partisi_number yang berbeda, 1 dengan benar di akhir dengan nilai rentang, yang lain di awal dengan nilai null range_value.

klik di sini untuk memperbesar gambar

masukkan deskripsi gambar di sini

Beberapa pertanyaan:

  1. Bagaimana ini terjadi, di mana saya salah?

  2. Bagaimana cara mengatasi masalah ini, itu berarti bagaimana menyingkirkan yang di awal karena saya sudah memiliki partisi kosong di awal.

Saya sudah mencoba menghapus file (berfungsi ketika kosong) dan filegroup, tetapi filegroup mengatakan itu tidak dapat dihapus.

Dapatkah seseorang menjelaskan tolong bagaimana ini terjadi dan bagaimana cara menyingkirkan entri partisi 2?

Steve
sumber
3
Steve, dapatkah Anda memposting skema dan fungsi partisi Anda?
PseudoToad
@steve - benar-benar akan berguna bagi Anda untuk memposting skema dan fungsi partisi seperti yang diminta Gizmo.
Thronk
1
Bisakah Anda mengekspos juga partisi_id dari sys.partitions?
user_0

Jawaban:

3

Hasilnya menunjukkan pada beberapa titik batas partisi NULL eksplisit ditambahkan ke fungsi ketika NEXT USEDfilegroup skema partisi diatur ke DailyAlbertFG30. Juga, saya tidak melihat DailyAlbertFG2 digunakan. Mungkin pernah ada partisi di filegroup yang kemudian digabung.

Di bawah ini adalah skrip yang menunjukkan bagaimana partisi FG30 dengan batas NULL dapat dibuat. Batas NULL mungkin ditambahkan secara tidak sengaja.

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
Dan Guzman
sumber
0
  1. Saya tidak tahu Ini bukan kasus yang tidak biasa. Anda dapat dengan bebas menetapkan partisi ke filegroup. Tidak harus 1: 1. Mungkin Anda tidak sengaja membangun kembali ke FG yang salah, atau Anda memiliki konfigurasi yang buruk untuk waktu yang singkat. Ketidakteraturan ini tidak perlu dikhawatirkan , tetapi tentu saja Anda dapat membersihkannya.
  2. Anda dapat menyingkirkan salah satu partisi kosong dengan menggabungkan salah satunya menjadi yang lain. Ada panduan hebat di web tentang cara melakukan ini. Ini mudah dilakukan dan instan dalam hal ini. Anda juga dapat memindahkan partisi ke FG yang diinginkan dengan membangunnya kembali. Membangun kembali partisi kosong adalah instan.

Setelah selesai membersihkan dan menemukan FG kosong, Anda juga dapat menjatuhkannya.

usr
sumber