Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

एक सामान्य एमएस एसक्यूएल सर्वर प्रदर्शन संकेतक लागू करना

परिचय

अक्सर एक प्रदर्शन संकेतक बनाने की आवश्यकता होती है जो पिछली अवधि या विशिष्ट दिन से संबंधित डेटाबेस गतिविधि दिखाएगा। "क्वेरी, संग्रहित प्रक्रियाओं और ट्रिगर के लिए SQL सर्वर प्रदर्शन संकेतक लागू करना" शीर्षक वाले लेख में, हमने इस संकेतक को लागू करने का एक उदाहरण प्रदान किया है।

इस लेख में, हम यह ट्रैक करने का एक और आसान तरीका बताने जा रहे हैं कि क्वेरी का निष्पादन कैसे और कितना समय लगता है, साथ ही साथ प्रत्येक समय बिंदु के लिए निष्पादन योजनाओं को कैसे प्राप्त किया जाए।

यह विधि उन मामलों में विशेष रूप से उपयोगी है जब आपको दैनिक रिपोर्ट तैयार करने की आवश्यकता होती है, इसलिए आप न केवल विधि को स्वचालित कर सकते हैं बल्कि इसे न्यूनतम तकनीकी विवरण के साथ रिपोर्ट में जोड़ सकते हैं।

इस लेख में, हम इस सामान्य प्रदर्शन संकेतक को लागू करने के एक उदाहरण का पता लगाएंगे जहां कुल बीता हुआ समय एक मीट्रिक के रूप में काम करेगा।

समाधान

सबसे पहले, हम एक सामान्य एल्गोरिथम प्रदान करते हैं:

1) सक्रिय प्रश्नों का एक स्नैपशॉट लें
2) परिणाम सहेजें
3) एक सामान्य विश्लेषण करें और दिन के अंत में परिणाम को एक तालिका में सहेजें
4) एक तुलनात्मक विश्लेषण करें प्राप्त आंकड़ों का

अब, हम कुछ विवरण प्रदान करने जा रहे हैं।

