Cách tốt nhất để theo dõi các truy vấn chạy dài trong SQL Server là gì?


10

Tôi phải chạy khá nhiều truy vấn chạy dài (xây dựng lại các chỉ mục, cập nhật các bộ dữ liệu lớn) cho cơ sở dữ liệu của mình. Có cách nào khác để chạy truy vấn trong SQL Server Management Studio và kiểm tra nó mỗi giờ hay không? Tôi muốn được gửi email hoặc gửi tin nhắn khi hoàn thành, nhưng không biết công cụ tốt nhất cho việc này.

Câu trả lời:


4

Theo dõi bài viết của Gaius: Bạn có thể tạo một tập lệnh .Query thực hiện những gì bạn cần với việc sử dụng db ở phía trước tập lệnh -> tạo một công việc SQL Agent của loại hệ điều hành gọi tập lệnh:

sqlcmd -E -S SERVERNAME -i "c: \ YourSCRIPT.sql" -o "C: \ YourSCRIPT_LOG.log"

Thêm bước mới và sử dụng thủ tục msdb.dbo.sp_send_dbmail để gửi email. Tính năng này có thể được tùy chỉnh để hiển thị bên trong thư một truy vấn cụ thể từ các bảng SQL để xác nhận việc thực thi tập lệnh ... ví dụ: dbcc showcontig của các chỉ mục xây dựng lại của bạn.


1

Bạn đã có tùy chọn để sử dụng các công việc SQL? Bạn có thể làm thông báo và muốn thông qua đó. Theo như nhận được thông báo không liên tục, điều đó sẽ yêu cầu một số mã trong các thủ tục được lưu trữ, v.v.


1

Có, chỉ cần sử dụng xp_sendmail . Bạn có thể gửi tin nhắn được đặt sẵn hoặc kết quả của câu lệnh SQL một cách dễ dàng. Tính năng này đã có sẵn từ SQL Server 6.5, tuy nhiên, nó đã bị lỗi thời ở Denali - nếu đây sẽ là một phần vĩnh viễn trong hoạt động của bạn, thì bạn nên sử dụng Database Mail mang tính "doanh nghiệp" hơn nhiều.


1

Tôi luôn viết tin nhắn vào bảng "EventLog". Khi xử lý một lượng lớn dữ liệu, tôi quản lý dữ liệu theo từng khối và viết các cập nhật trạng thái cho EventLog sau mỗi đoạn.

Khi tôi muốn kiểm tra tiến trình của quá trình chạy dài, tôi chỉ cần truy vấn bảng EventLog.

Ví dụ về đầu ra:

-------------------
- Cập nhật lớn của tôi -
-------------------
Bắt đầu: 2011-05-03 10:00:00

Hồ sơ để xử lý: 1.000.000
Chun: 200

--- Chunk 1 ---
Đang cố cập nhật MyTable
Cập nhật hồ sơ: 5000
Hồ sơ còn lại: 995.000
Thông lượng: 4210 hồ sơ mỗi giây

--- Chunk 2--
Đang cố cập nhật MyTable
Cập nhật hồ sơ: 5000
Hồ sơ còn lại: 990.000
Thông lượng: 3555 hồ sơ mỗi giây

--- Chunk 3--
Vân vân.

Tôi cũng có các cột trong bảng EventLog để theo dõi khi tin nhắn được viết, quá trình nào đã viết tin nhắn, v.v ... Xin lỗi vì không bao gồm thông tin đó trong ví dụ của tôi.

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.