আমি এমন একটি ক্যোয়ারী নিয়ে পারফরম্যান্স সমস্যায় পড়ছি যা আমার মাথা ঘুরে দেখা যায় না।
আমি একটি কার্সার সংজ্ঞা থেকে ক্যোয়ারিকে টেনে আনলাম।
এই ক্যোয়ারীটি কার্যকর করতে কয়েক সেকেন্ড সময় নেয়
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
আসল বাস্তবায়ন পরিকল্পনাটি এর মতো দেখাচ্ছে।
সার্ভারের প্রশস্ত সেটিংটি লক্ষ্য করে ম্যাক্সডোপ 1 এ সেট করা হয়েছে আমি ম্যাক্সডপ সেটিংসের সাথে চারপাশে খেলার চেষ্টা করেছি।
যোগ করার পদ্ধতি OPTION (MAXDOP 0)
ক্যোয়ারী, অথবা অনেক ভালো পারফরম্যান্স এবং এই প্রশ্নের সাথে পরিকল্পনার সার্ভার সেটিংস ফলাফল পরিবর্তন।
তবে, প্রশ্নযুক্ত অ্যাপ্লিকেশন (ডায়নামিক্স এএক্স) এর মতো প্রশ্নগুলি কার্যকর করে না, এটি কার্সার ব্যবহার করে।
প্রকৃত কোডটি হ'ল এটি।
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
এই কার্যনির্বাহী পরিকল্পনার ফলস্বরূপ (এবং দুর্ভাগ্যক্রমে একই বহু-দ্বিতীয় নির্বাহের সময়)।
আমি ক্যাশেড প্ল্যানস বাদ দেওয়া, কার্সার সংজ্ঞার ভিতরে ক্যোয়ারীতে বিকল্পগুলি যুক্ত করার মতো অনেকগুলি বিষয় চেষ্টা করেছি ... তবে এগুলির কোনওটিই আমাকে সমান্তরাল পরিকল্পনা বলে মনে হয় না।
আমি কার্সারগুলির সমান্তরালতা সীমাবদ্ধতার সন্ধান করতে বেশ কিছুটা জন্য গুগলও অনুসন্ধান করেছি তবে কোনও সীমাবদ্ধতা খুঁজে পেতে পারে না বলে মনে হয়।
আমি কি এখানে স্পষ্ট কিছু মিস করছি?
আসল এসকিউএল বিল্ডটি SQL Server 2008 (SP1) - 10.0.2573.0 (X64)
যা আমি বুঝতে পেরেছি এটি অসমর্থিত, তবে আমি যথাযথ দেখায় এই সংস্করণটি আপগ্রেড করতে পারি না। আমার ডাটাবেসটিকে অন্য সার্ভারে স্থানান্তর করতে হবে এবং এর অর্থ ধীর WAN এর চেয়ে বেশ বড় অসম্পূর্ণ ব্যাকআপ টানতে হবে।
ট্রেস পতাকা 4199 কোনও তাত্পর্যপূর্ণ করে না এবং অপশন (রিকম্পাইল )ও করে না।
কার্সার বৈশিষ্ট্যগুলি হ'ল:
API | Fast_Forward | Read Only | Global (0)