सक्रिय क्वेरी का स्नैपशॉट लेने के लिए, निम्न तालिकाएँ बनाएँ:

  1. क्वेरी योजनाओं की तालिका
    उपयोग [DATABASE_NAME]GOSET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE TABLE [srv]।[PlanQuery]( [PlanHandle] [varbinary](64) NOT NULL, [SQLHandle] [varbinary](64) NOT न्यूल, [क्वेरीप्लान] [एक्सएमएल] न्यूल, [इन्सर्टयूटीसीडेट] [डेटाटाइम] न्यूल नहीं, सीमित [पीके_प्लानक्वेरी] प्राथमिक कुंजी क्लस्टर ([एसक्यूएलहैंडल] एएससी, [प्लानहैंडल] एएससी) के साथ (PAD_INDEX =OFF, STATISTICS_NORECOMPUTE =OFF, IGNORE_OFF, OFF, OFF, , ALLOW_ROW_LOCKS =ON, ALLOW_PAGE_LOCKS =ON) ON [PRIMARY]) ऑन [PRIMARY] TEXTIMAGE_ON [PRIMARY]GOALTER TABLE [srv]।> 
  2. प्रश्नों की तालिका
    उपयोग [DATABASE_NAME]GOSET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE तालिका [srv]। [SQLQuery]( [SQLHandle] [varbinary](64) NOT NULL, [TSQL] [nvarchar](max) NULL, [सम्मिलित करेंUTCDate] [डेटाटाइम] न्यूल नहीं, सीमित [PK_SQLQuery] प्राथमिक कुंजी क्लस्टर ([SQLHandle] ASC) के साथ (PAD_INDEX =OFF, STATISTICS_NORECOMPUTE =OFF, IGNORE_DUP_KEY =OFF, ALLOW_ROW_LOCKS) [ON_ROW_LOCKS] [ON_ROW_LOCKS] [ON_ROW_LOCKS] [प्राथमिक] TEXTIMAGE_ON [प्राथमिक] गोल्टर टेबल [srv]। 
  3. सक्रिय क्वेरी के स्नैपशॉट के साथ तालिका:
    [विस्तार शीर्षक ="कोड"]

     उपयोग [DATABASE_NAME] GOSET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE तालिका [srv]। [RequestStatistics] ( [session_id] [छोटा नहीं है, [request_id] [int] NULL, [start_time] [डेटाटाइम] NULL, [स्थिति] [ nvarchar](30) NULL, [कमांड] [nvarchar](32) NULL, [sql_handle] [varbinary](64) NULL, [statement_start_offset] [int] NULL, [statement_end_offset] [int] NULL, [plan_handle] [varbinary ] (64) न्यूल, [डेटाबेस_आईडी] [स्मॉलिंट] न्यूल, [यूजर_आईडी] [इंट] न्यूल, [कनेक्शन_आईडी] [अद्वितीय पहचानकर्ता] न्यूल, [ब्लॉकिंग_सेशन_आईडी] [स्मॉलिंट] न्यूल, [वेट_टाइप] [नवरचर] (60) न्यूल, [ wait_time] [int] NULL, [last_wait_type] [nvarchar](60) NULL, [wait_resource] [nvarchar](256) NULL, [open_transaction_count] [int] NULL, [open_resultset_count] [int] NULL, [transaction_id] [bigint ] NULL, [context_info] [varbinary](128) NULL, [प्रतिशत_पूर्ण] [असली] NULL, [अनुमानित_completion_time] [bigint] NULL, [cpu_time] [int] NULL, [total_elapsed_time] [int] NULL, [scheduler_id] [ int] NULL, [task_address] [varbinary](8) न्यूल, [पढ़ता है] [बिगिन्ट] न्यूल, [लिखता है] [बिगिंट] न्यूल, [लॉजिकल_रीड्स] [बिगिन्ट] न्यूल, [टेक्स्ट_साइज] [इंट] न्यूल, [भाषा] [नवरचर] (128) न्यूल, [डेट_फॉर्मैट] [नवरचर ](3) NULL, [date_first] [छोटा] NULL, [quoted_identifier] [बिट] NULL, [arithabort] [बिट] NULL, [ansi_null_dflt_on] [बिट] NULL, [ansi_defaults] [बिट] NULL, [ansi_warnings] [ बिट] NULL, [ansi_padding] [बिट] NULL, [ansi_nulls] [बिट] NULL, [concat_null_yields_null] [बिट] NULL, [transaction_isolation_level] [स्मॉलिंट] NULL, [lock_timeout] [int] NULL, [deadlock_priority] [int] NULL, [row_count] [bigint] NULL, [prev_error] [int] NULL, [nest_level] [int] NULL, [granted_query_memory] [int] NULL, [executing_managed_code] [bit] NULL, [group_id] [int] NULL, [query_hash] [बाइनरी] (8) NULL, [query_plan_hash] [बाइनरी] (8) NULL, [most_recent_session_id] [int] NULL, [connect_time] [डेटाटाइम] NULL, [net_transport] [nvarchar] (40) NULL, [ प्रोटोकॉल_टाइप] [nvarchar](40) NULL, [प्रोटोकॉल_वर्जन] [int] NULL, [endpoint_id] [int] NULL, [encrypt_option ] [nvarchar](40) NULL, [auth_scheme] [nvarchar](40) NULL, [node_affinity] [छोटा सा] NULL, [num_reads] [int] NULL, [num_writes] [int] NULL, [last_read] [डेटाटाइम] NULL, [last_write] [datetime] NULL, [net_packet_size] [int] NULL, [client_net_address] [varchar](48) NULL, [client_tcp_port] [int] NULL, [local_net_address] [varchar](48) NULL, [local_tcp_port ] [int] NULL, [parent_connection_id] [अद्वितीय पहचानकर्ता] NULL, [most_recent_sql_handle] [varbinary] (64) NULL, [login_time] [datetime] NULL, [host_name] [nvarchar](128) NULL, [program_name] [nvarchar] (128) NULL, [host_process_id] [int] NULL, [client_version] [int] NULL, [client_interface_name] [nvarchar] (32) NULL, [security_id] [varbinary] (85) NULL, [login_name] [nvarchar]( 128) NULL, [nt_domain] [nvarchar](128) NULL, [nt_user_name] [nvarchar](128) NULL, [memory_usage] [int] NULL, [total_scheduled_time] [int] NULL, [last_request_start_time] [datetime] NULL, [last_request_end_time] [डेटाटाइम] न्यूल, [is_user_process] [बिट] न्यूल, [ऑरिजिनल_सेक urity_id] [varbinary] (85) NULL, [origin_login_name] [nvarchar](128) NULL, [last_successful_logon] [datetime] NULL, [last_unsuccessful_logon] [datetime] NULL, [unsuccessful_logons] [bigint] NULL, [Authenticating_database_id] ] NULL, [InsertUTCDate] [डेटाटाइम] नॉट न्यूल, [EndRegUTCDate] [डेटाटाइम] NULL) [प्राथमिक] गोल्टर टेबल [srv] पर। ONGOCREATE CLUSTERED INDEX [indRequest] ऑन [srv]। [plan_handle] ASC, [transaction_id] ASC, [connection_id] ASC) के साथ (PAD_INDEX =OFF, STATISTICS_NORECOMPUTE =OFF, SORT_IN_TEMPDB =OFF, DROP_EXISTING =OFF, ONLINE =OFF, ALLOW_ROW_LOCKS] [SET_LOCKS =OFF, ALLOW_ROW_LOCKS] सेट करें ANSI_PADDING ONGOCREATE NONCLUSTERED INDEX [indPlanQuery] [srv] पर। [RequestStatistics]( [plan_handle ] एएससी, [एसक्यूएल_हैंडल] एएससी) जहां ([एसक्यूएल_हैंडल] शून्य नहीं है और [प्लान_हैंडल] शून्य नहीं है) के साथ (PAD_INDEX =OFF, STATISTICS_NORECOMPUTE =OFF, SORT_IN_TEMPDB =OFF, DROP_EXISTING =OFF, ONLINE_ RO W_ OFF, सभी ALLOW_PAGE_LOCKS =ON) ऑन [PRIMARY]GO

    [/विस्तार]

    इसी तरह, हम [srv] के लिए एक तालिका बनाते हैं। [RequestStatisticsArchive] संग्रह।

  4. कुल दैनिक आंकड़ों के साथ तालिका
    उपयोग [DATABASE_NAME]GOSET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE TABLE [srv]। [TSQL_DAY_Statistics]( [command] [nvarchar](32) NOT NULL, [DBName] [nvarchar](128) न्यूल नहीं, [प्लानहैंडल] [वर्बिनरी] (64) नॉट न्यूल, [एसक्लहैंडल] [वर्बिनरी] (64) नॉट न्यूल, [एक्जिक्यूशन_काउंट] [बिगिन्ट] नॉट न्यूल, [मिन_वेट_टाइमसेक] [दशमलव] (23, 8) न्यूल नहीं, [min_estimated_completion_timeSec] [दशमलव] (23, 8) शून्य नहीं, [min_cpu_timeSec] [दशमलव] (23, 8) शून्य नहीं, [min_total_elapsed_timeSec] [दशमलव] (23, 8) शून्य नहीं, [min_lock_timeoutSec] [दशमलव] (23 , 8) न्यूल नहीं, [max_wait_timeSec] [दशमलव] (23, 8) न्यूल नहीं, [max_estimated_completion_timeSec] [दशमलव] (23, 8) न्यूल नहीं, [max_cpu_timeSec] [दशमलव] (23, 8) न्यूल नहीं, [max_total_elapsed_timeSec ] [दशमलव] (23, 8) शून्य नहीं, [max_lock_timeoutSec] [दशमलव] (23, 8) शून्य नहीं, [तिथि] [तारीख] शून्य नहीं) [प्राथमिक] गोल्टर टेबल [srv] पर। [TSQL_DAY_Statistics] प्रतिबंध जोड़ें [DF_TSQL_DAY_Statistics_DATE] डिफ़ॉल्ट (getutcdate ()) के लिए [दिनांक] गैर-अनुक्रमित अनुक्रमणिका बनाएं [सूचकांक] [srv] को। [TSQL_DAY_Statistics] ( [दिनांक] ASC) के साथ (PAD_INDEX =OFF, STATISTICS_NORECOMPUTE =OFF, SORT_IN_TEMPDB =बंद, DROP_ALL_OW_ LOCKS =बंद, बंद, LOCKS =बंद, बंद, ONAGE, LOCK_ =चालू) चालू [प्राथमिक]जाएं
  5. सक्रिय क्वेरी के रिकॉर्ड किए गए स्नैपशॉट द्वारा देखें
    [विस्तार शीर्षक ="कोड"]

    उपयोग [DATABASE_NAME]GOSET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE दृश्य [srv]। [कमांड] के रूप में सिरिलिक_जनरल_सीआई_एएस को मिलाएं। Total_elapsed_timeSec] ,DB_NAME(rs.[database_id]) [DBName], rs.[is_user_process], rs.[login_name] को [login_name] ,rs. [होस्ट_नाम] सिरिलिक_जनरल_सीआई_एएस को [होस्ट_नाम], वर्ग के रूप में मिलाएं। ], रुपये। [प्लान_हैंडल], रुपये। [user_id], रुपये। [कनेक्शन_आईडी], रुपये। स्टेटमेंट_स्टार्ट_ऑफसेट] - वर्तमान में निष्पादित पैकेज या संग्रहीत कार्यविधि में वर्णों की संख्या जिसमें वर्तमान विवरण चलाया जाता है। क्वेरी के लिए वर्तमान में निष्पादित विवरण प्राप्त करने के लिए इसे sql_handle, Statement_end_offset और sys.dm_exec_sql_text जैसे गतिशील प्रबंधन कार्यों के साथ उपयोग किया जा सकता है। NULL मानों की अनुमति है। ,rs.[statement_end_offset] - वर्तमान में निष्पादित पैकेज या संग्रहीत प्रक्रिया में वर्णों की संख्या, जिसमें वर्तमान विवरण पूरा किया गया था। क्वेरी के लिए वर्तमान में निष्पादित विवरण प्राप्त करने के लिए इसे sql_handle, Statement_end_offset और sys.dm_exec_sql_text जैसे गतिशील प्रबंधन कार्यों के साथ उपयोग किया जा सकता है। NULL मानों की अनुमति है। ,rs.[wait_type] [wait_type]--waiting type ,rs.[wait_time]--के रूप में Cyrillic_General_CI_AS कोलेट करें। NULL मानों की अनुमति नहीं है। ,राउंड(कास्ट(rs.[wait_time] as दशमलव(18,3))/1000, 3) as [wait_timeSec] ,rs.[last_wait_type] Collate Cyrillic_General_CI_AS as [last_wait_type]--अगर क्वेरी पहले ब्लॉक की गई थी, तो कॉलम नवीनतम प्रतीक्षा समय का प्रकार शामिल है। NULL मानों की अनुमति नहीं है। ,rs.[wait_resource] Cyrillic_General_CI_AS को [wait_resource] के रूप में कोलेट करें - यदि क्वेरी वर्तमान में अवरुद्ध है, तो कॉलम उस संसाधन को इंगित करता है जिसके लिए क्वेरी जारी होने की प्रतीक्षा कर रही है। NULL मानों की अनुमति नहीं है। ,rs.[open_transaction_count]--इस क्वेरी के लिए उपलब्ध लेन-देन की संख्या। NULL मानों की अनुमति नहीं है। ,rs.[open_resultset_count] -- दी गई क्वेरी के लिए उपलब्ध परिणामी सेटों की संख्या। NULL मानों की अनुमति नहीं है। ,rs.[transaction_id]--वर्तमान में निष्पादित क्वेरी का एक लेनदेन पहचानकर्ता। NULL मानों की अनुमति नहीं है। , रुपये। ]-सीपीयू समय (एमएस में) क्वेरी को निष्पादित करने में खर्च किया गया। NULL मानों की अनुमति नहीं है। ,राउंड(कास्ट(rs.[cpu_time] दशमलव(18,3))/1000, 3) के रूप में [cpu_timeSec] ,rs.[total_elapsed_time] - अनुरोध प्राप्त होने के बाद से कुल समय बीत गया (ms में)। NULL मानों की अनुमति नहीं है। ,rs.[scheduler_id] - अनुसूचक का एक पहचानकर्ता जो दी गई क्वेरी की योजना बनाता है। NULL मानों की अनुमति नहीं है। ,rs.[task_address] - इस अनुरोध से संबंधित कार्य के लिए समर्पित मेमोरी ब्लॉक का पता। NULL मानों की अनुमति है। , rs। [पढ़ता है] - दी गई क्वेरी द्वारा किए गए पढ़ने की संख्या। NULL मानों की अनुमति है। ,rs.[लिखता है] - दी गई क्वेरी द्वारा किए गए लेखन की संख्या। NULL मानों की अनुमति नहीं है। ,rs.[logical_reads] -- दी गई क्वेरी द्वारा निष्पादित लॉजिकल रीड की संख्या। NULL मानों की अनुमति नहीं है। ,rs.[text_size] -- दी गई क्वेरी के लिए TEXTSIZE पैरामीटर सेट करना। NULL मानों की अनुमति नहीं है। ,rs.[भाषा] [भाषा] के रूप में सिरिलिक_जनरल_सीआई_एएस का मिलान करें -- दी गई क्वेरी के लिए भाषा सेट करना। NULL मानों की अनुमति है। ,rs.[date_format] Cyrillic_General_CI_AS को [date_format] के रूप में कोलेट करें -- दी गई क्वेरी के लिए DATEFORMAT पैरामीटर सेट करना। NULL मानों की अनुमति है। ,rs.[date_first] -- दी गई क्वेरी के लिए DATEFIRST पैरामीटर सेट करना। NULL मानों की अनुमति नहीं है। , रुपये। [उद्धृत_पहचानकर्ता], रुपये। .[transaction_isolation_level] -- दिए गए प्रश्न के लिए लेन-देन अलगाव स्तर। NULL मानों की अनुमति नहीं है (0 निर्दिष्ट नहीं है, 1 - 5 मान लेन-देन अलगाव स्तर के आरोही क्रम में सेट हैं)। ,rs.[lock_timeout] -- दी गई क्वेरी के लिए लॉक टाइमआउट (ms में)। NULL मानों की अनुमति नहीं है। ,राउंड(कास्ट(rs.[lock_timeout] दशमलव(18,3))/1000, 3) के रूप में [lock_timeoutSec] ,rs.[deadlock_priority] -- दी गई क्वेरी के लिए DEADLOCK_PRIORITY पैरामीटर का मान। NULL मानों की अनुमति नहीं है। ,rs.[row_count]--इस क्वेरी के लिए क्लाइंट को लौटाई गई पंक्तियों की संख्या। NULL मानों की अनुमति नहीं है। ,rs.[prev_error] - क्वेरी को निष्पादित करते समय पिछली त्रुटि उत्पन्न हुई। NULL मानों की अनुमति नहीं है। ,rs.[nest_level]-- दी गई क्वेरी के लिए कोड नेस्टिंग स्तर का मौजूदा स्तर निष्पादित किया गया। NULL मानों की अनुमति नहीं है। ,rs.[granted_query_memory] - क्वेरी को निष्पादित करने के लिए पृष्ठों की संख्या। NULL मानों की अनुमति नहीं है। ,rs.[executing_managed_code] - इंगित करता है कि क्या दी गई क्वेरी वर्तमान में CLR ऑब्जेक्ट कोड (उदाहरण के लिए, प्रक्रिया, प्रकार, या ट्रिगर) निष्पादित कर रही है। यह टॉगल तब सेट किया जाता है जब CLR ऑब्जेक्ट स्टैक में होता है, तब भी जब ट्रांज़ैक्ट-एसक्यूएल कोड को परिवेश से कॉल किया जाता है। NULL मानों की अनुमति नहीं है। ,rs.[group_id]--कार्यभार समूह का आईडी जिससे यह क्वेरी संबंधित है। NULL मानों की अनुमति नहीं है। ,rs.[query_hash]--बाइनरी हैश-वैल्यू की गणना क्वेरी के लिए की जाती है और समान तर्क वाले प्रश्नों की पहचान करने के लिए उपयोग की जाती है। केवल उनके शाब्दिक मूल्यों में भिन्न प्रश्नों के लिए सांख्यिकीय संसाधनों के उपयोग को निर्धारित करने के लिए क्वेरी हैश का उपयोग करना संभव है। ,rs.[query_plan_hash]--बाइनरी हैश-वैल्यू की गणना क्वेरी निष्पादन योजना के लिए की जाती है और समान निष्पादन योजनाओं की पहचान करने के लिए उपयोग की जाती है। समान निष्पादन योजनाओं के साथ कुल क्वेरी लागत का पता लगाने के लिए योजना हैश का उपयोग करना संभव है। [last_request_start_time], रुपये। .[सुरक्षा_आईडी] ,आरएस। local_tcp_port] ,rs.[local_net_address] [local_net_address] ,rs.[client_tcp_port] ,rs. readuncommitted) इनर जॉइन [srv]। [PlanQuery] rs पर pq के रूप में। .[SqlHandle]=pq.[SqlHandle] यूनियन सभी SELECT rs.[status] Collate Cyrillic_General_ CI_AS, rs। [InsertUTCDate], rs। )/1000, 3) [total_elapsed_timeSec] ,DB_NAME(rs.[database_id]) के रूप में Cyrillic_General_CI_AS को [DBName] ,rs.[is_user_process] ,rs.[login_name] Collate Cyrillic_General_CI_AS ,rs. [होस्ट_नाम] सिरिलिक_जनरल_सीआई_एएस, वर्ग। [टीएसक्यूएल] कोलेट सिरिलिक_जनरल_सीआई_एएस--, (सेलेक्ट टॉप (1) टेक्स्ट को sys.dm_exec_sql_text([sql_handle]) से [TSQL] ,pq.[QueryPlan] ,rs.[plan_handle] के रूप में, rs.[user_id] ,rs.[connection_id] ,rs.[database_id] ,rs.[sql_handle] ,rs.[statement_start_offset] - वर्तमान में निष्पादित पैकेज या संग्रहीत कार्यविधि में वर्णों की संख्या जिसमें वर्तमान स्टेटमेंट चलाया जाता है . क्वेरी के लिए वर्तमान में निष्पादित विवरण प्राप्त करने के लिए इसका उपयोग गतिशील प्रबंधन कार्यों, जैसे sql_handle, Statement_end_offset, और sys.dm_exec_sql_text के साथ किया जा सकता है। NULL मानों की अनुमति है। ,rs.[statement_end_offset] - वर्तमान में निष्पादित पैकेज या संग्रहीत प्रक्रिया में वर्णों की संख्या जिसमें वर्तमान विवरण पूरा किया गया था। क्वेरी के लिए वर्तमान में निष्पादित विवरण प्राप्त करने के लिए इसका उपयोग गतिशील प्रबंधन कार्यों, जैसे sql_handle, Statement_end_offset, और sys.dm_exec_sql_text के साथ किया जा सकता है। NULL मानों की अनुमति है। ,rs.[wait_type] Collate Cyrillic_General_CI_AS--वेटिंग टाइप ,rs.[wait_time]--यदि क्वेरी वर्तमान में ब्लॉक की गई है, तो कॉलम में वर्तमान प्रतीक्षा समय (ms में) होता है। NULL मानों की अनुमति है। ,राउंड(कास्ट(rs.[wait_time] as दशमलव(18,3))/1000, 3) as [wait_timeSec] ,rs.[last_wait_type] Collate Cyrillic_General_CI_AS--यदि क्वेरी को पहले ब्लॉक किया गया था, तो कॉलम में किस प्रकार का होता है नवीनतम प्रतीक्षा। NULL मानों की अनुमति नहीं है। ,rs.[wait_resource] Collate Cyrillic_General_CI_AS--यदि क्वेरी वर्तमान में अवरुद्ध है, तो कॉलम में वह संसाधन है जिसके लिए क्वेरी जारी होने की प्रतीक्षा कर रही है। NULL मानों की अनुमति नहीं है। ,rs.[open_transaction_count]--दिए गए प्रश्न के लिए उपलब्ध लेनदेन की संख्या। NULL मानों की अनुमति नहीं है। ,rs.[open_resultset_count] -- दी गई क्वेरी के लिए उपलब्ध परिणामी सेटों की संख्या। NULL मानों की अनुमति नहीं है। ,rs.[transaction_id] -- लेन-देन का पहचानकर्ता जिसमें क्वेरी निष्पादित की जा रही है। NULL मानों की अनुमति नहीं है। , रुपये। ]-सीपीयू समय (एमएस में) क्वेरी निष्पादन पर खर्च किया गया। NULL मानों की अनुमति नहीं है। ,राउंड(कास्ट(rs.[cpu_time] दशमलव(18,3))/1000, 3) के रूप में [cpu_timeSec] ,rs.[total_elapsed_time] - अनुरोध प्राप्त होने के बाद से कुल समय बीत गया (ms में)। NULL मानों की अनुमति नहीं है। ,rs.[scheduler_id] -- अनुसूचक का पहचानकर्ता जो दी गई क्वेरी की योजना बनाता है। NULL मानों की अनुमति नहीं है। ,rs.[task_address] - इस क्वेरी से संबंधित कार्य के लिए समर्पित मेमोरी ब्लॉक का पता। NULL मानों की अनुमति है। , rs। [पढ़ता है] - दी गई क्वेरी द्वारा किए गए पढ़ने की संख्या। NULL मानों की अनुमति नहीं है। ,rs.[लिखता है] - दी गई क्वेरी द्वारा किए गए लेखन की संख्या। NULL मानों की अनुमति नहीं है। ,rs.[logical_reads] -- दी गई क्वेरी द्वारा किए गए लॉजिक रीड की संख्या। NULL मानों की अनुमति नहीं है। ,rs.[text_size] -- दी गई क्वेरी के लिए TEXTSIZE पैरामीटर सेट करना। NULL मानों की अनुमति नहीं है। ,rs.[language] Collate Cyrillic_General_CI_AS-- दी गई क्वेरी के लिए भाषा सेट करना। NULL मानों की अनुमति है। ,rs.[date_format] Collate Cyrillic_General_CI_AS--दी गई क्वेरी के लिए DATEFORMAT पैरामीटर सेट करना। NULL मानों की अनुमति है। ,rs.[date_first] -- दी गई क्वेरी के लिए DATEFIRST पैरामीटर सेट करना। NULL मानों की अनुमति नहीं है। , रुपये। [उद्धृत_पहचानकर्ता], रुपये। .[transaction_isolation_level]--Isolation स्तर जो दिए गए प्रश्न के लिए लेनदेन के साथ बनाया गया था। NULL मानों की अनुमति नहीं है (0 निर्दिष्ट नहीं है, 1 - 5 मान लेन-देन अलगाव स्तर पर बढ़ते हुए सेट हैं)। ,rs.[lock_timeout] -- दी गई क्वेरी के लिए लॉक टाइमआउट (ms में)। NULL मानों की अनुमति नहीं है। ,राउंड(कास्ट(rs.[lock_timeout] दशमलव(18,3))/1000, 3) के रूप में [lock_timeoutSec] ,rs.[deadlock_priority] -- दी गई क्वेरी के लिए DEADLOCK_PRIORITY पैरामीटर का मान। NULL मान की अनुमति नहीं है। ,rs.[row_count] -- दी गई क्वेरी के लिए क्लाइंट को लौटाई गई पंक्तियों की संख्या। NULL मान की अनुमति नहीं है। ,rs.[prev_error] - क्वेरी को निष्पादित करते समय पिछली त्रुटि उत्पन्न हुई। NULL मानों की अनुमति नहीं है। ,rs.[nest_level]--दिए गए प्रश्न के लिए वर्तमान कोड नेस्टिंग स्तर निष्पादित किया गया है। NULL मान की अनुमति नहीं है। ,rs.[granted_query_memory] - क्वेरी को निष्पादित करने के लिए पृष्ठों की संख्या। NULL मान की अनुमति नहीं है। ,rs.[executing_managed_code] -- इंगित करता है कि क्या दी गई क्वेरी वर्तमान में CLR ऑब्जेक्ट कोड (उदाहरण के लिए, प्रक्रिया, प्रकार, या ट्रिगर) निष्पादित कर रही है। यह टॉगल उस समय के दौरान सेट किया जाता है जब CLR ऑब्जेक्ट स्टैक में होता है, तब भी जब ट्रांजैक्ट-एसक्यूएल कोड को पर्यावरण से कॉल किया जाता है। NULL मानों की अनुमति नहीं है। ,rs.[group_id]--कार्यभार समूह का आईडी जिससे यह क्वेरी संबंधित है। NULL मानों की अनुमति नहीं है। ,rs.[query_hash]--बाइनरी हैश-वैल्यू की गणना क्वेरी के लिए की जाती है और समान तर्क वाले प्रश्नों की पहचान करने के लिए उपयोग की जाती है। केवल उनके शाब्दिक मूल्यों में भिन्न प्रश्नों के लिए सांख्यिकीय संसाधनों के उपयोग को निर्धारित करने के लिए क्वेरी हैश का उपयोग करना संभव है। ,rs.[query_plan_hash]--बाइनरी हैश-वैल्यू की गणना क्वेरी निष्पादन योजना के लिए की जाती है और समान निष्पादन योजनाओं की पहचान करने के लिए उपयोग की जाती है। समान निष्पादन योजनाओं के साथ कुल क्वेरी लागत का पता लगाने के लिए योजना हैश का उपयोग करना संभव है। [last_request_start_time], रुपये। क्लाइंट_इंटरफेस_नाम] कोलेट सिरिलिक_जनरल_सीआई_एएस, आरएस। [क्लाइंट_वर्जन], आरएस। [होस्ट_प्रोसेस_आईडी], आरएस। [लॉगिन_टाइम], आरएस। [क्लाइंट_टीसीपी_पोर्ट], आरएस। [क्लाइंट_नेट_एड्रेस] सिरिलिक_जनरल_सीआई_एएस, आरएस। [एंडरेगयूटीसीडेट] [एसआरवी] से। [रिक्वेस्टस्टैटिस्टिक्सआर्काइव] आरएस के साथ (रीडअनकमिटेड) इनर जॉइन [एसआरवी]। [प्लानक्वेरी] आरएस पर पीक्यू के रूप में। pq.[PlanHandle] और rs.[sql_handle]=pq.[SqlHandle] इनर जॉइन [srv]।[SQLQuery] sq पर sq.[SqlHandle]=pq.[SqlHandle]GO

    [/विस्तार]

  6. वर्तमान सक्रिय अनुरोधों के चयन द्वारा देखें:
    [विस्तार शीर्षक ="कोड"]

    उपयोग [DATABASE_NAME]GOSET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE दृश्य [inf]। [session_id] ,ER.[blocking_session_id] ,ER.[request_id] ,ER.[start_time] ,ER.[status] ,ER.[command] ,ER.[percent_complete] ,DB_Name(coalesce(ER.[database_id]) , ES.[database_id])) [DBName] के रूप में, (sys.dm_exec_sql_text(ER.[sql_handle]) से शीर्ष(1) टेक्स्ट का चयन करें) [TSQL] के रूप में, (sys.dm_exec_query_plan से शीर्ष (1) [query_plan] का चयन करें। (ईआर। [प्लान_हैंडल])) [क्वेरीप्लान], ईआर। [वेट_टाइप], ईएस। [लॉगिन_टाइम], ईएस। [होस्ट_नाम], ईएस। [प्रोग्राम_नाम], ईआर। [वेट_टाइम], ईआर। [last_wait_type], ईआर के रूप में। [प्रतीक्षा_संसाधन], ईआर। sed_time], ईआर। [अनुसूचक_आईडी], ईआर। [कार्य_पता], ईआर। [पढ़ता है], ईआर। [लिखता है], ईआर। [लॉजिकल_रीड्स], ईआर। [text_size], ईआर। [भाषा], ईआर। [date_format] ,ईआर। [concat_null_yields_null], ईआर। [लेन-देन_आइसोलेशन_लेवल], ईआर। एक्जीक्यूटिंग_मैनेज्ड_कोड], ईआर। [ग्रुप_आईडी], ईआर। [क्वेरी_हैश], ईआर। [क्वेरी_प्लान_हैश], ईसी। ,EC.[endpoint_id] ,EC.[encrypt_option] ,EC.[auth_scheme] ,EC.[node_affinity] ,EC.[num_reads] ,ईसी। [parent_connection_id], ईसी। nt_user_name] ,ES। ,ES.[last_unsuccessful_logon] ,ES.[unsuccessful_logons] ,ES.[authenticating_database_id] ,ER.[sql_handle] ,ER.[statement_start_offset], ER. , ES.[database_id]) के रूप में [database_id] ,ER.[user_id] ,ER.[connection_id] s से ys.dm_exec_requests ER के साथ (readuncommitted) ES.session_id =ER.session_id पर sys.dm_exec_sessions ES के साथ (readuncommitted) के साथ राइट जॉइन करें। [session_id] ,[blocking_session_id] ,[request_id] ,[start_time] ,[status] ,[command] ,[percent_complete] ,[DBName] ,[TSQL] ,[QueryPlan] ,[wait_type] ,[login_time] ,[host_name ] ,[program_name] ,[wait_time] ,[last_wait_type] ,[wait_resource] ,[open_transaction_count] ,[open_resultset_count] ,[transaction_id] ,[context_info] ,[estimated_completion_time] , [total_e] [कार्य_पता], [पढ़ता है], [लिखता है], [तार्किक_पढ़ता है], [पाठ_आकार], [भाषा], [दिनांक_प्रारूप], [दिनांक_पहला], [उद्धृत_पहचानकर्ता], [अरिथबॉर्ट], [ansi_null_dflt_ पर] ,[ansi_defaults] ,[ansi_warnings] ,[ansi_padding] ,[ansi_nulls] ,[concat_null_yields_null] ,[transaction_isolation_level] ,[lock_timeout] ,[deadlock_priority], , [executing_managed_code], [group_id], [query_hash], [query_plan_hash], [most_recent_session_id], [connect_time], [net_transport], [प्रोटोकॉल_टाइप], [प्रोटोकॉल_संस्करण], [एंडपॉइंट_ऑप्शन], [ node_affinity] ,[num_reads] ,[num_writes] ,[last_read] ,[last_write] ,[net_packet_size] ,[client_net_address] ,[client_tcp_port] ,[local_net_address] , [local_tcp_port] , , [क्लाइंट_वर्जन], [क्लाइंट_इंटरफेस_नाम], [सुरक्षा_आईडी], [लॉगिन_नाम], [एनटी_डोमेन] , [nt_user_name], [मेमोरी_यूसेज], [कुल_शेड्यूल_टाइम], [last_request_start_time], [last_request_end_time], [is_user_process], [ऑरिजिनल_सिक्योरिटी_आईडी], [ओरिजिनल_लॉगिन_नाम], [last_successful, [last_successful], सफल_लॉगऑन] sql_handle] ,[statement_start_offset] ,[statement_end_offset] ,[plan_handle] ,[database_id] ,[user_id] ,[connection_id] tbl0 से जहां [status] in ('निलंबित', 'चल रहा है', 'runnable')), tbl_group as (tbl से [blocking_session_id] चुनें जहां [blocking_session_id]<>0 group by [blocking_session_id]) चुनें [session_id] ,[blocking_session_id] ,[request_id] ,[start_time] ,[status] ,[command] ,[percent_complete] ,[ डीबीनाम], [टीएसक्यूएल], [क्वेरीप्लान], [प्रतीक्षा_प्रकार], [लॉगिन_टाइम], [होस्ट_नाम], [प्रोग्राम_नाम], [प्रतीक्षा_समय], [अंतिम_प्रतीक्षा_प्रकार], [प्रतीक्षा_संसाधन], [ओपन_ट्रांसा ction_count] ,[open_resultset_count] ,[transaction_id] ,[context_info] ,[estimated_completion_time] ,[cpu_time] ,[total_elapsed_time] ,[scheduler_id] ,[task_address] ,[reads] ,[_reads] , [text_address] , [भाषा] , [date_format] , [date_first] , [उद्धृत_पहचानकर्ता] , [arithabort] ,[ansi_null_dflt_on] ,[ansi_defaults] ,[ansi_warnings] ,[ansi_padding] ,[ansi_nulls] ,[concat_nulls] ,[concat_nulls] ,[concat_nulls] ,[concat_nulls] लॉक_टाइमआउट], [डेडलॉक_प्राथमिकता], [पंक्ति_काउंट], [पिछला_त्रुटि], [घोंसला_स्तर], [अनुदान_क्वेरी_मेमोरी], [निष्पादित_प्रबंधित_कोड], [समूह_आईडी], [क्वेरी_हैश], [समय], नेट_ट्रांसपोर्ट], [अधिकतम_आईडी], , [प्रोटोकॉल_टाइप], [प्रोटोकॉल_वर्जन], [एंडपॉइंट_आईडी], [एन्क्रिप्ट_ऑप्शन], [ऑथ_स्कीम] , [नोड_एफिनिटी], [num_reads], [num_writes], [last_read], [last_write], [net_packet_size], [client_net_address], [client_tcp_port], [लोकल_नेट_एड्रेस], [लोकल_टीसीपी_पोर्ट], host_process_id] ,[client_version] ,[client_interface_name] ,[security_id] ,[login_name] ,[nt_domain] ,[nt_user_name] ,[memory_usage] ,[total_scheduled_time], , [ओरिजिनल_लॉगिन_नाम], [last_successful_logon], [last_unsuccessful_logon], [unsuccessful_logons], [authenticating_database_id], [sql_handle], [statement_start_offset], [statement_end_offset], [unsuccessful_logon], सभी चयन करें tbl0.[session_id], tbl0.[blocking_session_id], tbl0.[request_id], tbl0.[ start_time] ,tbl0.[status] ,tbl0.[command] ,tbl0.[percent_complete] ,tbl0.[DBName] ,tbl0.[TSQL] ,tbl0.[QueryPlan] ,tbl0.[wait_type] ,tbl0.[login_time] ,tbl0.[host_name], tbl0। .[context_info] ,tbl0.[estimated_completion_time] ,tbl0.[cpu_time] ,tbl0.[total_elapsed_time] ,tbl0.[scheduler_id] ,tbl0.[task_address] ,tbl0.[reads] ,tbl0.[writes] ,tbl0.[ logical_reads] ,tbl0.[text_size] ,tbl0.[language] ,tbl0.[date_format] ,tbl0.[date_first] ,tbl0.[quoted_identifier] ,tbl0.[arithabort] ,tbl0.[ansi_null_dflt_on] ,tbl0.[ansi_defaults] ,tbl0.[ansi_warnings] ,tbl0.[ansi_padding] ,tbl0.[ansi_nulls] ,tbl0.[concat_null_yields_null] ,tbl0.[transaction_isolation_level] ,tbl0.[lock_timeout] ,tbl0.[deadlock_priority] ,tbl0.[row_count] ,tbl0.[prev_error] ,tbl0.[nest_level] ,tbl0.[granted_query_memory] ,tbl0.[executing_managed_code] ,tbl0.[group_id] ,tbl0.[query_hash] ,tbl0.[query_plan_hash] ,tbl0.[most_recent_session_id] ,tbl0.[connect_time] ,tbl0.[net_transport] ,tbl0.[protocol_type] ,tbl0.[protocol_version] ,tbl0.[endpoint_id] ,tbl0.[encrypt_option] ,tbl0.[auth_scheme] ,tbl0.[node_affinity] ,tbl0.[num_reads] ,tbl0.[num_writes] ,tbl0.[last_read] ,tbl0.[last_write] ,tbl0.[net_packet_size] ,tbl0.[client_net_address] ,tbl0.[client_tcp_port] ,tbl0.[local_net_address] ,tbl0.[local_tcp_port] ,tbl0.[parent_connection_id] ,tbl0.[most_recent_sql_handle] ,tbl0.[host_process_id] ,tbl0.[client_version] ,tbl0.[client_interface_name] ,tbl0.[se curity_id] ,tbl0.[login_name] ,tbl0.[nt_domain] ,tbl0.[nt_user_name] ,tbl0.[memory_usage] ,tbl0.[total_scheduled_time] ,tbl0.[last_request_start_time] ,tbl0.[last_request_end_time] ,tbl0.[is_user_process] ,tbl0.[original_security_id] ,tbl0.[original_login_name] ,tbl0.[last_successful_logon] ,tbl0.[last_unsuccessful_logon] ,tbl0.[unsuccessful_logons] ,tbl0.[authenticating_database_id] ,tbl0.[sql_handle] ,tbl0.[statement_start_offset] ,tbl0.[statement_end_offset] ,tbl0.[plan_handle] ,tbl0.[database_id] ,tbl0.[user_id] ,tbl0.[connection_id]from tbl_group as tginner join tbl0 on tg.blocking_session_id=tbl0.session_id;GO

    [/expand]

