SQL Server 2008 R2 Bölümleme - aynı FileGroup, 1 Dosya, 2 partition_numbers - HELP


10

Bu benim SQL Server'da bölümleme ilk gitmek, fantastik Brent Ozar kılavuzundan öğrendim :)

Birkaç kez garip bir senaryoya girdim; koştuğumda:

SELECT *
FROM ph.FileGroupDetail
ORDER BY partition_number
Go

Aynı dosya grubu 2 farklı bölüm_sayısı ile iki kez, bir adet aralık değeri ile doğru, diğeri başlangıçta null bir aralık_değeri ile gösterilir.

resmi büyütmek için tıklayın

resim açıklamasını buraya girin

Birkaç soru:

  1. Bu nasıl oluyor, nerede yanlış yaptım?

  2. Sorunu nasıl çözebilirim, bu başlangıçta boş bir bölümüm olduğu için başlangıçtaki sorundan nasıl kurtulacağımız anlamına gelir.

Dosyayı (boşken çalıştı) ve dosya grubunu silmeyi denedim, ancak dosya grubu silinemediğini söyledi.

Birisi bunun nasıl olduğunu ve 2. bölüm girişinden nasıl kurtulacağını lütfen açıklayabilir mi?


3
Steve, bölüm şemanızı ve işlevinizi gönderebilir misiniz?
PseudoToad

@steve - bu bölüm şemasını yayınlamanız ve Gizmo'nun istediği gibi çalışmanız gerçekten yararlı olacaktır.
15:00, Thronk

1
Sys.partitions'dan partition_id öğesini de açığa çıkarabilir misiniz?
user_0

Yanıtlar:


3

Sonuçlar, bir noktada, bölüm şeması NEXT USEDdosya grubu DailyAlbertFG30 olarak ayarlandığında işleve açık bir NULL bölüm sınırının eklendiğini gösterir . Ayrıca, DailyAlbertFG2'nin kullanıldığını görmüyorum. Belki bir zamanlar bu dosya grubunda daha sonra birleştirilen bir bölüm vardı.

Aşağıda, NULL sınırına sahip bir FG30 bölümünün nasıl oluşturulabileceğini gösteren bir komut dosyası bulunmaktadır. NULL sınırı yanlışlıkla eklenmiş olabilir.

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. Bilmiyorum. Bu alışılmadık bir durum değildir. Dosya gruplarına bölümleri serbestçe atayabilirsiniz. 1: 1 olmak zorunda değil. Yanlışlıkla yanlış FG'ye yeniden inşa ettiniz veya kısa bir süre için kötü bir yapılandırmanız oldu. Bu düzensizlik endişelenecek bir şey değildir , ancak elbette temizleyebilirsiniz.
  2. Boş bölümlerden birini, birini diğeriyle birleştirerek kurtulabilirsiniz. Web'de bunun nasıl yapılacağı konusunda harika kılavuzlar var. Bu durumda bu kolay ve anında yapılır. Ayrıca bölümleri yeniden oluşturarak istediğiniz bir FG'ye taşıyabilirsiniz. Boş bölümleri yeniden oluşturmak anında gerçekleşir.

Temizlik bittiğinde ve boş FG'ler bulduğunuzda onları da bırakabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.