"FETCH API_CURSOR0000 ..." के बहुत सारे sp_WhoIsActive (SQL Server 2008 R2) पर


9

मेरी अजीब स्थिति है। इसका उपयोग करके sp_whoisactiveमैं इसे देख सकता हूं:

अजीब

ठीक है, इस प्रश्न के साथ, मैं देख सकता हूं कि क्या ट्रिगर हो रहा है (क्या यह शब्द अंग्रेजी में मौजूद है?)

SELECT c.session_id, c.properties, c.creation_time, c.is_open, t.text
FROM sys.dm_exec_cursors (SPID) c --0 for all cursors running
CROSS APPLY sys.dm_exec_sql_text (c.sql_handle) t

परिणाम:

यह सिर्फ एक चयन है

यह एक सरल है select। यह f का उपयोग क्यों कर रहा है etch_cursor?

इसके अलावा, मुझे बहुत सारे "रिक्त" sql_texts भी दिखाई देते हैं। क्या इस "कर्सर" के साथ कुछ है?

रिक्त

DBCC INPUTBUFFER (spid) मुझे यह दिखाता है:

प्रिंट

यह सवाल यहाँ है (मेरे द्वारा बनाया गया है) लेकिन मुझे नहीं पता कि क्या यह वही बात है।


EDIT1:

परिजनों द्वारा प्रदान की गई क्वेरी का उपयोग करते हुए, मैं इसे देखता हूं:

अभी भी कोई कोड नहीं।


EDIT2:

गतिविधि मॉनिटर का उपयोग करना, मैं इसे देख सकता हूं:

मोसेस महंगी क्वेरी

यह सबसे महंगी क्वेरी है (पहला वाला जानबूझकर है, हम इसके बारे में जानते हैं)।

और फिर, मैं जानना चाहूंगा, कि इसका select * from...कारण क्या है FETCH CURSOR...


EDIT3:

यह " select * from..." दूसरे सर्वर (से linked server) से चल रहा है ।

खैर, अब मुझे यह समझने में समस्या हो रही है कि @kin ने क्या कहा।

यह execution planक्वेरी (डेटाबेस के समान सर्वर में चल रहा है) है:

डेटाबेस का एक ही सर्वर

यह अब है, निष्पादन योजना, दूसरे सर्वर में चल रहा है, लिंक्ड सर्वर के माध्यम से:

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

ठीक है, कोई समस्या भी नहीं है। और अब! निष्पादन योजना, **activity monitor**उसी के माध्यम से select * from:

यहां क्या बकवास चल रही है?

जवाबों:


3

यह एक साधारण चयन है। यह fetch_cursor का उपयोग क्यों कर रहा है?

SELECTसिस्टम-जनित वितरित क्वेरी ढांचे से है, और साथ जुड़ा हुआ है UPDATEआप मिल गया।

रिमोट अपडेट क्वेरी प्लान ऑपरेटर sp_cursorदूरस्थ डेटा स्रोत से पंक्तियों को लाने के लिए मॉडल का उपयोग करता है । यह सभी कर्सर एपीआई कॉल का कारण है।

मेरा मानना ​​है कि आप अपने प्रश्न में जो कर्सर योजना दिखाते हैं, वह इस प्रक्रिया के हिस्से के रूप में इंजन द्वारा खोला गया आंतरिक कर्सर है, लेकिन मेरे पास अभी तक इसे पुन: पेश करने का प्रयास करने का समय नहीं है।


1

खैर ... हमने समस्या हल कर दी। एक अद्यतन था, जो चल रही प्रक्रिया के अंदर है कि "से ... का चयन करें ..."। मैंने अद्यतन टिप्पणी की। और कोई समस्या नहीं।


1

यह OLEDB कॉल के साथ दूरस्थ सर्वर (लिंक्ड सर्वर और SSIS कॉन्फ़िगरेशन का उपयोग OLEDB) के साथ एक समस्या हो सकती है।

यह एक डिज़ाइन दोष है, Microsoft SQL Server बग जो SQL Server 2012 SP1 से तब तक पैच नहीं किया गया था जब तक मुझे याद नहीं है कि यह दूरस्थ आँकड़ों का उपयोग क्वेरी को दूर से अनुकूलित करने की अनुमति नहीं देता है।

आपको ट्रैफ़िक देखने के लिए क्वेरी में REMOTE सर्वर से sp_WhoIsActive ( डाउनलोड / डॉक्स ) चलाने की आवश्यकता होगी , लेकिन SQL सर्वर जो 2012 SP1 नहीं है, वह किसी कारण से दूरस्थ आँकड़ों का उपयोग करने की अनुमति नहीं देता है, भले ही लॉगिन डेटाट्रेडर हो रिमोट सर्वर पर सभी तालिकाओं तक पहुंच।

Microsoft समाधान SA, या ddladmin, या दूरस्थ सर्वर / तालिका (s) के लिए उपयोग किया जा रहा है के लिए दूरस्थ कॉल करने से जुड़े सर्वर क्रेडेंशियल अनुदान है।

