sp_cursorprepexec 53 মিলিয়ন পড়ার কারণ?


9

আমরা এসকিউএল সার্ভার 2012 এর সাথে ডায়নামিক্স এএক্স 2012 ইনস্টলেশন চালাচ্ছি I আমি জানি যে কার্সারগুলি আর ব্যবহার করা উচিত নয় তবে এক্স এটি ব্যবহার করছে এবং আমরা এই আচরণটি পরিবর্তন করতে পারি না সুতরাং আমাদের এটির সাথে কাজ করতে হবে।

আজ আমি 53 মিলিয়নের বেশি পঠন এবং 20 মিনিটেরও বেশি সময় কার্যকর করার সময় দিয়ে খুব খারাপ প্রশ্ন পেয়েছি।

আমি আমাদের তদারকি সরঞ্জাম সেন্ট্রিওনের মাধ্যমে এই ক্যোয়ারীটি ধরলাম।

declare @p1 int
set @p1=1073773227
declare @p2 int
set @p2=180158805
declare @p5 int
set @p5=16
declare @p6 int
set @p6=1
declare @p7 int
set @p7=2
exec sp_cursorprepexec @p1 output,@p2 output,N'@P1 bigint,@P2 nvarchar(5),@P3 bigint,@P4 nvarchar(8),@P5 bigint,@P6 bigint,@P7 bigint,@P8 bigint,@P9 bigint,@P10 bigint,@P11 bigint,@P12 bigint,@P13 bigint,@P14 bigint,@P15 bigint,@P16 bigint,@P17 bigint,@P18 bigint,@P19 nvarchar(5),@P20 bigint,@P21 bigint,@P22 bigint,@P23 bigint,@P24 bigint',N'SELECT T1.PRODUCT,T1.EXTERNALVENDPARTY,T1.LIFECYCLESTATUS,T1.RECID,T2.ECORESPRODUCT,T2.ECORESDISTINCTPRODUCTVARIANT,T2.SGE,T2.ECORESREFORDERNUM,T2.ORDERNUM,T2.RECID,T3.ECORESREFORDERNUM,T3.NAME1,T3.NAME2,T3.NAME3,T3.RECID,T4.ECORESPRODUCT,T4.EXTERNALITEMID,T4.ECORESDISTINCTPRODUCTVARIANT,T4.RECID,T5.RECID,T5.PERSON,T6.RECID,T6.NAME,T6.INSTANCERELATIONTYPE,T7.RECID,T7.NAME,T7.INSTANCERELATIONTYPE,T8.PARTY,T8.ACCOUNTNUM,T8.RECID,T9.RECID,T9.DISPLAYPRODUCTNUMBER,T9.INSTANCERELATIONTYPE,T10.PRODUCT,T10.CATEGORY,T10.RECID,T11.RECID,T11.CODE,T11.NAME,T11.INSTANCERELATIONTYPE FROM INVENTTABLE T1 CROSS JOIN ECORESPRODUCTORDERNUM T2 CROSS JOIN ECORESPRODUCTORDERNUMTRANSLATION T3 LEFT OUTER JOIN VENDEXTERNALITEM T4 ON ((T4.PARTITION=5637144576) AND ((T2.ECORESPRODUCT=T4.ECORESPRODUCT) AND (T4.ECORESDISTINCTPRODUCTVARIANT=@P1))) CROSS JOIN HCMWORKER T5 CROSS JOIN DIRPARTYTABLE T6 CROSS JOIN DIRPARTYTABLE T7 CROSS JOIN VENDTABLE T8 CROSS JOIN ECORESPRODUCT T9 CROSS JOIN ECORESPRODUCTCATEGORY T10 CROSS JOIN ECORESCATEGORY T11 WHERE (((T1.PARTITION=5637144576) AND (T1.DATAAREAID=N''087'')) AND (T1.DATAAREAID=@P2)) AND ((T2.PARTITION=5637144576) AND ((T2.ECORESPRODUCT=T1.PRODUCT) AND (T2.SGE=@P3))) AND ((T3.PARTITION=5637144576) AND ((T3.ECORESREFORDERNUM=T2.ECORESREFORDERNUM) AND (T3.LANGUAGEID=@P4))) AND ((T5.PARTITION=5637144576) AND (T5.RECID=T2.PRODUCTMANAGER)) AND (((T6.PARTITION=5637144576) AND (T6.INSTANCERELATIONTYPE IN (@P5,@P6,@P7,@P8,@P9,@P10,@P11) )) AND (T6.RECID=T5.PERSON)) AND (((T7.PARTITION=5637144576) AND (T7.INSTANCERELATIONTYPE IN (@P12,@P13,@P14,@P15,@P16,@P17,@P18) )) AND (T1.EXTERNALVENDPARTY=T7.RECID)) AND (((T8.PARTITION=5637144576) AND (T8.DATAAREAID=N''087'')) AND ((T7.RECID=T8.PARTY) AND (T8.DATAAREAID=@P19))) AND (((T9.PARTITION=5637144576) AND (T9.INSTANCERELATIONTYPE IN (@P20,@P21,@P22) )) AND (T9.RECID=T1.PRODUCT)) AND ((T10.PARTITION=5637144576) AND (T10.PRODUCT=T9.RECID)) AND (((T11.PARTITION=5637144576) AND (T11.INSTANCERELATIONTYPE IN (@P23,@P24) )) AND (T11.RECID=T10.CATEGORY))',@p5 output,@p6 output,@p7 output,0,N'087',5637146082,N'de',41,2303,2377,2975,2978,5329,6886,41,2303,2377,2975,2978,5329,6886,N'087',3265,3266,3267,2665,4423
select @p1, @p2, @p5, @p6, @p7

