Database
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Database

Giới thiệu về xử lý không đồng bộ với Service Broker

Tôi thích sửa đổi mã SQL Server để cải thiện hiệu suất, nhưng đôi khi có những trường hợp mà ngay cả sau khi điều chỉnh mã, lập chỉ mục và thiết kế tác vụ người dùng từ ứng dụng cũng mất nhiều thời gian hơn để hoàn thành trải nghiệm người dùng cuối mong đợi. Khi điều này xảy ra, giao diện người dùng phải đợi quá trình hoàn tất hoặc chúng tôi phải đưa ra một cách thay thế để xử lý tác vụ. Xử lý không đồng bộ do Service Broker cung cấp phù hợp cho nhiều trường hợp trong số này và cho phép xử lý nền của tác vụ đang chạy dài được thực hiện riêng biệt với giao diện người dùng, cho phép người dùng tiếp tục làm việc ngay lập tức mà không cần đợi tác vụ thực sự được thực hiện. . Trong một vài bài viết tiếp theo của mình, tôi hy vọng sẽ tạo ra một loạt bài về cách bạn có thể tận dụng Service Broker với các giải thích và ví dụ mã thích hợp để giúp bạn dễ dàng hơn trong việc tận dụng các khả năng của Service Broker mà không gặp vấn đề khi triển khai.

Phương pháp thực hiện xử lý không đồng bộ

Có một số cách để đối phó với một quá trình chạy dài nhưng đã được điều chỉnh. Mã ứng dụng cũng có thể được viết lại để sử dụng BackgroundWorker, ThreadPool nền hoặc giải pháp dựa trên Thread được viết thủ công trong .NET thực hiện hoạt động không đồng bộ. Tuy nhiên, điều này cho phép ứng dụng gửi số lượng không giới hạn các quy trình đang chạy dài này, trừ khi công việc mã hóa bổ sung được thực hiện để theo dõi và giới hạn số lượng các quy trình đang hoạt động. Điều này có nghĩa là ứng dụng sẽ có khả năng ảnh hưởng đến hiệu suất hoặc khi tải dưới tải sẽ đạt đến giới hạn và quay lại trạng thái chờ trước đó mà chúng tôi đã cố gắng ngăn chặn ban đầu.

Tôi cũng đã thấy các loại quy trình này được chuyển thành các công việc SQL Agent được gắn với một bảng được sử dụng để lưu trữ thông tin cần xử lý. Sau đó, công việc được lên lịch để chạy định kỳ hoặc được ứng dụng bắt đầu sử dụng sp_start_job khi một thay đổi được lưu trữ để xử lý. Tuy nhiên, điều này chỉ cho phép thực hiện nối tiếp các quá trình đang chạy dài, vì SQL Agent không cho phép một công việc được chạy nhiều lần đồng thời. Công việc cũng sẽ phải được thiết kế để xử lý các tình huống trong đó nhiều hàng nhập vào bảng xử lý để thứ tự xử lý chính xác xảy ra và các lần gửi tiếp theo được xử lý riêng biệt.

Tận dụng Service Broker để xử lý không đồng bộ trong SQL Server thực sự giải quyết các hạn chế với các phương pháp đã đề cập trước đó để xử lý quá trình không đồng bộ. Việc triển khai môi giới cho phép các tác vụ mới được xếp hàng đợi để xử lý không đồng bộ trong nền và cũng cho phép xử lý song song các tác vụ đã được xếp hàng đợi đến một giới hạn đã định cấu hình. Tuy nhiên, không giống như cấp ứng dụng phải đợi khi đạt đến giới hạn, giải pháp môi giới chỉ cần xếp hàng đợi thông báo mới nhận được và cho phép nó được xử lý khi một trong các tác vụ xử lý hiện tại hoàn thành - điều này cho phép ứng dụng tiếp tục mà không cần chờ đợi.

Cấu hình nhà môi giới dịch vụ cơ sở dữ liệu đơn

