Số lượng hành động ràng buộc tối đa được phép cho một sự kiện mở rộng là bao nhiêu?


14

Nếu bạn thêm hành động "quá nhiều" vào một sự kiện trong phiên sự kiện, bạn sẽ nhận được lỗi này:

Msg 25639, Cấp 16, Bang 23, Dòng 1 Sự kiện, "[tên sự kiện]", vượt quá số lượng hành động ràng buộc cho phép.

Có bao nhiêu hành động được phép? Nó thay đổi theo sự kiện?

Câu trả lời, dựa trên thử nghiệm, dường như là 27 cho sqlserver.rpc_completed. Nhưng tôi chưa tìm thấy con số đó trên bất kỳ tài liệu nào của Microsoft . Và nó dường như thay đổi theo sự kiện, vì tôi đã có thể nhận được 30 cho sqlserver.sql_batch_completed.

Mã ví dụ không thành công:

CREATE EVENT SESSION [Test] ON SERVER 
ADD EVENT sqlserver.rpc_completed(
    ACTION(
        package0.callstack,
        package0.collect_cpu_cycle_time,
        package0.collect_current_thread_id,
        package0.collect_system_time,
        package0.event_sequence,
        package0.last_error,
        package0.process_id,
        sqlos.cpu_id,
        sqlos.numa_node_id,
        sqlos.scheduler_address,
        sqlos.scheduler_id,
        sqlos.system_thread_id,
        sqlos.task_address,
        sqlos.task_elapsed_quantum,
        sqlos.task_resource_group_id,
        sqlos.task_resource_pool_id,
        sqlos.task_time,
        sqlos.worker_address,
        sqlserver.client_app_name,
        sqlserver.client_connection_id,
        sqlserver.client_hostname,
        sqlserver.client_pid,
        sqlserver.context_info,
        sqlserver.database_id,
        sqlserver.database_name,
        sqlserver.is_system,
        sqlserver.nt_username,
        sqlserver.plan_handle))
GO
DROP EVENT SESSION [Test] ON SERVER
GO

Mã ví dụ thành công (giống nhau ngoại trừ loại trừ mục cuối cùng):

CREATE EVENT SESSION [Test] ON SERVER 
ADD EVENT sqlserver.rpc_completed(
    ACTION(
        package0.callstack,
        package0.collect_cpu_cycle_time,
        package0.collect_current_thread_id,
        package0.collect_system_time,
        package0.event_sequence,
        package0.last_error,
        package0.process_id,
        sqlos.cpu_id,
        sqlos.numa_node_id,
        sqlos.scheduler_address,
        sqlos.scheduler_id,
        sqlos.system_thread_id,
        sqlos.task_address,
        sqlos.task_elapsed_quantum,
        sqlos.task_resource_group_id,
        sqlos.task_resource_pool_id,
        sqlos.task_time,
        sqlos.worker_address,
        sqlserver.client_app_name,
        sqlserver.client_connection_id,
        sqlserver.client_hostname,
        sqlserver.client_pid,
        sqlserver.context_info,
        sqlserver.database_id,
        sqlserver.database_name,
        sqlserver.is_system,
        sqlserver.nt_username))
GO
DROP EVENT SESSION [Test] ON SERVER
GO

(Tôi đã thử một vài hành động khác nhau và dường như không liên quan đến hành động nào được đưa vào-- nhưng có lẽ nó dựa trên tổng số ký tự của các tên hành động?)

Danh sách đầy đủ các hành động tôi đã làm việc với:

package0.callstack,
package0.collect_cpu_cycle_time,
package0.collect_current_thread_id,
package0.collect_system_time,
package0.event_sequence,
package0.last_error,
package0.process_id,
sqlos.cpu_id,
sqlos.numa_node_id,
sqlos.scheduler_address,
sqlos.scheduler_id,
sqlos.system_thread_id,
sqlos.task_address,
sqlos.task_elapsed_quantum,
sqlos.task_resource_group_id,
sqlos.task_resource_pool_id,
sqlos.task_time,
sqlos.worker_address,
sqlserver.client_app_name,
sqlserver.client_connection_id,
sqlserver.client_hostname,
sqlserver.client_pid,
sqlserver.context_info,
sqlserver.database_id,
sqlserver.database_name,
sqlserver.is_system,
sqlserver.nt_username,
sqlserver.plan_handle,
sqlserver.query_hash,
sqlserver.query_hash_signed,
sqlserver.query_plan_hash,
sqlserver.query_plan_hash_signed,
sqlserver.request_id,
sqlserver.server_instance_name,
sqlserver.server_principal_name,
sqlserver.server_principal_sid,
sqlserver.session_id,
sqlserver.session_nt_username,
sqlserver.session_resource_group_id,
sqlserver.session_resource_pool_id,
sqlserver.session_server_principal_name