To take a snapshot of active queries and save it to the tables described above, create a stored procedure:

Example of implementing a stored procedure to collect snapshots of active queries

[expand title=”Code”]

USE [DATABASE_NAME]GOSET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE PROCEDURE [srv].[AutoStatisticsActiveRequests]ASBEGIN SET NOCOUNT ON; SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; declare @tbl0 table ( [SQLHandle] [varbinary](64) NOT NULL, [TSQL] [nvarchar](max) NULL ); declare @tbl1 table ( [PlanHandle] [varbinary](64) NOT NULL, [SQLHandle] [varbinary](64) NOT NULL, [QueryPlan] [xml] NULL ); declare @tbl2 table ( [session_id] [smallint] NOT NULL, [request_id] [int] NULL, [start_time] [datetime] NULL, [status] [nvarchar](30) NULL, [command] [nvarchar](32) NULL, [sql_handle] [varbinary](64) NULL, [statement_start_offset] [int] NULL, [statement_end_offset] [int] NULL, [plan_handle] [varbinary](64) NULL, [database_id] [smallint] NULL, [user_id] [int] NULL, [connection_id] [uniqueidentifier] NULL, [blocking_session_id] [smallint] NULL, [wait_type] [nvarchar](60) NULL, [wait_time] [int] NULL, [last_wait_type] [nvarchar](60) NULL, [wait_resource] [nvarchar](256) NULL, [open_transaction_count] [int] NULL, [open_resultset_count] [int] NULL, [transaction_id] [bigint] NULL, [context_info] [varbinary](128) NULL, [percent_complete] [real] NULL, [estimated_completion_time] [bigint] NULL, [cpu_time] [int] NULL, [total_elapsed_time] [int] NULL, [scheduler_id] [int] NULL, [task_address] [varbinary](8) NULL, [reads] [bigint] NULL, [writes] [bigint] NULL, [logical_reads] [bigint] NULL, [text_size] [int] NULL, [language] [nvarchar](128) NULL, [date_format] [nvarchar](3) NULL, [date_first] [smallint] NULL, [quoted_identifier] [bit] NULL, [arithabort] [bit] NULL, [ansi_null_dflt_on] [bit] NULL, [ansi_defaults] [bit] NULL, [ansi_warnings] [bit] NULL, [ansi_padding] [bit] NULL, [ansi_nulls] [bit] NULL, [concat_null_yields_null] [bit] NULL, [transaction_isolation_level] [smallint] NULL, [lock_timeout] [int] NULL, [deadlock_priority] [int] NULL, [row_count] [bigint] NULL, [prev_error] [int] NULL, [nest_level] [int] NULL, [granted_query_memory] [int] NULL, [executing_managed_code] [bit] NULL, [group_id] [int] NULL, [query_hash] [binary](8) NULL, [query_plan_hash] [binary](8) NULL, [most_recent_session_id] [int] NULL, [connect_time] [datetime] NULL, [net_transport] [nvarchar](40) NULL, [protocol_type] [nvarchar](40) NULL, [protocol_version] [int] NULL, [endpoint_id] [int] NULL, [encrypt_option] [nvarchar](40) NULL, [auth_scheme] [nvarchar](40) NULL, [node_affinity] [smallint] NULL, [num_reads] [int] NULL, [num_writes] [int] NULL, [last_read] [datetime] NULL, [last_write] [datetime] NULL, [net_packet_size] [int] NULL, [client_net_address] [varchar](48) NULL, [client_tcp_port] [int] NULL, [local_net_address] [varchar](48) NULL, [local_tcp_port] [int] NULL, [parent_connection_id] [uniqueidentifier] NULL, [most_recent_sql_handle] [varbinary](64) NULL, [login_time] [datetime] NULL, [host_name] [nvarchar](128) NULL, [program_name] [nvarchar](128) NULL, [host_process_id] [int] NULL, [client_version] [int] NULL, [client_interface_name] [nvarchar](32) NULL, [security_id] [varbinary](85) NULL, [login_name] [nvarchar](128) NULL, [nt_domain] [nvarchar](128) NULL, [nt_user_name] [nvarchar](128) NULL, [memory_usage] [int] NULL, [total_scheduled_time] [int] NULL, [last_request_start_time] [datetime] NULL, [last_request_end_time] [datetime] NULL, [is_user_process] [bit] NULL, [original_security_id] [varbinary](85) NULL, [original_login_name] [nvarchar](128) NULL, [last_successful_logon] [datetime] NULL, [last_unsuccessful_logon] [datetime] NULL, [unsuccessful_logons] [bigint] NULL, [authenticating_database_id] [int] NULL, [TSQL] [nvarchar](max) NULL, [QueryPlan] [xml] NULL ); insert into @tbl2 ( [session_id] ,[request_id] ,[start_time] ,[status] ,[command] ,[sql_handle] ,[TSQL] ,[statement_start_offset] ,[statement_end_offset] ,[plan_handle] ,[QueryPlan] ,[database_id] ,[user_id] ,[connection_id] ,[blocking_session_id] ,[wait_type] ,[wait_time] ,[last_wait_type] ,[wait_resource] ,[open_transaction_count] ,[open_resultset_count] ,[transaction_id] ,[context_info] ,[percent_complete] ,[estimated_completion_time] ,[cpu_time] ,[total_elapsed_time] ,[scheduler_id] ,[task_address] ,[reads] ,[writes] ,[logical_reads] ,[text_size] ,[language] ,[date_format] ,[date_first] ,[quoted_identifier] ,[arithabort] ,[ansi_null_dflt_on] ,[ansi_defaults] ,[ansi_warnings] ,[ansi_padding] ,[ansi_nulls] ,[concat_null_yields_null] ,[transaction_isolation_level] ,[lock_timeout] ,[deadlock_priority] ,[row_count] ,[prev_error] ,[nest_level] ,[granted_query_memory] ,[executing_managed_code] ,[group_id] ,[query_hash] ,[query_plan_hash] ,[most_recent_session_id] ,[connect_time] ,[net_transport] ,[protocol_type] ,[protocol_version] ,[endpoint_id] ,[encrypt_option] ,[auth_scheme] ,[node_affinity] ,[num_reads] ,[num_writes] ,[last_read] ,[last_write] ,[net_packet_size] ,[client_net_address] ,[client_tcp_port] ,[local_net_address] ,[local_tcp_port] ,[parent_connection_id] ,[most_recent_sql_handle] ,[login_time] ,[host_name] ,[program_name] ,[host_process_id] ,[client_version] ,[client_interface_name] ,[security_id] ,[login_name] ,[nt_domain] ,[nt_user_name] ,[memory_usage] ,[total_scheduled_time] ,[last_request_start_time] ,[last_request_end_time] ,[is_user_process] ,[original_security_id] ,[original_login_name] ,[last_successful_logon] ,[last_unsuccessful_logon] ,[unsuccessful_logons] ,[authenticating_database_id] ) select [session_id] ,[request_id] ,[start_time] ,[status] ,[command] ,[sql_handle] ,[TSQL] ,[statement_start_offset] ,[statement_end_offset] ,[plan_handle] ,[QueryPlan] ,[database_id] ,[user_id] ,[connection_id] ,[blocking_session_id] ,[wait_type] ,[wait_time] ,[last_wait_type] ,[wait_resource] ,[open_transaction_count] ,[open_resultset_count] ,[transaction_id] ,[context_info] ,[percent_complete] ,[estimated_completion_time] ,[cpu_time] ,[total_elapsed_time] ,[scheduler_id] ,[task_address] ,[reads] ,[writes] ,[logical_reads] ,[text_size] ,[language] ,[date_format] ,[date_first] ,[quoted_identifier] ,[arithabort] ,[ansi_null_dflt_on] ,[ansi_defaults] ,[ansi_warnings] ,[ansi_padding] ,[ansi_nulls] ,[concat_null_yields_null] ,[transaction_isolation_level] ,[lock_timeout] ,[deadlock_priority] ,[row_count] ,[prev_error] ,[nest_level] ,[granted_query_memory] ,[executing_managed_code] ,[group_id] ,[query_hash] ,[query_plan_hash] ,[most_recent_session_id] ,[connect_time] ,[net_transport] ,[protocol_type] ,[protocol_version] ,[endpoint_id] ,[encrypt_option] ,[auth_scheme] ,[node_affinity] ,[num_reads] ,[num_writes] ,[last_read] ,[last_write] ,[net_packet_size] ,[client_net_address] ,[client_tcp_port] ,[local_net_address] ,[local_tcp_port] ,[parent_connection_id] ,[most_recent_sql_handle] ,[login_time] ,[host_name] ,[program_name] ,[host_process_id] ,[client_version] ,[client_interface_name] ,[security_id] ,[login_name] ,[nt_domain] ,[nt_user_name] ,[memory_usage] ,[total_scheduled_time] ,[last_request_start_time] ,[last_request_end_time] ,[is_user_process] ,[original_security_id] ,[original_login_name] ,[last_successful_logon] ,[last_unsuccessful_logon] ,[unsuccessful_logons] ,[authenticating_database_id] from [inf].[vRequestDetail]; insert into @tbl1 ( [PlanHandle], [SQLHandle], [QueryPlan] ) select [plan_handle], [sql_handle], (select top(1) [query_plan] from sys.dm_exec_query_plan([plan_handle])) as [QueryPlan] from @tbl2 where (select top(1) [query_plan] from sys.dm_exec_query_plan([plan_handle])) is not null group by [plan_handle], [sql_handle]; insert into @tbl0 ( [SQLHandle], [TSQL] ) select [sql_handle], (select top(1) text from sys.dm_exec_sql_text([sql_handle])) as [TSQL]--[query_text] from @tbl2 where (select top(1) text from sys.dm_exec_sql_text([sql_handle])) is not null group by [sql_handle];;merge [srv].[SQLQuery] as trg using @tbl0 as src on trg.[SQLHandle]=src.[SQLHandle] WHEN NOT MATCHED BY TARGET THEN INSERT ( [SQLHandle], [TSQL] ) VALUES ( src.[SQLHandle], src.[TSQL] );;merge [srv].[PlanQuery] as trg using @tbl1 as src on trg.[SQLHandle]=src.[SQLHandle] and trg.[PlanHandle]=src.[PlanHandle] WHEN NOT MATCHED BY TARGET THEN INSERT ( [PlanHandle], [SQLHandle], [QueryPlan] ) VALUES ( src.[PlanHandle], src.[SQLHandle], src.[QueryPlan] ); select [session_id] ,[request_id] ,[start_time] ,[status] ,[command] ,[sql_handle] ,(select top(1) 1 from @tbl0 as t where t.[SQLHandle]=tt.[sql_handle]) as [TSQL] ,[statement_start_offset] ,[statement_end_offset] ,[plan_handle] ,(select top(1) 1 from @tbl1 as t where t.[PlanHandle]=tt.[plan_handle]) as [QueryPlan] ,[database_id] ,[user_id] ,[connection_id] ,[blocking_session_id] ,[wait_type] ,[wait_time] ,[last_wait_type] ,[wait_resource] ,[open_transaction_count] ,[open_resultset_count] ,[transaction_id] ,[context_info] ,[percent_complete] ,[estimated_completion_time] ,[cpu_time] ,[total_elapsed_time] ,[scheduler_id] ,[task_address] ,[reads] ,[writes] ,[logical_reads] ,[text_size] ,[language] ,[date_format] ,[date_first] ,[quoted_identifier] ,[arithabort] ,[ansi_null_dflt_on] ,[ansi_defaults] ,[ansi_warnings] ,[ansi_padding] ,[ansi_nulls] ,[concat_null_yields_null] ,[transaction_isolation_level] ,[lock_timeout] ,[deadlock_priority] ,[row_count] ,[prev_error] ,[nest_level] ,[granted_query_memory] ,[executing_managed_code] ,[group_id] ,[query_hash] ,[query_plan_hash] ,[most_recent_session_id] ,[connect_time] ,[net_transport] ,[protocol_type] ,[protocol_version] ,[endpoint_id] ,[encrypt_option] ,[auth_scheme] ,[node_affinity] ,[num_reads] ,[num_writes] ,[last_read] ,[last_write] ,[net_packet_size] ,[client_net_address] ,[client_tcp_port] ,[local_net_address] ,[local_tcp_port] ,[parent_connection_id] ,[most_recent_sql_handle] ,[login_time] ,[host_name] ,[program_name] ,[host_process_id] ,[client_version] ,[client_interface_name] ,[security_id] ,[login_name] ,[nt_domain] ,[nt_user_name] ,[memory_usage] ,[total_scheduled_time] ,[last_request_start_time] ,[last_request_end_time] ,[is_user_process] ,[original_security_id] ,[original_login_name] ,[last_successful_logon] ,[last_unsuccessful_logon] ,[unsuccessful_logons] ,[authenticating_database_id] into #ttt from @tbl2 as tt group by [session_id] ,[request_id] ,[start_time] ,[status] ,[command] ,[sql_handle] ,[TSQL] ,[statement_start_offset] ,[statement_end_offset] ,[plan_handle] ,[database_id] ,[user_id] ,[connection_id] ,[blocking_session_id] ,[wait_type] ,[wait_time] ,[last_wait_type] ,[wait_resource] ,[open_transaction_count] ,[open_resultset_count] ,[transaction_id] ,[context_info] ,[percent_complete] ,[estimated_completion_time] ,[cpu_time] ,[total_elapsed_time] ,[scheduler_id] ,[task_address] ,[reads] ,[writes] ,[logical_reads] ,[text_size] ,[language] ,[date_format] ,[date_first] ,[quoted_identifier] ,[arithabort] ,[ansi_null_dflt_on] ,[ansi_defaults] ,[ansi_warnings] ,[ansi_padding] ,[ansi_nulls] ,[concat_null_yields_null] ,[transaction_isolation_level] ,[lock_timeout] ,[deadlock_priority] ,[row_count] ,[prev_error] ,[nest_level] ,[granted_query_memory] ,[executing_managed_code] ,[group_id] ,[query_hash] ,[query_plan_hash] ,[most_recent_session_id] ,[connect_time] ,[net_transport] ,[protocol_type] ,[protocol_version] ,[endpoint_id] ,[encrypt_option] ,[auth_scheme] ,[node_affinity] ,[num_reads] ,[num_writes] ,[last_read] ,[last_write] ,[net_packet_size] ,[client_net_address] ,[client_tcp_port] ,[local_net_address] ,[local_tcp_port] ,[parent_connection_id] ,[most_recent_sql_handle] ,[login_time] ,[host_name] ,[program_name] ,[host_process_id] ,[client_version] ,[client_interface_name] ,[security_id] ,[login_name] ,[nt_domain] ,[nt_user_name] ,[memory_usage] ,[total_scheduled_time] ,[last_request_start_time] ,[last_request_end_time] ,[is_user_process] ,[original_security_id] ,[original_login_name] ,[last_successful_logon] ,[last_unsuccessful_logon] ,[unsuccessful_logons] ,[authenticating_database_id]; UPDATE trg SET trg.[status] =case when (trg.[status]<>'suspended') then coalesce(src.[status] collate DATABASE_DEFAULT, trg.[status] collate DATABASE_DEFAULT) else trg.[status] end --,trg.[command] =coalesce(src.[command] collate DATABASE_DEFAULT, trg.[command] collate DATABASE_DEFAULT) --,trg.[sql_handle] =coalesce(src.[sql_handle] , trg.[sql_handle] ) --,trg.[TSQL] =coalesce(src.[TSQL] collate DATABASE_DEFAULT, trg.[TSQL] collate DATABASE_DEFAULT) ,trg.[statement_start_offset] =coalesce(src.[statement_start_offset] , trg.[statement_start_offset] ) ,trg.[statement_end_offset] =coalesce(src.[statement_end_offset] , trg.[statement_end_offset] ) --,trg.[plan_handle] =coalesce(src.[plan_handle] , trg.[plan_handle] ) --,trg.[QueryPlan] =coalesce(src.[QueryPlan] , trg.[QueryPlan] ) --,trg.[connection_id] =coalesce(src.[connection_id] , trg.[connection_id] ) ,trg.[blocking_session_id] =coalesce(trg.[blocking_session_id] , src.[blocking_session_id] ) ,trg.[wait_type] =coalesce(trg.[wait_type] collate DATABASE_DEFAULT, src.[wait_type] collate DATABASE_DEFAULT) ,trg.[wait_time] =coalesce(src.[wait_time] , trg.[wait_time] ) ,trg.[last_wait_type] =coalesce(src.[last_wait_type] collate DATABASE_DEFAULT, trg.[last_wait_type] collate DATABASE_DEFAULT) ,trg.[wait_resource] =coalesce(src.[wait_resource] collate DATABASE_DEFAULT, trg.[wait_resource] collate DATABASE_DEFAULT) ,trg.[open_transaction_count] =coalesce(src.[open_transaction_count] , trg.[open_transaction_count] ) ,trg.[open_resultset_count] =coalesce(src.[open_resultset_count] , trg.[open_resultset_count] ) --,trg.[transaction_id] =coalesce(src.[transaction_id] , trg.[transaction_id] ) ,trg.[context_info] =coalesce(src.[context_info] , trg.[context_info] ) ,trg.[percent_complete] =coalesce(src.[percent_complete] , trg.[percent_complete] ) ,trg.[estimated_completion_time] =coalesce(src.[estimated_completion_time] , trg.[estimated_completion_time] ) ,trg.[cpu_time] =coalesce(src.[cpu_time] , trg.[cpu_time] ) ,trg.[total_elapsed_time] =coalesce(src.[total_elapsed_time] , trg.[total_elapsed_time] ) ,trg.[scheduler_id] =coalesce(src.[scheduler_id] , trg.[scheduler_id] ) ,trg.[task_address] =coalesce(src.[task_address] , trg.[task_address] ) ,trg.[reads] =coalesce(src.[reads] , trg.[reads] ) ,trg.[writes] =coalesce(src.[writes] , trg.[writes] ) ,trg.[logical_reads] =coalesce(src.[logical_reads] , trg.[logical_reads] ) ,trg.[text_size] =coalesce(src.[text_size] , trg.[text_size] ) ,trg.[language] =coalesce(src.[language] collate DATABASE_DEFAULT, trg.[language] collate DATABASE_DEFAULT) ,trg.[date_format] =coalesce(src.[date_format] , trg.[date_format] ) ,trg.[date_first] =coalesce(src.[date_first] , trg.[date_first] ) ,trg.[quoted_identifier] =coalesce(src.[quoted_identifier] , trg.[quoted_identifier] ) ,trg.[arithabort] =coalesce(src.[arithabort] , trg.[arithabort] ) ,trg.[ansi_null_dflt_on] =coalesce(src.[ansi_null_dflt_on] , trg.[ansi_null_dflt_on] ) ,trg.[ansi_defaults] =coalesce(src.[ansi_defaults] , trg.[ansi_defaults] ) ,trg.[ansi_warnings] =coalesce(src.[ansi_warnings] , trg.[ansi_warnings] ) ,trg.[ansi_padding] =coalesce(src.[ansi_padding] , trg.[ansi_padding] ) ,trg.[ansi_nulls] =coalesce(src.[ansi_nulls] , trg.[ansi_nulls] ) ,trg.[concat_null_yields_null] =coalesce(src.[concat_null_yields_null] , trg.[concat_null_yields_null] ) ,trg.[transaction_isolation_level] =coalesce(src.[transaction_isolation_level] , trg.[transaction_isolation_level] ) ,trg.[lock_timeout] =coalesce(src.[lock_timeout] , trg.[lock_timeout] ) ,trg.[deadlock_priority] =coalesce(src.[deadlock_priority] , trg.[deadlock_priority] ) ,trg.[row_count] =coalesce(src.[row_count] , trg.[row_count] ) ,trg.[prev_error] =coalesce(src.[prev_error] , trg.[prev_error] ) ,trg.[nest_level] =coalesce(src.[nest_level] , trg.[nest_level] ) ,trg.[granted_query_memory] =coalesce(src.[granted_query_memory] , trg.[granted_query_memory] ) ,trg.[executing_managed_code] =coalesce(src.[executing_managed_code] , trg.[executing_managed_code] ) ,trg.[group_id] =coalesce(src.[group_id] , trg.[group_id] ) ,trg.[query_hash] =coalesce(src.[query_hash] , trg.[query_hash] ) ,trg.[query_plan_hash] =coalesce(src.[query_plan_hash] , trg.[query_plan_hash] ) ,trg.[most_recent_session_id] =coalesce(src.[most_recent_session_id] , trg.[most_recent_session_id] ) ,trg.[connect_time] =coalesce(src.[connect_time] , trg.[connect_time] ) ,trg.[net_transport] =coalesce(src.[net_transport] collate DATABASE_DEFAULT, trg.[net_transport] collate DATABASE_DEFAULT) ,trg.[protocol_type] =coalesce(src.[protocol_type] collate DATABASE_DEFAULT, trg.[protocol_type] collate DATABASE_DEFAULT) ,trg.[protocol_version] =coalesce(src.[protocol_version] , trg.[protocol_version] ) ,trg.[endpoint_id] =coalesce(src.[endpoint_id] , trg.[endpoint_id] ) ,trg.[encrypt_option] =coalesce(src.[encrypt_option] collate DATABASE_DEFAULT, trg.[encrypt_option] collate DATABASE_DEFAULT) ,trg.[auth_scheme] =coalesce(src.[auth_scheme] collate DATABASE_DEFAULT, trg.[auth_scheme] collate DATABASE_DEFAULT) ,trg.[node_affinity] =coalesce(src.[node_affinity] , trg.[node_affinity] ) ,trg.[num_reads] =coalesce(src.[num_reads] , trg.[num_reads] ) ,trg.[num_writes] =coalesce(src.[num_writes] , trg.[num_writes] ) ,trg.[last_read] =coalesce(src.[last_read] , trg.[last_read] ) ,trg.[last_write] =coalesce(src.[last_write] , trg.[last_write] ) ,trg.[net_packet_size] =coalesce(src.[net_packet_size] , trg.[net_packet_size] ) ,trg.[client_net_address] =coalesce(src.[client_net_address] collate DATABASE_DEFAULT, trg.[client_net_address] collate DATABASE_DEFAULT) ,trg.[client_tcp_port] =coalesce(src.[client_tcp_port] , trg.[client_tcp_port] ) ,trg.[local_net_address] =coalesce(src.[local_net_address] collate DATABASE_DEFAULT, trg.[local_net_address] collate DATABASE_DEFAULT) ,trg.[local_tcp_port] =coalesce(src.[local_tcp_port] , trg.[local_tcp_port] ) ,trg.[parent_connection_id] =coalesce(src.[parent_connection_id] , trg.[parent_connection_id] ) ,trg.[most_recent_sql_handle] =coalesce(src.[most_recent_sql_handle] , trg.[most_recent_sql_handle] ) ,trg.[login_time] =coalesce(src.[login_time] , trg.[login_time] ) ,trg.[host_name] =coalesce(src.[host_name] collate DATABASE_DEFAULT, trg.[host_name] collate DATABASE_DEFAULT) ,trg.[program_name] =coalesce(src.[program_name] collate DATABASE_DEFAULT, trg.[program_name] collate DATABASE_DEFAULT) ,trg.[host_process_id] =coalesce(src.[host_process_id] , trg.[host_process_id] ) ,trg.[client_version] =coalesce(src.[client_version] , trg.[client_version] ) ,trg.[client_interface_name] =coalesce(src.[client_interface_name] collate DATABASE_DEFAULT, trg.[client_interface_name] collate DATABASE_DEFAULT) ,trg.[security_id] =coalesce(src.[security_id] , trg.[security_id] ) ,trg.[login_name] =coalesce(src.[login_name] collate DATABASE_DEFAULT, trg.[login_name] collate DATABASE_DEFAULT) ,trg.[nt_domain] =coalesce(src.[nt_domain] collate DATABASE_DEFAULT, trg.[nt_domain] collate DATABASE_DEFAULT) ,trg.[nt_user_name] =coalesce(src.[nt_user_name] collate DATABASE_DEFAULT, trg.[nt_user_name] collate DATABASE_DEFAULT) ,trg.[memory_usage] =coalesce(src.[memory_usage] , trg.[memory_usage] ) ,trg.[total_scheduled_time] =coalesce(src.[total_scheduled_time] , trg.[total_scheduled_time] ) ,trg.[last_request_start_time] =coalesce(src.[last_request_start_time] , trg.[last_request_start_time] ) ,trg.[last_request_end_time] =coalesce(src.[last_request_end_time] , trg.[last_request_end_time] ) ,trg.[is_user_process] =coalesce(src.[is_user_process] , trg.[is_user_process] ) ,trg.[original_security_id] =coalesce(src.[original_security_id] , trg.[original_security_id] ) ,trg.[original_login_name] =coalesce(src.[original_login_name] collate DATABASE_DEFAULT, trg.[original_login_name] collate DATABASE_DEFAULT) ,trg.[last_successful_logon] =coalesce(src.[last_successful_logon] , trg.[last_successful_logon] ) ,trg.[last_unsuccessful_logon] =coalesce(src.[last_unsuccessful_logon] , trg.[last_unsuccessful_logon] ) ,trg.[unsuccessful_logons] =coalesce(src.[unsuccessful_logons] , trg.[unsuccessful_logons] ) ,trg.[authenticating_database_id] =coalesce(src.[authenticating_database_id] , trg.[authenticating_database_id] ) from [srv].[RequestStatistics] as trg inner join #ttt as src on (trg.[session_id]=src.[session_id]) and (trg.[request_id]=src.[request_id]) and (trg.[database_id]=src.[database_id]) and (trg.[user_id]=src.[user_id]) and (trg.[start_time]=src.[start_time]) and (trg.[command] collate DATABASE_DEFAULT=src.[command] collate DATABASE_DEFAULT) and ((trg.[sql_handle]=src.[sql_handle] and src.[sql_handle] IS NOT NULL) or (src.[sql_handle] IS NULL)) and ((trg.[plan_handle]=src.[plan_handle] and src.[plan_handle] IS NOT NULL) or (src.[plan_handle] IS NULL)) and (trg.[transaction_id]=src.[transaction_id]) and ((trg.[connection_id]=src.[connection_id] and src.[connection_id] IS NOT NULL) or (src.[connection_id] IS NULL)); UPDATE trg SET trg.[EndRegUTCDate]=GetUTCDate() from [srv].[RequestStatistics] as trg where not exists( select top(1) 1 from #ttt as src where (trg.[session_id]=src.[session_id]) and (trg.[request_id]=src.[request_id]) and (trg.[database_id]=src.[database_id]) and (trg.[user_id]=src.[user_id]) and (trg.[start_time]=src.[start_time]) and (trg.[command] collate DATABASE_DEFAULT=src.[command] collate DATABASE_DEFAULT) and ((trg.[sql_handle]=src.[sql_handle] and src.[sql_handle] IS NOT NULL) or (src.[sql_handle] IS NULL)) and ((trg.[plan_handle]=src.[plan_handle] and src.[plan_handle] IS NOT NULL) or (src.[plan_handle] IS NULL)) and (trg.[transaction_id]=src.[transaction_id]) and ((trg.[connection_id]=src.[connection_id] and src.[connection_id] IS NOT NULL) or (src.[connection_id] IS NULL)) ); INSERT into [srv].[RequestStatistics] ([session_id] ,[request_id] ,[start_time] ,[status] ,[command] ,[sql_handle] --,[TSQL] ,[statement_start_offset] ,[statement_end_offset] ,[plan_handle] --,[QueryPlan] ,[database_id] ,[user_id] ,[connection_id] ,[blocking_session_id] ,[wait_type] ,[wait_time] ,[last_wait_type] ,[wait_resource] ,[open_transaction_count] ,[open_resultset_count] ,[transaction_id] ,[context_info] ,[percent_complete] ,[estimated_completion_time] ,[cpu_time] ,[total_elapsed_time] ,[scheduler_id] ,[task_address] ,[reads] ,[writes] ,[logical_reads] ,[text_size] ,[language] ,[date_format] ,[date_first] ,[quoted_identifier] ,[arithabort] ,[ansi_null_dflt_on] ,[ansi_defaults] ,[ansi_warnings] ,[ansi_padding] ,[ansi_nulls] ,[concat_null_yields_null] ,[transaction_isolation_level] ,[lock_timeout] ,[deadlock_priority] ,[row_count] ,[prev_error] ,[nest_level] ,[granted_query_memory] ,[executing_managed_code] ,[group_id] ,[query_hash] ,[query_plan_hash] ,[most_recent_session_id] ,[connect_time] ,[net_transport] ,[protocol_type] ,[protocol_version] ,[endpoint_id] ,[encrypt_option] ,[auth_scheme] ,[node_affinity] ,[num_reads] ,[num_writes] ,[last_read] ,[last_write] ,[net_packet_size] ,[client_net_address] ,[client_tcp_port] ,[local_net_address] ,[local_tcp_port] ,[parent_connection_id] ,[most_recent_sql_handle] ,[login_time] ,[host_name] ,[program_name] ,[host_process_id] ,[client_version] ,[client_interface_name] ,[security_id] ,[login_name] ,[nt_domain] ,[nt_user_name] ,[memory_usage] ,[total_scheduled_time] ,[last_request_start_time] ,[last_request_end_time] ,[is_user_process] ,[original_security_id] ,[original_login_name] ,[last_successful_logon] ,[last_unsuccessful_logon] ,[unsuccessful_logons] ,[authenticating_database_id]) select src.[session_id] ,src.[request_id] ,src.[start_time] ,src.[status] ,src.[command] ,src.[sql_handle] --,src.[TSQL] ,src.[statement_start_offset] ,src.[statement_end_offset] ,src.[plan_handle] --,src.[QueryPlan] ,src.[database_id] ,src.[user_id] ,src.[connection_id] ,src.[blocking_session_id] ,src.[wait_type] ,src.[wait_time] ,src.[last_wait_type] ,src.[wait_resource] ,src.[open_transaction_count] ,src.[open_resultset_count] ,src.[transaction_id] ,src.[context_info] ,src.[percent_complete] ,src.[estimated_completion_time] ,src.[cpu_time] ,src.[total_elapsed_time] ,src.[scheduler_id] ,src.[task_address] ,src.[reads] ,src.[writes] ,src.[logical_reads] ,src.[text_size] ,src.[language] ,src.[date_format] ,src.[date_first] ,src.[quoted_identifier] ,src.[arithabort] ,src.[ansi_null_dflt_on] ,src.[ansi_defaults] ,src.[ansi_warnings] ,src.[ansi_padding] ,src.[ansi_nulls] ,src.[concat_null_yields_null] ,src.[transaction_isolation_level] ,src.[lock_timeout] ,src.[deadlock_priority] ,src.[row_count] ,src.[prev_error] ,src.[nest_level] ,src.[granted_query_memory] ,src.[executing_managed_code] ,src.[group_id] ,src.[query_hash] ,src.[query_plan_hash] ,src.[most_recent_session_id] ,src.[connect_time] ,src.[net_transport] ,src.[protocol_type] ,src.[protocol_version] ,src.[endpoint_id] ,src.[encrypt_option] ,src.[auth_scheme] ,src.[node_affinity] ,src.[num_reads] ,src.[num_writes] ,src.[last_read] ,src.[last_write] ,src.[net_packet_size] ,src.[client_net_address] ,src.[client_tcp_port] ,src.[local_net_address] ,src.[local_tcp_port] ,src.[parent_connection_id] ,src.[most_recent_sql_handle] ,src.[login_time] ,src.[host_name] ,src.[program_name] ,src.[host_process_id] ,src.[client_version] ,src.[client_interface_name] ,src.[security_id] ,src.[login_name] ,src.[nt_domain] ,src.[nt_user_name] ,src.[memory_usage] ,src.[total_scheduled_time] ,src.[last_request_start_time] ,src.[last_request_end_time] ,src.[is_user_process] ,src.[original_security_id] ,src.[original_login_name] ,src.[last_successful_logon] ,src.[last_unsuccessful_logon] ,src.[unsuccessful_logons] ,src.[authenticating_database_id] from #ttt as src where not exists( select top(1) 1 from [srv].[RequestStatistics] as trg where (trg.[session_id]=src.[session_id]) and (trg.[request_id]=src.[request_id]) and (trg.[database_id]=src.[database_id]) and (trg.[user_id]=src.[user_id]) and (trg.[start_time]=src.[start_time]) and (trg.[command] collate DATABASE_DEFAULT=src.[command] collate DATABASE_DEFAULT) and ((trg.[sql_handle]=src.[sql_handle] and src.[sql_handle] IS NOT NULL) or (src.[sql_handle] IS NULL)) and ((trg.[plan_handle]=src.[plan_handle] and src.[plan_handle] IS NOT NULL) or (src.[plan_handle] IS NULL)) and (trg.[transaction_id]=src.[transaction_id]) and ((trg.[connection_id]=src.[connection_id] and src.[connection_id] IS NOT NULL) or (src.[connection_id] IS NULL)) ); drop table #ttt;ENDGO