Trong khi các cấu hình của Service Broker có thể trở nên phức tạp, để xử lý không đồng bộ đơn giản, bạn chỉ cần biết các khái niệm cơ bản để xây dựng cấu hình cơ sở dữ liệu đơn lẻ. Một cấu hình cơ sở dữ liệu duy nhất chỉ yêu cầu:

  1. Tạo hai loại tin nhắn
    • Một để yêu cầu xử lý không đồng bộ
    • Một cho thông báo trả lại khi quá trình xử lý hoàn tất
  2. Một hợp đồng sử dụng các loại thông báo
    • Xác định loại thông báo nào được gửi bởi dịch vụ khởi tạo và loại thông báo nào được trả về bởi dịch vụ đích
  3. Hàng đợi, dịch vụ và thủ tục kích hoạt cho mục tiêu
    • Hàng đợi cung cấp lưu trữ các thông báo được gửi đến dịch vụ đích bởi dịch vụ khởi tạo
    • Quy trình kích hoạt tự động xử lý thư từ hàng đợi
      • Trả về một thông báo đã hoàn thành cho dịch vụ khởi tạo khi nó hoàn thành việc xử lý một tác vụ được yêu cầu
      • Xử lý các loại thông báo hệ thống http://schemas.microsoft.com/SQL/ServiceBroker/EndDialog và http://schemas.microsoft.com/SQL/ServiceBroker/Error
  4. Hàng đợi, dịch vụ và thủ tục kích hoạt cho trình khởi tạo
    • Hàng đợi cung cấp lưu trữ các tin nhắn được gửi đến dịch vụ
    • Quy trình kích hoạt là tùy chọn nhưng tự động hóa việc xử lý các thông báo từ hàng đợi
      • Xử lý thông báo đã hoàn thành tới dịch vụ mục tiêu và kết thúc cuộc trò chuyện
      • Xử lý các loại thông báo hệ thống http://schemas.microsoft.com/SQL/ServiceBroker/EndDialog và http://schemas.microsoft.com/SQL/ServiceBroker/Error

Ngoài các thành phần cơ bản này, tôi thích sử dụng thủ tục được lưu trữ trong trình bao bọc để tạo cuộc hội thoại và gửi tin nhắn giữa các dịch vụ môi giới để giữ cho mã sạch và giúp dễ mở rộng quy mô khi cần thiết bằng cách triển khai sử dụng lại cuộc hội thoại hoặc 150 mẹo hội thoại được giải thích trong Sách trắng của nhóm SQLCAT. Đối với nhiều cấu hình xử lý không đồng bộ đơn giản, các kỹ thuật điều chỉnh hiệu suất này có thể không cần thực hiện. Tuy nhiên, bằng cách sử dụng một thủ tục được lưu trữ trong trình bao bọc, việc thay đổi một điểm trong mã trở nên dễ dàng hơn nhiều, thay vì thay đổi mọi thủ tục gửi tin nhắn trong tương lai, nếu điều đó trở nên cần thiết.

Nếu bạn chưa cho Service Broker xem, nó có thể cung cấp một phương pháp thay thế để thực hiện xử lý không đồng bộ được phân tách để giải quyết một số trường hợp có thể xảy ra. Trong bài đăng tiếp theo của tôi, chúng tôi sẽ giới thiệu cho các bạn về mã nguồn để biết ví dụ về triển khai và giải thích những nơi cần thực hiện các thay đổi cụ thể để tận dụng mã cho quá trình xử lý không đồng bộ.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Quản lý giao dịch với Django 1.6

  2. Cài đặt và cấu hình Phần mềm XAMPP trên Windows Server 2019

  3. Thuộc tính ACID của Báo cáo &Giao dịch

  4. Giới thiệu về Dịch vụ Web Amazon (AWS) Tự động mở rộng quy mô

  5. Các cách tiếp cận tốt nhất cho trung vị được nhóm lại