@@ VERSION Đầu ra:

Microsoft SQL Server 2016 (SP1) (KB3182545) - 13.0.4001.0 (X64) 
    Oct 28 2016 18:17:30 
    Copyright (c) Microsoft Corporation
    Developer Edition (64-bit) on Windows Server 2012 R2 Standard 6.3 <X64> (Build 9600: ) (Hypervisor)

Câu trả lời:


9

Có bao nhiêu hành động được phép? Nó thay đổi theo sự kiện?

Tôi đã thực hiện một số nghiên cứu và vâng, có giới hạn về số lượng hành động và sự kiện có thể được thêm vào một định nghĩa sự kiện mở rộng. Đây không phải là một giá trị "cứng" mà dựa trên nhiều đầu vào khác nhau, do đó, một định nghĩa không hoạt động có thể hoạt động chỉ với việc loại bỏ một sự kiện hoặc một hành động trong một sự kiện.

Và nó dường như thay đổi theo sự kiện, vì tôi đã có thể nhận được 30 cho sqlserver.sql_batch_completed.

Bạn đã vấp phải vô số cấu hình có thể, vì vậy bạn biết nó không hoàn toàn dựa trên số lượng hành động. Nó cũng không cụ thể cho từng sự kiện, mà là sự kết hợp của các giá trị.

Bạn có thể làm gì?

Mục đầu tiên là dữ liệu độ dài thay đổi là vấn đề lớn nhất mà bạn sẽ phải đối mặt. Làm thế nào để bạn biết chiều dài thay đổi và những gì không? Nếu bạn xem danh mục XE sys.dm_xe_objectscụ thể ở một số hành động, bạn sẽ thấy có type_nametype_sizecác cột có thể hữu ích để xem liệu bạn có thêm một loạt các điểm dữ liệu có kích thước thay đổi không (kích thước 0 trong ảnh chụp màn hình bên dưới).

nhập mô tả hình ảnh ở đây

Bây giờ, có lẽ bạn đang nghĩ - ok điều đó thật tuyệt nhưng tôi không biết giới hạn phép thuật nên nó thực sự không hữu ích. Vâng, nó là và nó không. Nếu bạn đặc biệt nhìn nó từ quan điểm số thì có, nó không hữu ích lắm ... tuy nhiên đây là một cách nhìn khủng khiếp. Nó nên được xem như là "Tôi chỉ thu thập dữ liệu tôi cần chứ?" và trong hầu hết các trường hợp, bạn sẽ không bao giờ gặp phải vấn đề với lỗi này.

Nếu chúng ta đưa ra định nghĩa trong câu hỏi không hoạt động, một số thông tin được thu thập dường như thực sự không cần thiết. Bạn có thực sự cần callstack, id luồng hiện tại, thời gian chu kỳ cpu, địa chỉ worker và địa chỉ lịch trình không? Callstack là biến, phần còn lại là cố định, vì vậy chỉ cần loại bỏ callstack bạn có thể phù hợp với nhiều cột hơn nếu cần. Tôi không nói bạn cần thêm nữa nhưng bạn có thể.

Toàn bộ vấn đề là giới hạn định nghĩa là nhỏ như cần thiết. Thu thập mọi thứ sẽ dẫn đến lỗi (như bạn đã có ở đây), hệ thống chậm chạp, quá nhiều dữ liệu để phân tích hoặc thậm chí dừng hệ thống. Chỉ vì bạn không thể có nghĩa là bạn nên. Không có gì nói rằng các giới hạn này sẽ hoặc sẽ không thay đổi giữa các phiên bản chính hoặc phụ, do đó, giữ cho nhu cầu tối thiểu thực sự là cách phòng ngừa tốt nhất . Vui lòng không chỉ kiểm tra mỗi hộp (gui) hoặc thêm mọi hành động có thể.


Tôi gặp vấn đề tương tự khi thêm quá nhiều sự kiện vào một phiên duy nhất khi thử nghiệm công cụ QueryableXEventData mà tôi đang phát triển. Chỉ xác định những sự kiện, hành động và các lĩnh vực thực sự cần thiết là lời khuyên tốt.
Dan Guzman
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.