Cập nhật Kích thước nhân rộng lớn (SQL Server PDW)


8

Chúng tôi sử dụng thiết bị SQL Server PDW cho kho dữ liệu của mình. Một trong những bảng trong kho của chúng tôi là một bảng được nhân rộng với khoảng 20 triệu hàng. Là một phần của quy trình ETL, chúng tôi cần hết hạn các hồ sơ cũ từ chiều này; tuy nhiên, chúng tôi đang thấy rằng việc cập nhật một số ít hồ sơ (<100) mất hơn 1 giờ để hoàn thành. Đây là những gì tôi muốn cải thiện nếu tôi có thể.

Đương nhiên, một tùy chọn mà tôi nghĩ đến là thay đổi Thứ nguyên này từ Được sao chép thành Phân phối. Thử nghiệm của tôi cho thấy rằng nó sẽ khắc phục sự cố với quy trình ETL mất nhiều thời gian (từ 1,5 giờ xuống còn 30 giây) nhưng tất cả các liên kết với phiên bản Phân tán của kích thước này sẽ bị ảnh hưởng do các liên kết gần như không bao giờ dựa trên cùng một phân phối cột. Khi tôi nhìn vào kế hoạch thực hiện của một số các truy vấn này, tôi thường thấy một hoạt động ShuffleMove hoặc BroadcastMove .

Vì vậy, câu hỏi của tôi cho guru PDW ở đây là:

Có điều gì khác có thể được thực hiện để cải thiện hiệu suất cập nhật hồ sơ trong phiên bản sao chép của Thứ nguyên này không?

Một lần nữa, chuyển sang bảng Phân phối dường như không phải là giải pháp tốt nhất vì nó sẽ ảnh hưởng đến hàng trăm truy vấn và báo cáo SQL đã được viết bởi người khác.


1
Tôi chưa thấy nhiều câu hỏi PDW ở đây, nếu bạn không nhận được câu trả lời, hãy thử diễn đàn MSDN SQL Server. Có phản ứng nhanh là tốt. Chúc may mắn.
Ali Razeghi

Câu trả lời:


5

Một số câu hỏi. 20 triệu hàng không nhất thiết phải lớn.

Bạn đang sử dụng quy trình nào để thực hiện cập nhật và xóa ngay bây giờ?

Là kích thước là INDEX CLUSTERED COLUMNSTORE, INDEX CLUSTERED hoặc HEAP?

Bạn đang nói rằng có chuyển động trong khi bạn cập nhật và xóa bảng này hay bạn chỉ thấy chuyển động khi bạn thay đổi bảng từ sao chép sang phân phối?

Nếu đó là cái sau đó không đáng ngạc nhiên. Bạn không có khả năng tham gia và tổng hợp tương thích. Nếu bạn đang làm gì đó để kích hoạt chuyển động thông qua cập nhật / xóa thì chúng ta có thể xem xét điều đó - mặc dù một ví dụ cụ thể sẽ hữu ích.

Nói chung, tôi sẽ bắt đầu bằng cách cố gắng giữ cho ETL đơn giản.

Sử dụng CTAS theo thứ nguyên chỉ chọn các hàng bạn muốn giữ, liên kết trong bất kỳ hàng mới nào và sử dụng CASE để nhận bất kỳ thay đổi nào (chuyển đổi CẬP NHẬT thành một biến đổi trong CTAS). Sau khi hoàn thành, bạn có thể sử dụng một cặp lệnh RENAME OBject để chuyển từ bảng hiện tại sang bảng mới. Điều này mang lại cho bạn lợi ích bổ sung khi có một cái nhìn lịch sử về bảng của bạn - thứ mà bạn có thể thả khi rảnh rỗi.


1

Được sao chép không ngăn bạn sử dụng phân vùng. Phân vùng bảng của bạn.

Sau đó, đối với các hàng bạn cần xóa hoặc cập nhật, CTAS toàn bộ phân vùng vào một bảng mới, sử dụng LEFT THAM GIA và COALESCE để nhận các giá trị (nghĩa là mới) phù hợp cho các cập nhật từ các hàng đã thay đổi trong khi vẫn giữ các hàng bạn muốn và loại trừ những người bạn không.

Cuối cùng, phân vùng chuyển đổi bảng mới với phân vùng cũ của bạn.

Và thực hiện :)

Theo kinh nghiệm của tôi, PDW không thích cập nhật và xóa. CTAS và chuyển mạch phân vùng hoạt động tốt.


1

Các câu lệnh CẬP NHẬT trong PDW chỉ song song một phần chứ không hoàn toàn song song như CTAS.

Điều đó nói rằng, điều này cũng có thể được xuống chỉ mục. Mã thực tế mà bạn đang chạy là gì? Bạn có sẵn chỉ mục để giúp tìm những hồ sơ bạn sắp hết hạn không? Bạn vẫn cần phải áp dụng một số kỹ thuật điều chỉnh tiêu chuẩn của việc áp dụng các chỉ mục không phân cụm cho các bảng hàng. Việc PDW không hỗ trợ các khóa chính dường như thường có nghĩa là mọi người quên lập chỉ mục khóa tự nhiên của họ, vì vậy đừng tìm thấy chính mình trong chiếc thuyền đó ...

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.