[/expand]

It is possible to automate the collection process. For example, if we add a call to this stored procedure with a schedule to the Agent task (for example, every 10 seconds) or by event (for example, [Databases]. [Active Transactions]. [_ Total]> 0).

At the end of the day, we perform a general analysis and save the result to the table calling the stored procedure.

Implementation of the table

USE [DATABASE_NAME]GOSET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE TABLE [srv].[IndicatorStatistics]( [execution_count] [bigint] NOT NULL, [max_total_elapsed_timeSec] [decimal](38, 6) NOT NULL, [max_total_elapsed_timeLastSec] [decimal](38, 6) NOT NULL, [DATE] [date] NOT NULL, CONSTRAINT [PK_IndicatorStatistics] PRIMARY KEY CLUSTERED ( [DATE] ASC)WITH (PAD_INDEX =OFF, STATISTICS_NORECOMPUTE =OFF, IGNORE_DUP_KEY =OFF, ALLOW_ROW_LOCKS =ON, ALLOW_PAGE_LOCKS =ON) ON [PRIMARY]) ON [PRIMARY]GO

Implementation of the stored procedure

[expand title=”Code”]

USE [DATABASE_NAME]GOSET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE PROCEDURE [srv].[AutoStatisticsTimeRequests]ASBEGIN SET NOCOUNT ON; SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; delete from [srv].[TSQL_DAY_Statistics] where [DATE]<=DateAdd(day,-180,GetUTCDate()); INSERT INTO [srv].[TSQL_DAY_Statistics] ([command] ,[DBName] ,[PlanHandle] ,[SqlHandle] ,[execution_count] ,[min_wait_timeSec] ,[min_estimated_completion_timeSec] ,[min_cpu_timeSec] ,[min_total_elapsed_timeSec] ,[min_lock_timeoutSec] ,[max_wait_timeSec] ,[max_estimated_completion_timeSec] ,[max_cpu_timeSec] ,[max_total_elapsed_timeSec] ,[max_lock_timeoutSec] ,[DATE]) SELECT [command] ,[DBName] ,[plan_handle] ,[sql_handle] ,count(*) as [execution_count] ,min([wait_timeSec]) as [min_wait_timeSec] ,min([estimated_completion_timeSec]) as [min_estimated_completion_timeSec] ,min([cpu_timeSec]) as [min_cpu_timeSec] ,min([total_elapsed_timeSec]) as [min_total_elapsed_timeSec] ,min([lock_timeoutSec]) as [min_lock_timeoutSec] ,max([wait_timeSec]) as [max_wait_timeSec] ,max([estimated_completion_timeSec]) as [max_estimated_completion_timeSec] ,max([cpu_timeSec]) as [max_cpu_timeSec] ,max([total_elapsed_timeSec]) as [max_total_elapsed_timeSec] ,max([lock_timeoutSec]) as [max_lock_timeoutSec] ,cast([InsertUTCDate] as [DATE]) as [DATE] FROM [srv].[vRequestStatistics] with(readuncommitted) where cast([InsertUTCDate] as date) =DateAdd(day,-1,cast(GetUTCDate() as date)) and [command] in ( 'UPDATE', 'TRUNCATE TABLE', 'SET OPTION ON', 'SET COMMAND', 'SELECT INTO', 'SELECT', 'NOP', 'INSERT', 'EXECUTE', 'DELETE', 'DECLARE', 'CONDITIONAL', 'BULK INSERT', 'BEGIN TRY', 'BEGIN CATCH', 'AWAITING COMMAND', 'ASSIGN', 'ALTER TABLE' ) and [database_id] in ( /*a list of tracked databases through DB_ID(‘database_name’)*/ ) and [DBName] is not null group by [command] ,[DBName] ,[plan_handle] ,[sql_handle] ,cast([InsertUTCDate] as [DATE]); declare @inddt int=1;;with tbl11 as ( select [SqlHandle], max([max_total_elapsed_timeSec]) as [max_total_elapsed_timeSec] ,min([max_total_elapsed_timeSec]) as [min_max_total_elapsed_timeSec] ,avg([max_total_elapsed_timeSec]) as [avg_max_total_elapsed_timeSec] ,sum([execution_count]) as [execution_count] from [srv].[TSQL_DAY_Statistics] where [max_total_elapsed_timeSec]>=0.001 and [DATE]=0.001 and [DATE]=cast(DateAdd(day,[email protected],cast(GetUTCDate() as date)) as date) group by [SqlHandle], [DATE] ) , tbl1_sum as (select sum([execution_count]) as [sum_execution_count] from tbl11) , tbl1_total as ( select (select [sum_execution_count] from tbl1_sum) as [execution_count] , sum(tbl11.[max_total_elapsed_timeSec]*tbl11.[execution_count])/(select [sum_execution_count] from tbl1_sum) as [max_total_elapsed_timeSec] , sum(tbl12.[max_total_elapsed_timeSec]*tbl11.[execution_count])/(select [sum_execution_count] from tbl1_sum) as [max_total_elapsed_timeLastSec] , tbl12.[DATE] from tbl11 inner join tbl12 on tbl11.[SqlHandle]=tbl12.[SqlHandle] group by tbl12.[DATE] ) INSERT INTO [srv].[IndicatorStatistics] ([DATE] ,[execution_count] ,[max_total_elapsed_timeSec] ,[max_total_elapsed_timeLastSec] ) select t1.[DATE] ,t1.[execution_count] ,t1.[max_total_elapsed_timeSec] ,t1.[max_total_elapsed_timeLastSec] from tbl1_total as t1; declare @dt datetime=DateAdd(day,-2,GetUTCDate()); INSERT INTO [srv].[RequestStatisticsArchive] ([session_id] ,[request_id] ,[start_time] ,[status] ,[command] ,[sql_handle] ,[statement_start_offset] ,[statement_end_offset] ,[plan_handle] ,[database_id] ,[user_id] ,[connection_id] ,[blocking_session_id] ,[wait_type] ,[wait_time] ,[last_wait_type] ,[wait_resource] ,[open_transaction_count] ,[open_resultset_count] ,[transaction_id] ,[context_info] ,[percent_complete] ,[estimated_completion_time] ,[cpu_time] ,[total_elapsed_time] ,[scheduler_id] ,[task_address] ,[reads] ,[writes] ,[logical_reads] ,[text_size] ,[language] ,[date_format] ,[date_first] ,[quoted_identifier] ,[arithabort] ,[ansi_null_dflt_on] ,[ansi_defaults] ,[ansi_warnings] ,[ansi_padding] ,[ansi_nulls] ,[concat_null_yields_null] ,[transaction_isolation_level] ,[lock_timeout] ,[deadlock_priority] ,[row_count] ,[prev_error] ,[nest_level] ,[granted_query_memory] ,[executing_managed_code] ,[group_id] ,[query_hash] ,[query_plan_hash] ,[most_recent_session_id] ,[connect_time] ,[net_transport] ,[protocol_type] ,[protocol_version] ,[endpoint_id] ,[encrypt_option] ,[auth_scheme] ,[node_affinity] ,[num_reads] ,[num_writes] ,[last_read] ,[last_write] ,[net_packet_size] ,[client_net_address] ,[client_tcp_port] ,[local_net_address] ,[local_tcp_port] ,[parent_connection_id] ,[most_recent_sql_handle] ,[login_time] ,[host_name] ,[program_name] ,[host_process_id] ,[client_version] ,[client_interface_name] ,[security_id] ,[login_name] ,[nt_domain] ,[nt_user_name] ,[memory_usage] ,[total_scheduled_time] ,[last_request_start_time] ,[last_request_end_time] ,[is_user_process] ,[original_security_id] ,[original_login_name] ,[last_successful_logon] ,[last_unsuccessful_logon] ,[unsuccessful_logons] ,[authenticating_database_id] ,[InsertUTCDate] ,[EndRegUTCDate]) SELECT [session_id] ,[request_id] ,[start_time] ,[status] ,[command] ,[sql_handle] ,[statement_start_offset] ,[statement_end_offset] ,[plan_handle] ,[database_id] ,[user_id] ,[connection_id] ,[blocking_session_id] ,[wait_type] ,[wait_time] ,[last_wait_type] ,[wait_resource] ,[open_transaction_count] ,[open_resultset_count] ,[transaction_id] ,[context_info] ,[percent_complete] ,[estimated_completion_time] ,[cpu_time] ,[total_elapsed_time] ,[scheduler_id] ,[task_address] ,[reads] ,[writes] ,[logical_reads] ,[text_size] ,[language] ,[date_format] ,[date_first] ,[quoted_identifier] ,[arithabort] ,[ansi_null_dflt_on] ,[ansi_defaults] ,[ansi_warnings] ,[ansi_padding] ,[ansi_nulls] ,[concat_null_yields_null] ,[transaction_isolation_level] ,[lock_timeout] ,[deadlock_priority] ,[row_count] ,[prev_error] ,[nest_level] ,[granted_query_memory] ,[executing_managed_code] ,[group_id] ,[query_hash] ,[query_plan_hash] ,[most_recent_session_id] ,[connect_time] ,[net_transport] ,[protocol_type] ,[protocol_version] ,[endpoint_id] ,[encrypt_option] ,[auth_scheme] ,[node_affinity] ,[num_reads] ,[num_writes] ,[last_read] ,[last_write] ,[net_packet_size] ,[client_net_address] ,[client_tcp_port] ,[local_net_address] ,[local_tcp_port] ,[parent_connection_id] ,[most_recent_sql_handle] ,[login_time] ,[host_name] ,[program_name] ,[host_process_id] ,[client_version] ,[client_interface_name] ,[security_id] ,[login_name] ,[nt_domain] ,[nt_user_name] ,[memory_usage] ,[total_scheduled_time] ,[last_request_start_time] ,[last_request_end_time] ,[is_user_process] ,[original_security_id] ,[original_login_name] ,[last_successful_logon] ,[last_unsuccessful_logon] ,[unsuccessful_logons] ,[authenticating_database_id] ,[InsertUTCDate] ,[EndRegUTCDate] FROM [srv].[RequestStatistics] where [InsertUTCDate] 

