Các mẫu để thiết lập shending cho SQL Server 2008 R2, để xử lý các bộ dữ liệu lớn?


14

Tôi muốn xử lý một tập dữ liệu lớn (> 1 tỷ hàng) trong SQL Server 2008 R2. Tôi nghe nói rằng nếu bạn thiết lập "shending" hoặc "phân vùng ngang", việc xử lý các bộ dữ liệu lớn sẽ nhanh hơn khi chia các bảng thành nhiều tệp.

Bạn đã sử dụng phân vùng hoặc phân vùng ngang trước đây? Nếu vậy, bạn có thể đề xuất bất kỳ mẫu nào, theo kinh nghiệm của bạn, đạt được kết quả tốt hơn so với một bảng lớn không?

Câu trả lời:


23

Đầu tiên, lưu ý rằng 1 tỷ hàng có thể được xử lý hiệu quả với kiến ​​trúc được phân vùng trên phần cứng máy chủ hàng hóa thông thường. Exotic chia sẻ không có kiến ​​trúc nào sẽ không cần thiết cho khối lượng dữ liệu này, tuy nhiên, bạn có thể sẽ nhận được lợi ích đáng kể từ phân vùng bảng.

Shending là một cái gì đó khác với phân vùng ngang và ngụ ý kiến ​​trúc 'không chia sẻ gì', không được hỗ trợ bởi hầu hết các phiên bản của SQL Server 1

SQL Server có thể hỗ trợ phân vùng ngang và kiến ​​trúc đĩa được chia sẻ sẽ đủ cho ~ 1 hàng billon.

Trong SQL Server, bạn tạo một hàm phân vùng, chọn một phân vùng dựa trên các giá trị hoặc phạm vi giá trị trong một cột trên bảng, ví dụ:

create partition function F_AccPrdPart (int)
    as range left for values (
    180001                         -- Dummy value
   ,199012 ,199112 ,199212 ,199312, 199412 ,199512
   ,199612 ,199712 ,199812 ,199912 ,200012 ,200112
   ,200212 ,200312 ,200412 ,200512 ,200612 ,200712
   ,200812
   ,200901, 200902, 200903, 200904, 200905, 200906
   ,200907, 200908, 200909, 200910, 200911, 200912
   ,201001, 201002, 201003, 201004, 201005, 201006
   ,201007, 201008, 201009, 201010, 201011, 201012
   ,201101, 201102, 201103, 201104, 201105, 201106
   ,201107, 201108, 201109, 201110, 201111, 201112
   ,202012
   ,939999                         -- Dummy value
)
go

Sau đó tạo một hoặc nhiều nhóm fileg để phân bổ các phân vùng. Đối với tập dữ liệu lớn, các nhóm tệp này có thể được thiết lập trên các khối vật lý khác nhau. Lưu ý rằng lưu trữ đính kèm trực tiếp sẽ nhanh hơn nhiều so với SAN cho điều này trong hầu hết các trường hợp. Trong ví dụ dưới đây, chúng tôi đã tạo ra 6 nhóm fileg gọi là PartVol1-PartVol6.

Một hoặc nhiều lược đồ phân vùng có thể được tạo để phân bổ các phân vùng bảng cho các nhóm tệp dựa trên giá trị của hàm phân vùng, ví dụ:

create partition S_AccPrdPart as partition F_AccPrdPart
    TO ([PRIMARY]
      ,[PartVol1], [PartVol2], [PartVol3], [PartVol4], [PartVol5], [PartVol6] 
      ,[PartVol1], [PartVol2], [PartVol3], [PartVol4], [PartVol5], [PartVol6]
      ,[PartVol1], [PartVol2], [PartVol3], [PartVol4], [PartVol5], [PartVol6]
      ,[PartVol1]
      ,[PartVol2], [PartVol3], [PartVol4], [PartVol5], [PartVol6], [PartVol1]
      ,[PartVol2], [PartVol3], [PartVol4], [PartVol5], [PartVol6], [PartVol1]
      ,[PartVol2], [PartVol3], [PartVol4], [PartVol5], [PartVol6], [PartVol1]
      ,[PartVol2], [PartVol3], [PartVol4], [PartVol5], [PartVol6], [PartVol1]
      ,[PartVol2], [PartVol3], [PartVol4], [PartVol5], [PartVol6], [PartVol1]
      ,[PartVol2], [PartVol3], [PartVol4], [PartVol5], [PartVol6], [PartVol1]
      ,[PartVol2]
      ,[PRIMARY]
      ,[PRIMARY])
go

Đề án này được thiết kế để phân vùng trên một kỳ kế toán. Ngày cũng thường được sử dụng cho việc này, mặc dù có thể sử dụng bất kỳ khóa nào.

Bạn có thể tạo một bảng trên sơ đồ phân vùng như thể đó là một nhóm fileg, vd

Create table FooTrans (
       FooTransID        int identity (1,1) not null
      ,AccPeriod         int not null
      ,[...]
) on S_AccPrdPart (AccPeriod)
go

Lưu ý rằng bảng được tạo trên lược đồ phân vùng thay vì nhóm tệp được chỉ định và mệnh đề chỉ định cột được sử dụng làm khóa phân vùng. Dựa trên khóa phân vùng, các hàng trong bảng sẽ được phân bổ cho một trong các nhóm tệp trong sơ đồ phân vùng.

