Phân vùng SQL Server 2008 R2 - cùng Filegroup, 1 tệp, 2 phân vùng tên - GIÚP


10

Đây là lần đầu tiên tôi phân vùng trong SQL Server, tôi đã học được từ hướng dẫn Brent Ozar thật tuyệt vời :)

Một vài lần tôi đã gặp phải một kịch bản kỳ lạ; khi tôi chạy

SELECT *
FROM ph.FileGroupDetail
ORDER BY partition_number
Go

Có cùng một filegroup hiển thị hai lần với 2 phân vùng khác nhau, 1 chính xác ở cuối với một giá trị phạm vi, cái còn lại ở đầu với một phạm vi null_value.

bấm vào đây để phóng to hình ảnh

nhập mô tả hình ảnh ở đây

Vài câu hỏi:

  1. Làm thế nào điều này xảy ra, tôi đã đi sai ở đâu?

  2. Làm thế nào để tôi giải quyết vấn đề, điều đó có nghĩa là làm thế nào để thoát khỏi vấn đề khi bắt đầu vì tôi đã có một phân vùng trống lúc ban đầu.

Tôi đã thử xóa tệp (hoạt động khi nó trống) và filegroup, nhưng filegroup cho biết không thể xóa được.

Ai đó có thể giải thích làm thế nào điều này đã xảy ra và làm thế nào để thoát khỏi mục 2 phân vùng?


3
Steve, bạn có thể đăng sơ đồ phân vùng và chức năng của bạn?
PseudoToad

@steve - thực sự sẽ hữu ích cho bạn để đăng sơ đồ phân vùng và chức năng như Gizmo yêu cầu.
Thronk

1
Bạn có thể hiển thị phân vùng cũng từ sys.partitions không?
user_0 6/11/2015

Câu trả lời:


3

Các kết quả chỉ ra tại một thời điểm nào đó một ranh giới phân vùng NULL rõ ràng đã được thêm vào hàm khi NEXT USEDfilegroup lược đồ phân vùng được đặt thành DailyAlbertFG30. Ngoài ra, tôi không thấy DailyAlbertFG2 được sử dụng. Có lẽ đã từng có một phân vùng trên tập đoàn đó sau đó được sáp nhập.

Dưới đây là một tập lệnh cho thấy cách phân vùng FG30 với ranh giới NULL có thể được tạo. Ranh giới NULL có thể đã được thêm vào một cách tình cờ.

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. Tôi không biết. Đây không phải là một trường hợp bất thường. Bạn có thể tự do gán các phân vùng cho các nhóm. Nó không phải là 1: 1. Có thể bạn vô tình xây dựng lại FG sai hoặc bạn có cấu hình không tốt trong một khoảng thời gian ngắn. Sự bất thường này không có gì đáng lo ngại , nhưng tất nhiên bạn có thể làm sạch nó.
  2. Bạn có thể thoát khỏi một trong các phân vùng trống bằng cách hợp nhất một trong số chúng với nhau. Có những hướng dẫn tuyệt vời trên web về cách làm điều này. Điều này là dễ dàng để làm và ngay lập tức trong trường hợp này. Bạn cũng có thể di chuyển các phân vùng đến một FG mong muốn bằng cách xây dựng lại chúng. Xây dựng lại các phân vùng trống là ngay lập tức.

Khi bạn hoàn thành việc dọn dẹp và bạn tìm thấy FG trống, bạn cũng có thể thả chúng xuống.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.