[/expand]

As you can see, the stored procedure also removes data from the [srv]. [RequestStatistics] table to prevent its expansion and ensure quick snapshots of active queries.

We can create this stored procedure during daily Agent calls at the end of the day.

Now, move to the very analysis of the collected data. To compare the current database state to the previous period, use the following view.

Implementation of the view

USE [DATABASE_NAME]GOSET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE view [srv].[vIndicatorStatistics] asSELECT [DATE] ,[execution_count] ,[max_total_elapsed_timeSec] ,[max_total_elapsed_timeLastSec] ,[max_total_elapsed_timeLastSec]-[max_total_elapsed_timeSec] as [DiffSnapshot] ,([max_total_elapsed_timeLastSec]-[max_total_elapsed_timeSec])*100/[max_total_elapsed_timeSec] as [% Snapshot] , case when ([max_total_elapsed_timeLastSec]<[max_total_elapsed_timeSec]) then N'IMPROVED' else case when ([max_total_elapsed_timeLastSec]>[max_total_elapsed_timeSec]) then N'WORSENED' else N'IS NOT CHANGED' end end as 'IndicatorSnapshot' FROM [srv].[IndicatorStatistics]GO

To compare the current database state to the specific day, execute the following query:

with tbl1 as ( select min(total_elapsed_timeSec) as [MIN], max(total_elapsed_timeSec) as [MAX], avg(total_elapsed_timeSec) as [AVG], [sql_handle], count(*) as [Count], '2017-11-01' as [DATE] from [srv].[vRequestStatisticsArchive] where [start_time] between '2017-11-01T07:00:00' and '2017-11-01T21:00:00' group by [sql_handle]), tbl2 as ( select min(total_elapsed_timeSec) as [MIN], max(total_elapsed_timeSec) as [MAX], avg(total_elapsed_timeSec) as [AVG], [sql_handle], count(*) as [Count], '2017-11-08' as [DATE] from [srv].[vRequestStatistics] where [start_time] between '2017-11-08T07:00:00' and '2017-11-08T21:00:00' group by [sql_handle])select coalesce(tbl1.[sql_handle], tbl2.[sql_handle]) as [sql_handle], coalesce(tbl1.[MIN], 0) as [MIN 01.11.2017], coalesce(tbl2.[MIN], 0) as [MIN 08.11.2017], coalesce(tbl1.[MAX], 0) as [MAX 01.11.2017], coalesce(tbl2.[MAX], 0) as [MAX 08.11.2017], coalesce(tbl1.[AVG], 0) as [AVG 01.11.2017], coalesce(tbl2.[AVG], 0) as [AVG 08.11.2017], coalesce(tbl1.[Count], 0) as [Count 01.11.2017], coalesce(tbl2.[Count], 0) as [Count 08.11.2017]from tbl1left outer join tbl2 on tbl1.[sql_handle]=tbl2.[sql_handle];GO

