sp_cursoropen और समानतावाद


15

मैं एक क्वेरी के साथ एक प्रदर्शन समस्या में भाग रहा हूं जिसे मैं अपना सिर प्राप्त करने के लिए नहीं देख सकता हूं।

मैंने क्वेरी को कर्सर परिभाषा से बाहर निकाला।

इस क्वेरी को निष्पादित होने में कुछ सेकंड लगते हैं

SELECT A.JOBTYPE
FROM PRODROUTEJOB A
WHERE ((A.DATAAREAID=N'IW')
AND ((A.CALCTIMEHOURS<>0)
AND (A.JOBTYPE<>3)))
AND EXISTS (SELECT 'X'
FROM PRODROUTE B
WHERE ((B.DATAAREAID=N'IW')
AND (((((B.PRODID=A.PRODID)
AND ((B.PROPERTYID=N'PR1526157') OR (B.PRODID=N'PR1526157')))
AND (B.OPRNUM=A.OPRNUM))
AND (B.OPRPRIORITY=A.OPRPRIORITY))
AND (B.OPRID=N'GRIJZEN')))
AND NOT EXISTS (SELECT 'X'
FROM ADUSHOPFLOORROUTE C
WHERE ((C.DATAAREAID=N'IW')
AND ((((((C.WRKCTRID=A.WRKCTRID)
AND (C.PRODID=B.PRODID))
AND (C.OPRID=B.OPRID))
AND (C.JOBTYPE=A.JOBTYPE))
AND (C.FROMDATE>{TS '1900-01-01 00:00:00.000'}))
AND ((C.TODATE={TS '1900-01-01 00:00:00.000'}))))))
GROUP BY A.JOBTYPE
ORDER BY A.JOBTYPE

वास्तविक निष्पादन योजना इस तरह दिखती है।

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

सर्वर वाइड सेटिंग को नोटिफाई करना MaxDOP 1 पर सेट किया गया था। मैंने मैक्सडॉप सेटिंग्स के साथ खेलने की कोशिश की।

OPTION (MAXDOP 0)क्वेरी में जोड़ना , या सर्वर सेटिंग्स को बदलना बेहतर प्रदर्शन और इस क्वेरी योजना के परिणामस्वरूप होता है।

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

हालाँकि, प्रश्न में एप्लिकेशन (डायनेमिक्स AX) इस तरह के प्रश्नों को निष्पादित नहीं करता है, यह कर्सर का उपयोग करता है।

कैप्चर किया गया वास्तविक कोड यही है।

declare @p1 int
set @p1=189527589
declare @p3 int
set @p3=16
declare @p4 int
set @p4=1
declare @p5 int
set @p5=2
exec sp_cursoropen @p1 output,N'SELECT A.JOBTYPE FROM PRODROUTEJOB A WHERE ((A.DATAAREAID=N''IW'') AND ((A.CALCTIMEHOURS<>0) AND (A.JOBTYPE<>3))) AND EXISTS (SELECT ''X'' FROM PRODROUTE B WHERE ((B.DATAAREAID=N''IW'') AND (((((B.PRODID=A.PRODID) AND ((B.PROPERTYID=N''PR1526157'') OR (B.PRODID=N''PR1526157''))) AND (B.OPRNUM=A.OPRNUM)) AND (B.OPRPRIORITY=A.OPRPRIORITY)) AND (B.OPRID=N''GRIJZEN''))) AND NOT EXISTS (SELECT ''X'' FROM ADUSHOPFLOORROUTE C WHERE ((C.DATAAREAID=N''IW'') AND ((((((C.WRKCTRID=A.WRKCTRID) AND (C.PRODID=B.PRODID)) AND (C.OPRID=B.OPRID)) AND (C.JOBTYPE=A.JOBTYPE)) AND (C.FROMDATE>{TS ''1900-01-01 00:00:00.000''})) AND ((C.TODATE={TS ''1900-01-01 00:00:00.000''})))))) GROUP BY A.JOBTYPE ORDER BY A.JOBTYPE ',@p3 output,@p4 output,@p5 output
select @p1, @p3, @p4, @p5

इस निष्पादन योजना के परिणामस्वरूप (और दुर्भाग्य से एक ही कई-दूसरे निष्पादन समय)।

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

मैंने कई चीजों की कोशिश की है जैसे कैश्ड प्लान को छोड़ना, कर्सर की परिभाषा के अंदर क्वेरी में विकल्प जोड़ना, ... लेकिन उनमें से कोई भी मुझे एक समानांतर योजना नहीं लगती है।

मैंने काफी हद तक शापर्स की समानतावाद सीमाओं की तलाश में Google को खोजा है, लेकिन कोई सीमाएं नहीं मिल रही हैं।

क्या में यहां कुछ भूल रहा हूँ?

वास्तविक SQL बिल्ड वह है SQL Server 2008 (SP1) - 10.0.2573.0 (X64)जो मुझे पता है कि असमर्थित है, लेकिन मैं इस उदाहरण को अपग्रेड नहीं कर सकता क्योंकि मैं फिट देखता हूं। मुझे डेटाबेस को किसी अन्य सर्वर पर स्थानांतरित करने की आवश्यकता होगी और इसका मतलब होगा कि धीमे WAN पर काफी बड़े असम्पीडित बैकअप को खींचना।

ट्रेस ध्वज 4199 से कोई फ़र्क नहीं पड़ता है, और न ही OPTION (RECOMPILE)।

कर्सर गुण हैं:

API | Fast_Forward | Read Only | Global (0)

जवाबों:


20

FAST_FORWARD कर्सर समानांतरवाद का समर्थन नहीं करते हैं (हालांकि योजना बनाने वाले सर्वर को 2012 या उससे ऊपर NonParallelPlanReasonके शोप्पन XML के हिस्से के रूप में प्राप्त करने की आवश्यकता होगी )।

जब आप निर्दिष्ट करते हैं FAST_FORWARD, तो ऑप्टिमाइज़र चुनता है आपके बीच STATICऔर आपके DYNAMICलिए ।

प्रदान की गई निष्पादन योजना स्थैतिक जैसी योजना का चयन करने वाले अनुकूलक को दिखाती है। क्योंकि क्वेरी में एकत्रीकरण होता है, मुझे संदेह है कि एक गतिशील कर्सर योजना यहां भी संभव है। फिर भी, एक अनुरोधFAST_FORWARD कर्सर प्रकार का एक समानांतर योजना को रोक रहा है।

आपको कर्सर प्रकार को या तो स्पष्ट रूप से बदलना चाहिए STATICKEYSET उदाहरण के लिए या । ये दोनों कर्सर प्रकार समानता का उपयोग कर सकते हैं।

यह कहा गया है, क्योंकि यह एक एपीआई कर्सर है, कर्सर के प्रकार को बदलने की संभावना एक आवेदन परिवर्तन की आवश्यकता होगी। स्वाभाविक रूप से, आपको यह जांचने के लिए बेंचमार्क प्रदर्शन की आवश्यकता होगी कि कर्सर प्रकार वास्तव में बदलना आपके लिए सबसे अच्छा विकल्प है।

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