विस्तारित घटना के लिए स्वीकार्य बाध्य क्रियाओं की अधिकतम संख्या क्या है?


14

यदि आप किसी ईवेंट सत्र में किसी ईवेंट में "बहुत अधिक" क्रियाएं जोड़ते हैं, तो आपको यह त्रुटि मिलेगी:

Msg 25639, स्तर 16, राज्य 23, पंक्ति 1 घटना, "[घटना नाम]", स्वीकार्य बाध्य कार्यों की संख्या से अधिक है।

कितने कार्यों की अनुमति है? क्या यह घटना से भिन्न है?

प्रयोग के आधार पर, उत्तर 27 के लिए प्रतीत होता है sqlserver.rpc_completed। लेकिन मुझे वह नंबर किसी Microsoft दस्तावेज़ पर नहीं मिला । और यह घटना से भिन्न होता है, क्योंकि मैं 30 प्राप्त करने में सक्षम था sqlserver.sql_batch_completed

उदाहरण कोड जो विफल रहता है:

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

उदाहरण कोड जो सफल होता है (अंतिम आइटम को छोड़कर वही):

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

(मैंने अलग-अलग क्रियाओं के एक जोड़े की कोशिश की और यह संबंधित कार्यों में शामिल नहीं है - लेकिन शायद यह कार्रवाई के नामों की कुल वर्ण गणना पर आधारित है?)

उन कार्यों की पूरी सूची, जिनके साथ मैं काम कर रहा था:

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

@@ संस्करण उत्पादन:

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)

जवाबों:


9

कितने कार्यों की अनुमति है? क्या यह घटना से भिन्न है?

मैंने कुछ शोध किए और हां, क्रियाओं और घटनाओं की संख्या की एक सीमा है जिन्हें एक विस्तारित घटना परिभाषा में जोड़ा जा सकता है। यह एक "कठिन" मान नहीं है, लेकिन कई अलग-अलग इनपुटों पर आधारित है, इस प्रकार एक परिभाषा जो काम नहीं करती है वह किसी एक घटना को हटाने या किसी एक घटना में एक ही कार्रवाई के साथ काम नहीं कर सकती है।

और यह घटना से भिन्न होता है, क्योंकि मैं 30 प्राप्त करने में सक्षम था sqlserver.sql_batch_completed.

आप पहले से ही संभव है कि विन्यास के असंख्य पर ठोकर खाई है, तो आप जानते हैं कि यह पूरी तरह से कार्यों की संख्या पर आधारित नहीं है। यह भी प्रत्येक घटना के लिए विशिष्ट नहीं है, लेकिन मूल्यों का एक संयोजन है।

तुम क्या कर सकते हो?

पहला आइटम यह है कि चर लंबाई डेटा सबसे बड़ा मुद्दा है जिसका आप सामना करने जा रहे हैं। आपको कैसे पता चलेगा कि परिवर्तनशील लंबाई क्या है और क्या नहीं है? यदि आप XE कैटलॉग में sys.dm_xe_objectsविशेष रूप से कुछ क्रियाओं को देखते हैं, तो आप देखेंगे कि कॉलम type_nameऔर type_sizeकॉलम हैं जो यह देखने के लिए उपयोगी हो सकते हैं कि क्या आप परिवर्तनीय आकार के डेटा बिंदुओं (नीचे स्क्रीनशॉट में 0 का आकार) का एक गुच्छा जोड़ रहे हैं।

यहाँ छवि विवरण दर्ज करें

अब, आप शायद सोच रहे हैं - ठीक है, यह बहुत अच्छा है, लेकिन मैं जादुई सीमा नहीं जानता, इसलिए यह वास्तव में उपयोगी नहीं है। खैर, यह है और यह नहीं है। यदि आप इसे विशेष रूप से एक संख्या के दृष्टिकोण से देखते हैं, तो हाँ यह बहुत उपयोगी नहीं है ... लेकिन यह इसे देखने का एक भयानक तरीका है। इसे इस रूप में देखा जाना चाहिए, "क्या मैं केवल वही डेटा एकत्र कर रहा हूं जिसकी मुझे आवश्यकता है?" और ज्यादातर मामलों में आप इस त्रुटि के साथ कभी नहीं चलेंगे।

अगर हम इस सवाल में परिभाषा लेते हैं कि काम नहीं करता है, तो एकत्र की गई कुछ जानकारी ऐसा लगता है जैसे कि इसकी वास्तव में आवश्यकता नहीं है। क्या आपको वास्तव में कॉलस्टैक, वर्तमान थ्रेड आईडी, सीपीयू चक्र समय, कार्यकर्ता पता और अनुसूचक पता की आवश्यकता है? कॉलस्टैक परिवर्तनशील है, बाकी सब तय हो गए हैं, इसलिए जरूरत पड़ने पर आप कॉलस्टैक को समाप्त कर सकते हैं और अधिक कॉलम में फिट हो सकते हैं। मैं यह नहीं कह रहा हूं कि आपको किसी और की जरूरत है लेकिन आप कर सकते हैं।

पूरे बिंदु को परिभाषा को सीमित करना है जितना आवश्यक हो उतना छोटा होना चाहिए। सबकुछ एकत्र करने से या तो त्रुटियों का परिणाम हो रहा है (जैसा कि आप यहाँ हैं), सिस्टम की सुस्ती, विश्लेषण के लिए बहुत अधिक डेटा, या सिस्टम हॉल्टिंग भी। सिर्फ इसलिए कि आप का मतलब यह नहीं है कि आपको चाहिए। यह बताते हुए कुछ भी नहीं है कि ये सीमाएं प्रमुख या लघु संस्करणों के बीच बदल जाएंगी या नहीं बदलेगी, इसलिए सही न्यूनतम आवश्यकता को रखना सबसे अच्छी रोकथाम है। कृपया हर बॉक्स (gui) की जाँच न करें या हर क्रिया को संभव जोड़ें।


एक समान सत्र में बहुत सी घटनाओं को जोड़ते समय मैं इसी तरह के मुद्दों में भाग गया जब एक QueryableXEventData उपकरण का परीक्षण कर रहा था जिसे मैं विकसित कर रहा था। केवल उन घटनाओं, कार्यों और क्षेत्रों को निर्दिष्ट करना जो वास्तव में आवश्यक हैं, अच्छी सलाह है।
डेन गुज़मैन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.