Here, we compare the performance from 07-00 to 21-00 on November 1 and 8, 2017 (for example, it is the working time of the enterprise to exclude the analysis of the routine tasks).

We can generate this upload as a detailed report and attach it to the general report obtained from the [srv]. [VIndicatorStatistics] view.

To understand how the query was executed and what happened from time to time, it’s enough to use the [srv]. [vRequestStatistics] view with the filter by [start_time] (the date and time of the request received).

सारांश

In this article, we considered an example of implementing a general MS SQL Server performance indicator, which allows determining the database state related to the previous period or a specific day. As a metric, we used total elapsed time.

This method is universal. It is necessary to configure it, up to your needs, as well as to determine the measure, such as what we will collect and compare.

In addition, this approach allows detecting the issue immediately or for a certain period.

With the received data, it is possible to create a robot that would make decisions what queries to improve or disable to prevent system bottlenecks and notifications of administrators.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. टीएसक्यूएल लेनदेन के भीतर प्रयास करें/पकड़ें या इसके विपरीत?

  2. SQL सर्वर ट्रिगर - भाग 2 DDL और लॉगऑन ट्रिगर

  3. SQL सर्वर (T-SQL) में JSON कुंजी का नाम कैसे बदलें

  4. यूडीएफ के बिना और सीएलआर के बिना टी-एसक्यूएल में एक स्ट्रिंग से सभी व्हाइटस्पेस वर्णों को ट्रिम करने का एक अच्छा तरीका क्या है?

  5. SQL सर्वर में डेटाटाइम बनाम स्मालडेटाइम:क्या अंतर है?