প্রথম জিনিসটি আমি লক্ষ্য করেছি যে এই ক্যোয়ারীটি একটি কার্সার ব্যবহার করছে using কৌতূহলের বাইরে আমি বিবৃতিটি অনুলিপি করেছি এবং কার্সার স্টাফ ছাড়াই ম্যানেজমেন্ট স্টুডিওতে এটি সম্পাদন করেছি (আমাকে স্বীকার করতে হবে যে আমি কোয়েরির জন্য প্যারামিটারগুলি প্রতিস্থাপন করেছি যাতে আমি এটি চালাতে পারি)। এসএসএমএসের মধ্যে কোয়েরি 30 সেকেন্ডে শেষ হয়েছে। খুব দ্রুত নয়, তবে কার্সারের বিকল্পের চেয়ে এখনও দ্রুত।

এখানে আমি আপনাকে উভয় পরিকল্পনা প্রদান:

কার্সার ব্যতীত পরিকল্পনাটি এখনও একটি খুব খারাপ পরিকল্পনা তবে এটি আরও ভাল। আমার প্রশ্নটি এখানে: কেউ দয়া করে আমাকে ব্যাখ্যা করতে পারেন কেন কার্সার সংস্করণে 53 মিলিয়ন পড়া দরকার?

কার্সার সহ ক্যোয়ারীর পরিসংখ্যান:

Duration    CPU         Reads       Writes  Est Rows    Actual Rows
1.396.212   1.379.157   53.270.895  3.878   30          2

কার্সার ছাড়াই ক্যোয়ারির পরিসংখ্যান:

Duration    CPU         Reads       Writes  Est Rows    Actual Rows
23.337      1.703       665.113     13      4.287       34.813

এটি 2 টির পরিবর্তে 34,813 সারি পাওয়া অদ্ভুত বলে মনে হচ্ছে; তবে আমি নিশ্চিত যে আমি সঠিক পরামিতিগুলি পূরণ করেছি। আমি ভেবেছিলাম যে এটি সম্ভবত এসকিউএল সেন্ট্রি থেকে একটি মজার উদ্দীপনা ছিল যেহেতু আমি সেখান থেকে পরিসংখ্যানগুলি অনুলিপি করেছি।

আমি আশা করি আপনার জন্য প্রয়োজনীয় সকল তথ্য সরবরাহ করতে পারলাম। এছাড়াও যদি কারও কিছু ভাল পঠন থাকে তবে আরও ভাল কার্সারগুলি বুঝতে পারুন great

উত্তর:


10

প্রথমত, এটি আমাকে অবাক করে দেয় যে এসকিউএল সেন্ট্রি থেকে উভয় প্রশ্নের জন্য সারিগুলির আসল সংখ্যা কম-বেশি একই নয়।

দ্বিতীয়ত। প্রকৃত পরিকল্পনা ব্যতীত কার্সার নিয়ে পরিকল্পনায় আপনার অনুমানগুলি কতটা সঠিক তা বলা মুশকিল তবে কিছু জিনিস আমার সামনে দাঁড়িয়ে। (পিএস: একটি বাস্তব পরিকল্পনা পেতে আমার উত্তর এখানে দেখুন )।

বলা হচ্ছে, আপনার আনুমানিক পরিকল্পনা থেকে কয়েকটি জিনিস লক্ষ্য করা যায়।

প্যারামিট্রাইজেশনের কারণে মেলানো সূচিগুলি সম্পর্কে একটি সতর্কতা রয়েছে । প্যারামিট্রাইজেশন সরানো হচ্ছে যাতে এসকিউএল সার্ভার সেগুলি তুলনামূলকভাবে I / O উন্নত করতে পারে use