मैंने अपने कुछ सेटअपों में इस समस्या को हल करने के लिए उपयोग किया था जो कि डीबी या एसक्यूएल सर्वरों को दूरस्थ अनुमति के बिना उन्नत अनुमतियों के बिना अधिकांश भाग समाधान के लिए पारदर्शी है। आपको मूल रूप से प्रश्न में दूरस्थ SQL सर्वर DB पर दूरस्थ लॉगिन ddladmin भूमिका देने की आवश्यकता है, और उसके बाद ऑब्जेक्ट स्तर में परिवर्तन के लिए स्पष्ट DENY अनुमतियों के साथ एक भूमिका बनाएँ यदि आप केवल SELECT पहुँच की अनुमति देना चाहते हैं।

नीचे दी गई कस्टम DB तय भूमिका की प्रति है जो मैं इसके लिए बना रहा हूं, लेकिन आप आगे पढ़ने के साथ-साथ कुछ पढ़ने और शोधों की जांच और पुष्टि या समायोजन करना चाहते हैं, लेकिन कुछ उदाहरणों में मेरे लिए पारदर्शी रूप से हल किया गया है - ऐसा करने से पहले कैश की आवश्यकता हो सकती है इसे ध्यान में रखें और एक बार साफ़ हो जाने के बाद, इसे दो बार चलाएं और परिणामों के लिए स्थानीय गतिविधि और दूरस्थ गतिविधि दोनों की जाँच करें।

इसलिए दूरस्थ DB पर क्रेडेंशियल ddladmin भूमिका की अनुमति दें, आप दूरस्थ DB पर अन्य सामान्य अनुमतियों की अनुमति देते हैं, आप कस्टम DB भूमिका बनाते हैं जैसा कि मैंने इस समान सर्वर पर नीचे सूचीबद्ध किया है, और फिर आप उसी क्रेडेंशियल को उस नए कस्टम निर्धारित में जोड़ते हैं स्पष्ट इनकार के साथ DB भूमिका, कैश साफ़ करें, कैश साफ़ करने के बाद क्वेरी को दो बार या अधिक चलाएं यह देखने के लिए कि क्या यह हल करता है।

विशेष रूप से आपके प्रश्न का उत्तर देने के लिए हालांकि आप इन कर्सर को देख रहे हैं, यदि आप SQL Server 2012 SP1 के नीचे एक संस्करण चला रहे हैं और इसे देख रहे हैं और आप एक दूरस्थ क्वेरी चला रहे हैं, क्योंकि यह उपयोग या रिमोट की अनुमति नहीं देता है एक वर्कअराउंड (जैसा कि ऊपर सूचीबद्ध) के बिना इस सेटअप में आँकड़े, तब यह पंक्ति-दर-पंक्ति प्रसंस्करण करता है जैसा कि किन ने ऊपर कहा है क्योंकि क्वेरी को सर्वश्रेष्ठ क्वेरी योजना के लिए आँकड़ों का उपयोग करके अनुकूलित नहीं किया गया है और इसमें कार्डिनैलिटी समस्या है।

/* 
CREATE A NEW ROLE - Deny explicit DB object access for linked 
server credentials that the DDLAdmin role gives which is needed 
for DBCC SHOW_STATISTICS across linked servers  
*/
-- Database specific
CREATE ROLE db_LinkedServer_Restriction
DENY ALTER ANY ASSEMBLY                    TO db_LinkedServer_Restriction
DENY ALTER ANY ASYMMETRIC KEY              TO db_LinkedServer_Restriction
DENY ALTER ANY CERTIFICATE                 TO db_LinkedServer_Restriction
DENY ALTER ANY CONTRACT                    TO db_LinkedServer_Restriction
DENY ALTER ANY DATABASE DDL TRIGGER        TO db_LinkedServer_Restriction
DENY ALTER ANY DATABASE EVENT NOTIFICATION TO db_LinkedServer_Restriction
DENY ALTER ANY DATASPACE                   TO db_LinkedServer_Restriction
DENY ALTER ANY FULLTEXT CATALOG            TO db_LinkedServer_Restriction
DENY ALTER ANY MESSAGE TYPE                TO db_LinkedServer_Restriction
DENY ALTER ANY REMOTE SERVICE BINDING      TO db_LinkedServer_Restriction
DENY ALTER ANY ROUTE                       TO db_LinkedServer_Restriction
DENY ALTER ANY SCHEMA                      TO db_LinkedServer_Restriction
DENY ALTER ANY SERVICE                     TO db_LinkedServer_Restriction
DENY ALTER ANY SYMMETRIC KEY               TO db_LinkedServer_Restriction
DENY CHECKPOINT                            TO db_LinkedServer_Restriction
DENY CREATE AGGREGATE                      TO db_LinkedServer_Restriction
DENY CREATE DEFAULT                        TO db_LinkedServer_Restriction
DENY CREATE FUNCTION                       TO db_LinkedServer_Restriction
DENY CREATE PROCEDURE                      TO db_LinkedServer_Restriction
DENY CREATE QUEUE                          TO db_LinkedServer_Restriction
DENY CREATE RULE                           TO db_LinkedServer_Restriction
DENY CREATE SYNONYM                        TO db_LinkedServer_Restriction
DENY CREATE TABLE                          TO db_LinkedServer_Restriction
DENY CREATE TYPE                           TO db_LinkedServer_Restriction
DENY CREATE VIEW                           TO db_LinkedServer_Restriction
DENY CREATE XML SCHEMA COLLECTION          TO db_LinkedServer_Restriction
DENY REFERENCES                            TO db_LinkedServer_Restriction

GO
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.