Lưu ý: Một nguyên tắc nhỏ khi thiết kế sơ đồ phân vùng là mỗi phân vùng nên có số lượng hàng trong 10 triệu thấp, khoảng từ 10 đến 50 triệu tùy thuộc vào độ rộng của các hàng. Ổ đĩa mà phân vùng nằm trên phải đủ nhanh để quét ít nhất một phân vùng trong vài giây.

Hệ thống phân vùng, bảo vệ và chia sẻ

Một chút thuật ngữ dường như để phân biệt một số cuộc thảo luận về chủ đề này.

  • Hệ thống 'không chia sẻ gì' là một hệ thống song song trong đó các nút không chia sẻ lưu trữ SAN, nhưng sử dụng lưu trữ cục bộ cho nút. Ví dụ kinh điển của loại kiến ​​trúc này là Teradata. Các hệ thống không chia sẻ có quy mô tốt đến các tập dữ liệu rất lớn vì chúng không có nút cổ chai I / O trung tâm. Thang đo thông lượng I / O với số lượng nút trong hệ thống.

  • Hệ thống 'đĩa chia sẻ' là một trong đó một hoặc nhiều máy chủ cơ sở dữ liệu chia sẻ một hệ thống con lưu trữ đĩa đơn. Cơ sở dữ liệu có thể là một máy chủ duy nhất có bộ nhớ cục bộ hoặc được gắn vào SAN hoặc cụm máy chủ được gắn vào SAN được chia sẻ. Các hệ thống loại này bị hạn chế bởi thông lượng có sẵn từ hệ thống con lưu trữ.

  • 'Shending' là một thuật ngữ được sử dụng để mô tả việc phân tách cơ sở dữ liệu giữa nhiều máy chủ vật lý trong một kiến ​​trúc không có gì được chia sẻ. Các nền tảng khác nhau sẽ có sự hỗ trợ lớn hơn hoặc ít hơn cho các cơ sở dữ liệu bị phân mảnh. Trong vòng tròn Teradata, thuật ngữ này không được sử dụng vì Teradata trình bày một hình ảnh hệ thống đơn trong suốt cho các máy khách, mặc dù kiến ​​trúc vật lý là loại không chia sẻ.

    Các phiên bản cũ hơn của SQL Server có hỗ trợ hạn chế để bảo vệ thông qua các chế độ xem được phân vùng. Microsoft hiện tạo một phiên bản SQL Server 2008 R2 hỗ trợ kiến ​​trúc không chia sẻ với một hình ảnh hệ thống duy nhất, nhưng phiên bản này chỉ có sẵn cho các OEM và chỉ có thể được mua trong gói phần cứng.

Cho 1 tỷ hàng

Đối với 1 tỷ hàng (trừ khi các hàng riêng lẻ cực kỳ rộng), kiến ​​trúc không có gì hoặc được chia sẻ thoải mái trong các lĩnh vực quá mức cần thiết. Loại âm lượng này có thể được xử lý trên một máy chủ có thông số kỹ thuật hợp lý nếu nó có hệ thống con đĩa đủ nhanh.

Đĩa đính kèm trực tiếp cục bộ cho đến nay là hiệu quả nhất về chi phí cho hiệu suất. Một bộ điều khiển RAID SAS đơn có thể mất một số mảng và nhiều bộ điều khiển có thể được cài đặt trong một máy chủ. Tùy thuộc vào cấu hình, một mảng SAS 24-25 khe hiện đại có thể vượt qua hàng ngàn IOPS hoặc 1GB + / giây trong hiệu suất phát trực tuyến; một máy chủ có nhiều bus PCI-e và nhiều bộ điều khiển về mặt lý thuyết có thể xử lý nhiều hơn.

Loại phân hiệu năng để làm việc với cơ sở dữ liệu 1 tỷ hàng có thể đạt được khá dễ dàng và rẻ với phần cứng máy chủ hàng hóa và lưu trữ đính kèm trực tiếp của loại này. Một SAN cũng có thể được sử dụng, nhưng bạn có thể cần nhiều bộ điều khiển SAN để có hiệu năng tương đương và phần cứng có thể sẽ đắt hơn.

Theo khuyến nghị chung, hãy sử dụng bộ lưu trữ đính kèm trực tiếp cho các ứng dụng có yêu cầu I / O nặng trừ khi bạn cần thời gian hoạt động thực sự tốt. Lỗi kiểm soát cấu hình và thay đổi là một nguồn thời gian chết đột xuất lớn hơn nhiều so với lỗi phần cứng trong các trung tâm dữ liệu hiện đại.

SAN có thể cung cấp cho bạn một nền tảng lưu trữ dễ quản lý hơn nếu bạn có một danh mục lớn các ứng dụng vì chúng cung cấp cho bạn một loạt các cơ sở quản lý lưu trữ tập trung. Tuy nhiên, điều này có giá rất cao và việc có được hiệu suất cao từ cơ sở hạ tầng dựa trên SAN là khó khăn và tốn kém.

1 Microsoft tạo phiên bản song song của SQL Server, nhưng nó chỉ khả dụng thông qua các kênh OEM đi kèm với phần cứng. Các phiên bản có sẵn ngoài kệ không hỗ trợ khả năng này.


3
Wow - câu trả lời tuyệt vời, tôi nghĩ đó là tất cả những gợi ý tôi cần để dự án này hoạt động tốt.
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.