2 টি পরিকল্পনার মধ্যে সারিগুলির আনুমানিক সংখ্যাটি নাটকীয়ভাবে বন্ধ রয়েছে। একটি কার্সার সহ আপনার পরিকল্পনায় আপনার 11 এর vendexterniteitem থেকে একটি আনুমানিক সারি রয়েছে your আপনার পরিকল্পনায় কোনও কার্সার ছাড়াই আপনার প্রায় 200K এর সারিগুলির আনুমানিক এবং আসল সংখ্যা রয়েছে। যদি আপনার 200 কে রেকর্ডগুলি আসলে সেই স্পুল অপারেটরে যায় যা বেদনাদায়ক হতে পারে।

সমস্ত অপারেটরগুলির বুননীয়ভাবে বিভিন্ন অনুমান (কার্সারযুক্ত পরিকল্পনায় অনেক ছোট) রয়েছে, সুতরাং আপনার কার্সার ছাড়াই ক্যোয়ারীতে আপনি যে ব্যবহার করছেন তার চেয়ে আপনার পরিকল্পনাটি বিভিন্ন পরামিতি মানগুলি সংকলিত এবং ক্যাশে করা হয়েছিল। ( প্যারামিটার স্নিফিং হিসাবে পরিচিত )

ইনডেক্স টেবিলের সূচীতে সন্ধান করুন + কী লকআপে একটি খুব অদ্ভুত পছন্দ রয়েছে। পরিকল্পনাটি টাইপআইডিএক্স ব্যবহার করছে এবং তারপরে ক্লাস্টারড ইনডেক্সে (আইটেমিডেক্স) কী লকআপস দেয়। যদি আপনার অনুমানগুলি বন্ধ থাকে এবং এসকিউএল সার্ভারকে প্রচুর কী লকআপস করতে হয় যা IO কেও অনেক ব্যাখ্যা করতে পারে। আপনার পরিকল্পনায় কোনও স্ট্রাপডেক্সের সাথে আমি কার্সার ছাড়াই পরিচিত নই তবে মনে হচ্ছে এটি আচ্ছাদন করছে যাতে আপনার প্রদত্ত প্যারামিটারগুলির জন্য এটি সম্ভবত সেরা পছন্দ। আমি মনে করি এটি টাইপডেক্সটি বাছাই করেছে কারণ এটি অনেক সংকীর্ণ তবে সমস্যাযুক্ত কার্যকরকরণের সাথে আপনি যে পরিমাণ সরবরাহ করছেন তার চেয়ে বিভিন্ন সংকলন সময়ের মানগুলির কারণে এটি হতে পারে।

সংক্ষেপে, আমি এই প্রশ্নের জন্য প্যারামিট্রাইজেশনটি এএক্স-এ সরিয়ে ফেলব যাতে এটি আসল মানগুলির সাথে একটি পরিকল্পনা তৈরি করে তাই এসএসএমএসে পরিকল্পনার প্রমাণ হিসাবে "(আরও কার্যকর" সূচীগুলি বেছে নেয়) এবং কার্যকর করার সময়গুলি। এটি এসকিউএল সার্ভারকে ফিল্টারড সূচকগুলি ব্যবহার করার অনুমতি দেবে। এটি করার জন্য, কোনও বিকাশকারীকে এই কোয়েরিটি কার্যকর করা হয়েছে এমন অ্যাপ্লিকেশন forceliteralsকোডটিতে কীওয়ার্ড যুক্ত করুন এবং দেখুন কী ঘটে তা দেখুন।

এটি সম্ভবত আপনাকে এমন একটি ক্যোয়ারী রেখে যেতে পারে যা ৩০ সেকেন্ড সময় নেয় (আপনার এসএসএমএসের মতোই) তবে এটি কেবল সুরের বিষয়। আপনার পরিকল্পনাগুলিতে সূচিপত্রগুলির অনুপস্থিতি রয়েছে এবং আমি মনে করি ইকোস্প্রডিউক্টর্ডর্নাম.সজে একটি সূচক উদাহরণ হিসাবে সহায়তা করতে পারে তবে আমি সেগুলি সারণীগুলি জানি না এবং মনে করি সেগুলি কাস্টমাইজেশন দ্বারা যুক্ত হয়েছে। সাধারণ টিউনিং নীতিগুলি এখানে সহায়তা করবে তবে এটি সম্ভবত এই উত্তরের জন্য খুব বিস্তৃত হবে (সূচিপত্রগুলি আচ্ছাদন করে ...)


এটি আমার সমস্যার সমাধান করেছে। আমাদের আসলে দুটি সমস্যা ছিল: প্যারামিটার স্নিফিং এবং ফিল্টারড ইনডিকেসেস। আমরা কক্সবাজারের কিছু সম্পর্ক এড়িয়ে গেছি যাতে অ্যাপ্লিকেশনটি এই অদ্ভুতভাবে "পার্টির টেবিলের জন্য ধারা" তৈরি করে। গল্পের সমাপ্তি: টেবিলের সম্পর্কগুলি কখনই এড়িয়ে
হ্যান্স ভাদার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.