শীর্ষ নির্বাচন 1 ক্ষতিপূরণ ক্যোয়ারী কর্মক্ষমতা; এটি থেকে উত্তরণের জন্য কি কোনও ডিবিএ-অ্যাক্সেসযোগ্য উপায় আছে?


13

একটি প্রোডাকশন অ্যাপ্লিকেশনে (সি # এসকিউএল সার্ভার 2014 স্ট্যান্ডার্ডের সাথে কথা বলছে) নীচে নীচের মতো দেখতে এমন একটি কোয়েরি রয়েছে। বেশিরভাগ সময় এটি মিলিসেকেন্ডে চালিত হয়। তবে মাঝে মাঝে (নির্দিষ্ট মানের জন্য @Id) এটি বাদাম হয়ে যায় এবং এক মিনিট বা তার বেশি সময় নেয় takes এটি অ্যাপের সময়সীমা চেয়ে দীর্ঘ, সুতরাং অ্যাপ্লিকেশনটি ব্যবহারকারীর জন্য ব্যর্থ।

"যায় বাদাম" ক্ষেত্রে, প্রত্যাবর্তিত ফলাফল সেটটি সঠিকভাবে খালি, কারণ এটি অনেকের মধ্যে রয়েছে তবে অন্যান্য সমস্ত ক্ষেত্রে নয়।

ভাগ্যক্রমে এটি উত্পাদন এবং বিকাশ পরিবেশ উভয়ই পুনরুত্পাদনযোগ্য।

বিকাশকারী কোয়েরি থেকে "TOP 1" মুছে ফেলার কথা বলছেন, তারপরে অ্যাপটি ফলাফল সেটটির অতিরিক্ত সারিগুলি গ্রাস করেছে তা নিশ্চিত করে, পারফরম্যান্স সমস্যাটি পরিষ্কার করে।

ক্যোয়ারির পরিকল্পনাকারী TOP 1উপস্থিত থাকাকালীন কোনও সূচকের পরামর্শ দেয় না । (দেব মধ্যে)

ক্যোয়ারী পরিবর্তন এবং অ্যাপ্লিকেশন ঠিক করার প্রক্রিয়া চলছে। রোলআউট কিছুটা সময় নেয়।

আমার প্রশ্ন: নতুন ক্যোয়ারি রোল আউট হওয়ার সাথে সাথে অ্যাপ্লিকেশন পরিবর্তনের আগে এই সমস্যাটি কাটিয়ে ওঠার জন্য প্রোডাকশন এসকিউএল সার্ভারের উদাহরণটি সুর বা টুইট করার কোনও ডিবিএ-অ্যাক্সেসযোগ্য উপায় আছে?

SELECT TOP 1
       subscription_id 
  FROM subscription AS sub
  JOIN billing_info AS bi ON bi.billing_info_id = sub.billing_info_id   
  JOIN person_group AS apg ON apg.person_id = bi.person_id
  JOIN pplan ON pplan.plan_id = sub.plan_id
  JOIN product ON product.product_id = [plan].product_id 
  JOIN product_attribute ON product_attribute.product_id = product.product_id 
 WHERE apg.group_id = @Id
   AND apg.start_date < GETDATE()
   AND (apg.end_date IS NULL OR apg.end_date > GETDATE()) 
   AND (sub.end_date IS NULL OR sub.end_date > GETDATE()) 
   AND product_attribute.attribute_type = 'special feature' 
   AND product_attribute.attribute_data = '1' 
 ORDER BY sub.start_date ASC;

আপনি কি এটি sub subry হিসাবে চেষ্টা করেছেন? উদাহরণস্বরূপ শীর্ষস্থানীয় 1 সাবস্ক্রিপশন_আইড থেকে নির্বাচন করুন ([শীর্ষস্থানীয় ব্যতীত আপনার ক্যোয়ারির বাকি অংশটি নির্বাচন করুন]
SeanR

হয়তো কিছু "সাধারণ" ক্যোয়ারী টিউনিং কাজ করবে? সূচকগুলি যথেষ্ট আকর্ষণীয় হলে স্ক্যানগুলি চলে যায়। এটি কোনও পরিকল্পনার গাইডের চেয়ে কম আক্রমণাত্মক।
usr ডিরেক্টরির

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

উত্তর:


12

আপনি যদি ক্যোয়ারী পরিবর্তন করতে না পারেন তবে আপনি একটি পরিকল্পনা গাইড ব্যবহার করতে পারেন।

এর সাথে ক্যোয়ারীর পারফরম্যান্সটি পরীক্ষা করুন OPTION (QUERYTRACEON 4138)( sysadminএটি চেষ্টা করার জন্য অনুমতি সহ কারও প্রয়োজন হবে )।

যদি এটি সন্তোষজনক পারফরম্যান্স উত্পন্ন করে থাকে তবে আপনি এটি পরিকল্পনা পরিকল্পনার মাধ্যমে প্রয়োগ করতে পারেন। যদি এটি সন্তোষজনক পারফরম্যান্স তৈরি করে না এবং চেষ্টা করুন এবং এমন একটি ইঙ্গিতটি খুঁজে পান। সম্ভবত OPTION (HASH JOIN, MERGE JOIN)যদি অনুপযুক্ত নেস্টেড লুপগুলির সমস্যা হয়। আপনার USE PLAN N'...'ইঙ্গিতটি নিতে প্রয়োজন হতে পারে might

একবার আপনি প্রয়োজনীয় ইঙ্গিত (গুলি) জানার পরে আপনি সেগুলি এখানে তথ্য ব্যবহার করে প্রয়োগ করতে পারেন ।


OPTION (QUERYTRACEON 4138)কৌতুকটি করেছে ধন্যবাদ। এখন পরিকল্পনা গাইডগুলি বাছাই করার জন্য।
ও জোনস

0

গ্রিনগুলির জন্য এটি ব্যবহার করে দেখুন
`> এ পরিবর্তন করা হয়েছে> = তাই ঠিক একই কোয়েরি নয়

SELECT TOP 1
       subscription_id 
  FROM subscription AS sub
  JOIN billing_info AS bi 
        ON bi.billing_info_id = sub.billing_info_id   
  JOIN person_group AS apg 
        ON apg.person_id = bi.person_id 
       AND apg.group_id = @Id
       AND apg.start_date < GETDATE()
       AND isnnull(apg.end_date, GETDATE()) >= GETDATE()             
  JOIN pplan 
        ON pplan.plan_id = sub.plan_id
       AND isnnull(sub.end_date, GETDATE()) >= GETDATE()
  JOIN product 
        ON product.product_id = [plan].product_id 
  JOIN product_attribute 
        ON product_attribute.product_id = product.product_id 
       AND product_attribute.attribute_type = 'special feature' 
       AND product_attribute.attribute_data = '1' 
 ORDER BY sub.start_date ASC;

"ক্যোয়ারী পরিবর্তন করা এবং অ্যাপ্লিকেশন ফিক্সিংয়ের কাজ চলছে R রোলআউটটি কিছুটা সময় নেয়।" ওপি এমন একটি সমাধান খুঁজছে যা "যেমন আছে" পারফরম্যান্সকে স্থির করে।
মার্টিন স্মিথ

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