SQL Profiler - Viết kịch bản theo dõi với bộ lọc HostName


7

Tôi có một kho định nghĩa theo dõi theo kịch bản mà tôi sử dụng cho các cấp độ chẩn đoán khác nhau, không có bộ lọc nào theo HostName. Tôi cần lọc lưu lượng theo máy chủ ngày hôm nay để:

  1. Bắn lên Profiler
  2. Tạo một dấu vết trống
  3. Đã thêm SP: Bắt đầu / Hoàn thành
  4. Đặt bộ lọc cho tên máy chủ
  5. Viết kịch bản cho tệp test.sql

Mở tệp trong SSMS, không có dấu hiệu của bộ lọc. Rửa sạch, lặp lại, cùng một lần nữa. Giả sử tôi đang làm một cái gì đó tôi đã tìm kiếm giá trị để sử dụng (khó tìm hơn mức cần thiết!) Và thêm vào định nghĩa dấu vết của tôi bằng tay, nó đã hoạt động.

EXEC sp_trace_setfilter @TraceId, 8, 0, 6, N'MyHostName'

Trở lại để kiểm tra lý do tại sao tôi không thể làm việc này từ Profiler và kết quả tương tự. Tôi thấy đề cập đến điều này là một vấn đề khi kịch bản theo dõi năm 2000 từ SSMS nhưng không đề cập đến tình huống này với các máy chủ SSMS2005 / 2008 đến 2005/2008. Đây có phải là một lỗi trong Profiler?

Câu trả lời:


6

Khi tập lệnh được tạo trong Profiler 2005, giá trị mặc định được lưu cho toán tử logic là 1 = 'OR', do đó, dấu vết sẽ thu được nhiều thông tin hơn dự định ban đầu của chúng tôi.

exec sp_trace_setfilter @TraceID, 8, 1, 0, N'HOSTNAME1'    -- OR 
exec sp_trace_setfilter @TraceID, 8, 1, 0, N'HOSTNAME2'
exec sp_trace_setfilter @TraceID, 8, 1, 0, N'HOSTNAME3'
set @bigintfilter = 10 -- reads >= 10
exec sp_trace_setfilter @TraceID, 16, 0, 4, @bigintfilter  -- AND
exec sp_trace_setfilter @TraceID, 35, 1, 6, N'DB'          -- OR

Trong Profiler> = 2008, tập lệnh có 0 (AND) cho lần xuất hiện đầu tiên của cột được lọc.

exec sp_trace_setfilter @TraceID, 8, 0, 0, N'HOSTNAME1'    -- AND               
exec sp_trace_setfilter @TraceID, 8, 1, 0, N'HOSTNAME2'  
exec sp_trace_setfilter @TraceID, 8, 1, 0, N'HOSTNAME3' 
exec sp_trace_setfilter @TraceID, 35,0, 6, N'DB'           -- AND                
set @bigintfilter = 10 -- reads
exec sp_trace_setfilter @TraceID, 16, 0, 4, @bigintfilter  -- AND

Điều này trông giống như một lỗi trong Profiler 2005.


1

Bạn cần kiểm tra xem tệp theo dõi máy chủ có cột được thêm vào danh sách các cột cho tất cả các sự kiện của bạn không. Vì vậy, nếu bạn có các sự kiện 10 và 12 (RPC: Đã hoàn thành và SQL: BatchCompleted), bạn phải chạy sp_trace_setevent cho tất cả các cột, bao gồm cả tên máy chủ của cột:

exec sp_trace_setevent @TraceID, 10, 8, @on
exec sp_trace_setevent @TraceID, 12, 8, @on

trong đó 10 và 12 - sự kiện và Tên máy chủ 8 cột

sp_trace_setevent nói:

"Người dùng phải thực thi sp_trace_setevent cho mỗi cột được thêm cho mỗi sự kiện. Trong mỗi lần thực hiện, nếu @on được đặt thành 1, sp_trace_setevent sẽ thêm sự kiện được chỉ định vào danh sách các sự kiện của dấu vết. Nếu @on được đặt thành 0, sp_trace_setevent sẽ xóa sự kiện được chỉ định từ danh sách. "

Sau đó bộ lọc sẽ có thể hoạt động đúng.


Vấn đề là nếu tôi đặt HostName làm bộ lọc trong Profiler, thì nó không xuất hiện trong định nghĩa theo dõi theo kịch bản. Nếu tôi thêm bộ lọc theo cách thủ công vào định nghĩa theo kịch bản của mình, nó sẽ hoạt động tốt.
Mark Storey-Smith

Đánh dấu - Bạn đã nói "Mở tệp trong SSMS, không có dấu hiệu của bộ lọc.". Từ đó tôi hiểu rằng sp_trace_setfilter không có kịch bản. Nhưng bạn đã kiểm tra xem sự kiện có được đặt cho cột cụ thể đó không: exec sp_trace_setevent _TraceID, 12, 8, _on (thay vì 12 cần id sự kiện đã sử dụng của bạn)?
Mary

Bạn có thể đúng. Tôi vừa trải qua quá trình một lần nữa với một sự kiện duy nhất và nó đã được lên kịch bản tốt. Tôi sẽ tuyên thệ tôi đã chọn HostName với "Chọn cột" ở đầu lưới (để đảm bảo nó được chọn cho tất cả các sự kiện) nhưng có vẻ như tôi đã sai ở đâu đó! Tôi sẽ chơi xung quanh với các kết hợp khác nhau sau đó và cập nhật Q ban đầu nếu vẫn còn bất kỳ sự kỳ quặc nào.
Mark Storey-Smith
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.