Tải chuyển đổi chiết xuất (ETL) là xương sống cho bất kỳ kho dữ liệu nào. Trong kho dữ liệu thế giới, dữ liệu được quản lý bởi quy trình ETL, bao gồm ba quy trình, Trích xuất-Kéo / Thu thập dữ liệu từ các nguồn, Dữ liệu chuyển đổi-thay đổi ở định dạng yêu cầu và Dữ liệu tải-đẩy đến đích nói chung vào kho dữ liệu hoặc một kho dữ liệu.
Tìm hiểu SSIS và Bắt đầu Dùng thử Miễn phí ngay hôm nay!
SQL Server Integration Services (SSIS) là công cụ trong họ ETL rất hữu ích để phát triển và quản lý kho dữ liệu doanh nghiệp. Một kho dữ liệu theo đặc điểm riêng của nó hoạt động trên một khối lượng dữ liệu khổng lồ và hiệu suất là một thách thức lớn khi quản lý một khối lượng dữ liệu khổng lồ đối với bất kỳ Kiến trúc sư hoặc DBA nào.
Cân nhắc cải tiến ETL
Hôm nay, tôi sẽ thảo luận về cách bạn có thể dễ dàng cải thiện hiệu suất ETL hoặc thiết kế hệ thống ETL hiệu suất cao với sự trợ giúp của SSIS. Để hiểu rõ hơn, tôi sẽ chia mười phương pháp thành hai loại khác nhau; thứ nhất, cân nhắc về thời gian thiết kế gói SSIS và thứ hai định cấu hình các giá trị thuộc tính khác nhau của các thành phần có sẵn trong gói SSIS.
Cân nhắc về thời gian thiết kế gói SSIS
# 1 Trích xuất dữ liệu song song:SSIS cung cấp cách kéo dữ liệu song song bằng cách sử dụng Bộ chứa trình tự trong luồng điều khiển. Bạn có thể thiết kế một gói theo cách mà nó có thể lấy dữ liệu từ các bảng hoặc tệp không phụ thuộc song song, điều này sẽ giúp giảm thời gian thực thi ETL tổng thể.
# 2 Trích xuất dữ liệu cần thiết:chỉ kéo tập dữ liệu được yêu cầu từ bất kỳ bảng hoặc tệp nào. Bạn cần tránh xu hướng lấy mọi thứ hiện có trên nguồn mà bạn sẽ sử dụng trong tương lai; nó ngốn băng thông mạng, tiêu tốn tài nguyên hệ thống (I / O và CPU), yêu cầu thêm bộ nhớ và làm giảm hiệu suất tổng thể của hệ thống ETL.
Nếu hệ thống ETL của bạn thực sự năng động về bản chất và các yêu cầu của bạn thường xuyên thay đổi, thì tốt hơn hết là bạn nên xem xét các phương pháp thiết kế khác, như ETL theo hướng dữ liệu Meta, v.v. thay vì thiết kế để kéo mọi thứ vào cùng một lúc.
# 3 Tránh sử dụng các thành phần biến đổi không đồng bộ:SSIS là một công cụ phong phú với một tập hợp các thành phần biến đổi để đạt được các tác vụ phức tạp trong quá trình thực thi ETL nhưng đồng thời, bạn sẽ phải trả giá rất nhiều nếu các thành phần này không được sử dụng đúng cách.
Hai danh mục thành phần chuyển đổi có sẵn trong SSIS: Đồng bộ và Không đồng bộ .
Biến đổi đồng bộ là những thành phần xử lý từng hàng và đẩy xuống thành phần / đích tiếp theo, nó sử dụng bộ nhớ đệm được cấp phát và không yêu cầu bộ nhớ bổ sung vì nó là mối quan hệ trực tiếp giữa hàng dữ liệu đầu vào / đầu ra khớp hoàn toàn với bộ nhớ được cấp phát. Các thành phần như Tra cứu, Cột có nguồn gốc và Chuyển đổi dữ liệu, v.v. thuộc danh mục này.
Biến đổi không đồng bộ là những thành phần đầu tiên lưu trữ dữ liệu vào bộ nhớ đệm sau đó xử lý các hoạt động như Sắp xếp và Tổng hợp. Bộ nhớ đệm bổ sung được yêu cầu để hoàn thành tác vụ và cho đến khi bộ nhớ đệm khả dụng, nó giữ toàn bộ dữ liệu trong bộ nhớ và chặn giao dịch, còn được gọi là chuyển đổi chặn. Để hoàn thành nhiệm vụ, công cụ SSIS (công cụ đường ống dẫn luồng dữ liệu) sẽ phân bổ thêm bộ nhớ đệm, một lần nữa là một chi phí cho hệ thống ETL. Các thành phần như Sắp xếp, Tổng hợp, Hợp nhất, Kết hợp, v.v. thuộc loại này.
Nhìn chung, bạn nên tránh các phép Chuyển đổi không đồng bộ, tuy nhiên, nếu bạn rơi vào tình huống không có lựa chọn nào khác thì bạn phải biết cách xử lý các giá trị thuộc tính có sẵn của các thành phần này. Tôi sẽ thảo luận về chúng sau trong bài viết này.
# 4 Sử dụng sự kiện tối ưu trong trình xử lý sự kiện:để theo dõi tiến độ thực hiện gói hoặc thực hiện bất kỳ hành động thích hợp nào khác đối với một sự kiện cụ thể, SSIS cung cấp một tập hợp các sự kiện. Sự kiện rất hữu ích nhưng việc sử dụng quá nhiều sự kiện sẽ tốn thêm chi phí khi thực hiện ETL.
Tại đây, bạn cần xác thực tất cả các đặc điểm trước khi kích hoạt một sự kiện trong gói SSIS.
# 5 Cần lưu ý về lược đồ bảng đích khi làm việc trên một khối lượng lớn dữ liệu. Bạn cần phải suy nghĩ kỹ khi cần lấy một khối lượng dữ liệu khổng lồ từ nguồn và đẩy nó vào kho dữ liệu hoặc siêu thị dữ liệu. Bạn có thể gặp các vấn đề về hiệu suất khi cố gắng đẩy dữ liệu khổng lồ vào đích bằng cách kết hợp các thao tác chèn, cập nhật và xóa (DML), vì có thể bảng đích sẽ có các chỉ mục nhóm hoặc không nhóm, điều này có thể gây ra nhiều dữ liệu xáo trộn trong bộ nhớ do các hoạt động DML.
Nếu ETL đang gặp vấn đề về hiệu suất do số lượng lớn hoạt động DML trên một bảng có chỉ mục, bạn cần thực hiện các thay đổi thích hợp trong thiết kế ETL, chẳng hạn như loại bỏ các chỉ mục được nhóm hiện có trong giai đoạn trước khi thực hiện và tạo lại tất cả các chỉ mục trong giai đoạn sau khi thực thi. Bạn có thể tìm thấy các giải pháp thay thế khác tốt hơn để giải quyết vấn đề dựa trên tình huống của bạn.
Định cấu hình thuộc tính thành phần
# 6 Kiểm soát việc thực thi song song một tác vụ bằng cách định cấu hình MaxConcurrentExecutables và EngineThreads bất động sản. Gói SSIS và các tác vụ luồng dữ liệu có thuộc tính để kiểm soát việc thực thi song song một tác vụ: MaxConcurrentExecutables là thuộc tính cấp gói và có giá trị mặc định là -1 , có nghĩa là số tác vụ tối đa có thể được thực thi bằng tổng số bộ xử lý trên máy cộng với hai tác vụ;
Gói
EngineThreads là thuộc tính mức tác vụ luồng dữ liệu và có giá trị mặc định là 10, giá trị này chỉ định tổng số luồng có thể được tạo để thực thi tác vụ luồng dữ liệu.
Nhiệm vụ luồng dữ liệu
Bạn có thể thay đổi các giá trị mặc định của các thuộc tính này theo nhu cầu của ETL và khả năng cung cấp tài nguyên.
# 7 Định cấu hình tùy chọn chế độ truy cập Dữ liệu trong Đích OLEDB. Trong tác vụ luồng dữ liệu SSIS, chúng ta có thể tìm thấy đích OLEDB, cung cấp một số tùy chọn để đẩy dữ liệu vào bảng đích, trong chế độ Truy cập dữ liệu; đầu tiên, tùy chọn "Bảng hoặc chế độ xem", chèn một hàng tại một thời điểm; thứ hai, tùy chọn “Bảng hoặc xem tải nhanh”, sử dụng nội bộ câu lệnh chèn số lượng lớn để gửi dữ liệu vào bảng đích, luôn cung cấp hiệu suất tốt hơn so với các tùy chọn khác. Khi bạn chọn tùy chọn “tải nhanh”, nó cung cấp cho bạn nhiều quyền kiểm soát hơn để quản lý hành vi của bảng đích trong quá trình đẩy dữ liệu, chẳng hạn như Giữ danh tính, Giữ nulls, Khóa bảng và Kiểm tra các ràng buộc.
Trình chỉnh sửa đích của OLE DB
Chúng tôi thực sự khuyên bạn nên sử dụng tùy chọn tải nhanh để đẩy dữ liệu vào bảng đích nhằm cải thiện hiệu suất ETL.
# 8, Định cấu hình hàng mỗi lô và Kích thước cam kết chèn tối đa trong đích OLEDB. Hai cài đặt này rất quan trọng để kiểm soát hiệu suất của tempdb và nhật ký giao dịch vì với các giá trị mặc định đã cho của các thuộc tính này, nó sẽ đẩy dữ liệu vào bảng đích theo một lô và một giao dịch. Nó sẽ yêu cầu sử dụng quá nhiều tembdb và nhật ký giao dịch, điều này biến thành vấn đề về hiệu suất ETL vì tiêu thụ quá nhiều bộ nhớ và lưu trữ đĩa.
Trình chỉnh sửa đích của OLE DB
Để cải thiện hiệu suất ETL, bạn có thể đặt một giá trị số nguyên dương vào cả hai thuộc tính dựa trên khối lượng dữ liệu dự đoán, điều này sẽ giúp chia toàn bộ dữ liệu thành nhiều lô và dữ liệu trong một lô có thể lại được đưa vào bảng đích tùy thuộc vào giá trị xác định. Nó sẽ tránh sử dụng quá nhiều tempdb và nhật ký giao dịch, điều này sẽ giúp cải thiện hiệu suất ETL.
# 9 Sử dụng Đích Máy chủ SQL trong tác vụ luồng dữ liệu. Khi bạn muốn đẩy dữ liệu vào cơ sở dữ liệu SQL Server cục bộ, bạn nên sử dụng SQL Server Destination, vì nó cung cấp nhiều lợi ích để khắc phục các hạn chế của tùy chọn khác, giúp bạn cải thiện hiệu suất ETL. Ví dụ:nó sử dụng tính năng chèn hàng loạt được tích hợp trong SQL Server nhưng nó cung cấp cho bạn tùy chọn áp dụng chuyển đổi trước khi tải dữ liệu vào bảng đích. Ngoài ra, nó cung cấp cho bạn tùy chọn để bật / tắt trình kích hoạt được kích hoạt khi tải dữ liệu, điều này cũng giúp giảm chi phí ETL.
Thành phần luồng dữ liệu đích của máy chủ SQL
# 10 Tránh đánh máy ngầm. Khi dữ liệu đến từ một tệp phẳng, trình quản lý kết nối tệp phẳng coi tất cả các cột là kiểu dữ liệu chuỗi (DS_STR), bao gồm cả các cột số. Như bạn đã biết, SSIS sử dụng bộ nhớ đệm để lưu toàn bộ tập dữ liệu và áp dụng phép chuyển đổi cần thiết trước khi đẩy dữ liệu vào bảng đích. Bây giờ, khi tất cả các cột là kiểu dữ liệu chuỗi, nó sẽ yêu cầu nhiều không gian hơn trong bộ đệm, điều này sẽ làm giảm hiệu suất ETL.
Để cải thiện hiệu suất ETL, bạn nên chuyển đổi tất cả các cột số thành kiểu dữ liệu thích hợp và tránh chuyển đổi ngầm định, điều này sẽ giúp công cụ SSIS chứa nhiều hàng hơn trong một bộ đệm.
Tóm tắt các Cải tiến Hiệu suất ETL
Trong bài viết này, chúng tôi đã khám phá cách dễ dàng kiểm soát hiệu suất ETL tại bất kỳ thời điểm nào. Đây là 10 cách phổ biến để cải thiện hiệu suất ETL. Có thể có nhiều phương pháp hơn dựa trên các tình huống khác nhau mà thông qua đó, hiệu suất có thể được cải thiện.
Nhìn chung, với sự trợ giúp của phân loại, bạn có thể xác định cách xử lý tình huống. Nếu bạn đang trong giai đoạn thiết kế kho dữ liệu thì bạn có thể cần phải tập trung vào cả hai danh mục nhưng nếu bạn đang hỗ trợ bất kỳ hệ thống kế thừa nào thì trước tiên hãy làm việc chặt chẽ với danh mục thứ hai.