নাটকীয়ভাবে একটি কোয়েরিটি কেন গতিতে সেট করবেন?


74

ক্যোয়ারী একটি একক নির্বাচন যা প্রচুর গোষ্ঠীকরণের স্তর এবং ক্রমবর্ধমান ক্রিয়াকলাপগুলি সমন্বিত। SET ARITHABORT চালু হওয়ার সাথে এক সেকেন্ডেরও কম সময় লাগে, অন্যথায় এটি কয়েক মিনিট সময় নেয়। আমরা এসকিউএল সার্ভার 2000 এবং 2008 এ এই আচরণটি দেখেছি।

উত্তর:


62

একটু তারিখযুক্ত, তবে যে কেউ এখানে সমান সমস্যা নিয়ে শেষ হচ্ছে ...

আমারও একই সমস্যা ছিল। আমার জন্য এটি প্যারামিটার স্নিফিংয়ে পরিণত হয়েছিল, যা প্রথমে আমি যত্ন নেওয়ার পক্ষে যথেষ্ট বুঝতে পারি নি। আমি একটি 'সেট অ্যারিটাবার্ট অন' যুক্ত করলাম যা সমস্যার সমাধান করে তবে এটি আবার ফিরে আসে। তারপরে আমি পড়লাম:

http://www.sommarskog.se/query-plan-mysteries.html

এটি প্রতিটি জিনিস আপ সাফ করেছে। যেহেতু আমি লিনক এসকিউএল-তে ব্যবহার করছিলাম এবং সমস্যা সমাধানের জন্য সীমিত বিকল্প ছিল, তাই আমি যে ক্যোয়ারী পরিকল্পনাটি চেয়েছিলাম তা জোর করে একটি ক্যোয়ারী প্ল্যান গাইড (লিঙ্কের শেষ দেখুন) ব্যবহার করে শেষ করেছি।


3
ছয় বছরেরও বেশি পরে, এই উত্তরে প্রদত্ত লিঙ্কটি এখনও "প্রয়োজনীয় পড়া" ... এবং এখনও বর্তমান, সর্বশেষ সংশোধন ডিসেম্বর '17 এর being
তাকর্ল

30

.NET অ্যাপ্লিকেশনগুলি ডিফল্টরূপে অক্ষম করা বিকল্পটির সাথে সংযোগ স্থাপন করে তবে ম্যানেজমেন্ট স্টুডিওতে এটি ডিফল্টরূপে সক্ষম হয়। ফলাফলটি হ'ল সার্ভারটি বেশিরভাগ / সমস্ত পদ্ধতির জন্য 2 পৃথক প্রয়োগের পরিকল্পনা ক্যাশে করে। এটি সার্ভারের সংখ্যার গণনাগুলি কীভাবে কার্য সম্পাদন করে তা প্রভাবিত করে এবং যেমন আপনি পদ্ধতির উপর নির্ভর করে বন্যপ্রাণে বিভিন্ন ফলাফল পেতে পারেন। এটি প্রকৃতপক্ষে 2 টি সাধারণ উপায়গুলির মধ্যে একটি যা একটি ভয়ানক বাস্তবায়ন পরিকল্পনা খাওয়ানো যায়, অন্যটি প্যারামিটার স্নিফিং।

কটাক্ষপাত https://web.archive.org/web/20150315031719/http://sqladvice.com/blogs/gstark/archive/2008/02/12/Arithabort-Option-Effects-Stored-Procedure-Performance। এটিতে আরও কিছু আলোচনার জন্য এসপিএক্স


আমি এই উত্তরের অর্ধেকের সাথে একমত সংখ্যার গণনা দাবী সম্পর্কে যদিও আমি খুব সংশয়ী!
মার্টিন স্মিথ

2
@ মার্টিন: আমি মনে করি আমি অস্পষ্ট ছিলাম। আমি কেবল বলছিলাম যে অ্যারিটিয়াবার্ট অন এসকিউএল সার্ভারটি কোনও ডিভি / 0 বা ত্রুটিযুক্ত গাণিতিক ওভারফ্লো ত্রুটিতে ত্রুটি ঘটবে। এটি বন্ধ থাকলে এটি চলতে থাকে এবং যে কোনও কারণেই সমস্ত ধরণের ভয়ঙ্কর সমস্যার কারণ হতে পারে।

@ বেন - হ্যাঁ দুঃখিত, আমি আপনার উত্তরে বিশেষভাবে আক্রমণ করতে চাইনি আমি কেবল ইঙ্গিত করেছিলাম যে একটি SETবিকল্প পরিবর্তন করা খুব সহজ হবে একটি আরও ভাল পরিকল্পনা পেতে এবং এটি ভুল হিসাবে চিহ্নিত অপশন হিসাবে এটি ভুল সনাক্তকরণ। আপনার লিঙ্কের লোকটি এটি করে নি বলে আমি বিশ্বাস করি না।
মার্টিন স্মিথ

@ মার্টিন - কোনও সমস্যা নয়, আমি মনে করি না আপনি আমাকে আক্রমণ করছেন। আমি যে অন্যান্য আলোচনাটি সংযুক্ত করেছি তা কিছুটা অস্পষ্ট হতে পারে। আমি কেবল সমর্থনমূলক প্রমাণ দেওয়ার চেষ্টা করছিলাম।

@ মার্টিন পশ্চাদপসরণে আমি বিশ্বাস করি যে আপনি সঠিক।

21

আমি যুক্তি দিয়ে বলব যে এটি প্রায় অবশ্যই পরামিতিগুলির ঘ্রাণ ছিল।

এটি প্রায়শই বলা হয় যে SET OPTIONSএইভাবে পারফরম্যান্সকে প্রভাবিত করতে পারে তবে আপনি যখন সূচীকরণ ভিউ / অবিরাম গণিত কলামগুলি ব্যবহার করছেন সেই ক্ষেত্রে বাদে এই দাবির জন্য একটিমাত্র প্রামাণিক উত্স দেখতে পেলাম।

এই ক্ষেত্রে (এসকিউএল ২০০৫ এর জন্য + এবং আপনার ডাটাবেস এসকিউএল ২000 সামঞ্জস্যতা মোডে না থাকলে )। যদি আপনার উভয় থাকে ARITHABORTএবং ANSI_WARNINGS OFFআপনি সূচকটি ব্যবহার না করে দেখতে পাচ্ছেন তাই কাঙ্ক্ষিত সিকের চেয়ে স্ক্যান থাকতে পারে (এবং কিছুটা ওভারহেড স্থির গণনার ফলাফল হিসাবে ব্যবহার করা যায় না)। ADO.NET ANSI_WARNINGS ONআমার সবেমাত্র একটি দ্রুত পরীক্ষা হয়েছে বলে মনে হয়েছে default

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

ম্যানেজমেন্ট স্টুডিও উইন্ডোতে একটি দ্রুত পরীক্ষা দেখায় যে কখন SET ARITHABORT OFFচালু করা হয় এবং ক্যোয়ারি চালানো হয় যে পারফরম্যান্স সমস্যাটি পুনরাবৃত্তি করে যাতে এটি দৃশ্যত কেস বন্ধ থাকে। আসলে এটি গ্রেগ স্টার্ক লিঙ্কটিতে ব্যবহৃত সমস্যা সমাধানের পদ্ধতি বলে মনে হচ্ছে ।

তবে এটি সেই বিকল্পটিকে সেট করে আপনাকে ক্যাশে থেকে একই একই খারাপ পরিকল্পনাটি শেষ করতে পারে তা এড়িয়ে যায়

আপনি যদি অ্যাপ্লিকেশন সংযোগ ব্যবহারের চেয়ে পৃথক ব্যবহারকারী হিসাবে লগ ইন হয়ে থাকেন তবে এই পরিকল্পনার পুনরায় ব্যবহারটি ঘটতে পারে।

আমি প্রথমে একটি ওয়েব অ্যাপ্লিকেশন থেকে ম্যানেজমেন্ট স্টুডিওর সাথে একটি পরীক্ষার ক্যোয়ারী SET ARITHABORT OFFচালিয়ে এটি পরীক্ষা করেছি এবং নীচের ক্যোয়ারী থেকে ইউজারক্যান্টগুলি উপরে যেতে দেখলাম।

SELECT usecounts, cacheobjtype, objtype, text ,query_plan
FROM sys.dm_exec_cached_plans 
CROSS APPLY sys.dm_exec_sql_text(plan_handle) 
CROSS APPLY sys.dm_exec_query_plan(plan_handle) 

এই ভাগ করে নেওয়ার জন্য পিএফের পরিকল্পনাগুলি আসলে ঘটতে পারে সমস্ত পরিকল্পনার ক্যাশে কীগুলি অবশ্যই এক রকম হবে। পাশাপাশি arithabortঅন্য কয়েকটি উদাহরণ কার্যকর করা ব্যবহারকারীদের একই ডিফল্ট স্কিমা প্রয়োজন (যদি ক্যোয়ারী অন্তর্নিহিত নাম রেজোলিউশনের উপর নির্ভর করে) এবং সংযোগগুলির একই languageসেট প্রয়োজন set

পরিকল্পনার ক্যাশে কীগুলির একটি পূর্ণাঙ্গ তালিকা


12

আমি জানি আমি এই পার্টিতে দেরি করেছি, তবে ভবিষ্যতের দর্শনার্থীদের জন্য মার্টিন হুবহু সঠিক। আমরা এই একই সমস্যার দিকে ছুঁড়েছি - একটি এসপি .NET ক্লায়েন্টদের জন্য খুব ধীরে চলছিল, যখন এটি এসএসএমএসের জন্য দ্রুত জ্বলছিল। ইস্যুটি অন্বেষণ এবং সমাধান করার ক্ষেত্রে, আমরা কেনি এভিট মার্টিনের প্রশ্নের মন্তব্যে তার মন্তব্যে যে পদ্ধতিগত পরীক্ষাটি জিজ্ঞাসা করেছিলেন তা করেছি।

মার্টিনের ক্যোয়ারের একটি বৈকল্পিক ব্যবহার করে, আমি পদ্ধতি ক্যাশে এসপির সন্ধান করলাম এবং এর মধ্যে দুটি খুঁজে পেয়েছি। পরিকল্পনাগুলি দেখে, বাস্তবে এটি ছিল যে একজনের হাতে আর্টিহবার্ট ছিল এবং একজনের কাছে ছিল অ্যারিটিএবার্ট অফ। ARITHABORT OFF সংস্করণটিতে একটি সূচীর সন্ধান ছিল, যখন সংস্করণ অন সংস্করণ একই আউটপুটটির জন্য একটি সূচক স্ক্যান ব্যবহার করেছিল। জড়িত প্যারামিটারগুলি প্রদত্ত, সূচকটি অনুসন্ধানের জন্য আউটপুটটির জন্য কয়েক মিলিয়ন রেকর্ডের জন্য একটি অনুসন্ধানের প্রয়োজন ছিল।

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

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

সংক্ষেপে, বৈষম্যটির এরিথাবোর্টের আসল মানটির সাথে কোনও সম্পর্ক ছিল না - এটির সাথে বা বন্ধ, যে কোনও ক্লায়েন্টের কাছ থেকে আমরা গ্রহণযোগ্য বা ভয়ানক পারফরম্যান্স পেতে পারি: যা কিছু গুরুত্বপূর্ণ ছিল তা পরিকল্পনার সংকলন এবং ক্যাশে ব্যবহৃত প্যারামিটার মানগুলি।

যদিও দুটিই MSDN ইঙ্গিত ARITHABORT অফ নিজেই ক্যোয়ারী অপ্টিমাইজেশান উপর নেতিবাচক প্রভাব ফেলতে পারে যে, আমাদের পরীক্ষামূলক নিশ্চিত করে যে মার্টিন সঠিক হয় - কারণ প্যারামিটার আঘ্রাণ করা হয় এবং ফলে পরিকল্পনা পরামিতি সব ব্যাপ্তির জন্য অনুকূল হচ্ছে না।


1
ভাবুন যে এই বাক্যাংশটির Setting ARITHABORT to OFF can negatively impact query optimization leading to performance issues.অর্থ কী। তারা কেবল গণনাকৃত কলাম এবং দর্শনগুলিতে সূচকগুলি ব্যবহার করতে অক্ষমতার কথা বলছে (যদি ANSI_WARNINGSএটি বন্ধ থাকে) বা যদি এটির অন্য কোনও প্রভাব থাকে।
মার্টিন স্মিথ

আমি নিশ্চিত নই. আমি আশ্চর্য হই যে যদি এমএসডিএন-তে কেউ একইরকম পরিস্থিতিতে দৌড়ায়, আর্টিহ্যাবার্ট চালু করে দেয়, কর্মক্ষমতা উন্নতি করে এবং অন্যের মত একই সিদ্ধান্তে উঠে যায় তবে আমি অবাক হই। সূচিযুক্ত দর্শন এবং গণিত কলামগুলির পক্ষে আমি অস্পষ্ট। এক পর্যায়ে এটি বলেছে যে এসইএসটি বিকল্পগুলির অবশ্যই নির্দিষ্ট মান থাকতে হবে যদি কোনও INSERT, আপডেট, বা মুছুন অপারেশন এতে সঞ্চিত ডেটা মানগুলিকে সংশোধন করে। অন্য কোথাও তারা জানিয়েছে যে অপ্টিমাইজার "যে কোনও প্রশ্নের জন্য" সূচকগুলিকে অগ্রাহ্য করবে যা উল্লেখ সূচকগুলি বা গণিত কলামে বলে। উভয়ই সত্য, বা এটি কি সত্যই "ডেটা পরিবর্তনকারী কোনও কোয়েরি"?
mdoyle

1

শুধু এই সমস্যা ছিল। লোকেরা এখানে যেমন বলেছে, মূল কারণটি একাধিক ক্যোয়ারী পরিকল্পনা, যার মধ্যে একটি সাব-অনুকূল। আমি কেবল যাচাই করতে চেয়েছিলাম যে এরিটিহবার্ট প্রকৃতপক্ষে নিজেই সমস্যার কারণ হতে পারে (যে প্রশ্নটির সাথে আমার সমস্যা ছিল সেটির কোনও পরামিতি ছিল না, যা সমীকরণ থেকে বেরিয়ে আসা প্যারামিটার নেয়)।


1

এটি আমাকে স্কিল সার্ভার ২০০৮ এর দিনে অভিজ্ঞ একই সমস্যাটি মনে করিয়ে দেয়। আমাদের ক্ষেত্রে, আমরা হঠাৎ পাওয়া এক SQL কাজ হঠাৎ (সাধারণত কয়েক সেকেন্ড, এবং এখন 9+ মিনিট) অপচিত, কাজ একটি লিঙ্ক সার্ভার অ্যাক্সেস করা প্রয়োজন, আমরা কাজের ধাপে ARITHABORT সেট যোগ করেন এবং সমস্যা করলো কয়েক দিনের জন্য সমাধান করা হয়েছিল এবং তারপরে ফিরে এসেছিল।

পরে আমরা এমএসের সহায়তায় একটি টিকিট খুলেছিলাম এবং প্রাথমিকভাবে তারা কোনওটিই খুঁজে পেল না এবং টিকিটটি খুব সিনিয়র পিএফই দলের কাছে বাড়ানো হয়েছিল এবং দুজন সমর্থক পিএফই এই সমস্যাটি বের করার চেষ্টা করেছিল।

চূড়ান্ত কারণটি হ'ল ব্যবহারকারীর শংসাপত্রগুলি (কাজের পদক্ষেপটি চালানোর জন্য) অন্তর্নিহিত সারণীর পরিসংখ্যানগুলিতে অ্যাক্সেস করতে পারে না (লিঙ্কযুক্ত সার্ভারের দিকে), এবং সুতরাং কার্যকরভাবে পরিকল্পনাটি অনুকূলিত হয় না।

বিশদভাবে, ব্যবহারকারীর ডিবিসিসি শপ্প্যাটিস্টিক্সে অনুমতি নেই (যদিও ব্যবহারকারী টেবিল থেকে নির্বাচন করতে পারেন)। এমএসডিএন অনুসারে , এই অনুমতি বিধিটি স্কুয়েল ২০১২ এসপি 1 এর পরে পরিবর্তন করা হয়েছে

এসকিউএল সার্ভার এবং এসকিউএল ডাটাবেসের জন্য অনুমতি missions

পরিসংখ্যান অবজেক্টটি দেখতে, ব্যবহারকারীর অবশ্যই টেবিলের মালিক হওয়া উচিত বা ব্যবহারকারীর অবশ্যই সিসাদমিন ফিক্সড সার্ভারের ভূমিকা, db_owner স্থির ডাটাবেস ভূমিকা, বা db_ddladmin স্থির ডাটাবেস ভূমিকা থাকতে হবে।

এসকিউএল সার্ভার 2012 এসপি 1 অনুমতি বিধিনিষেধগুলিকে সংশোধন করে এবং নির্বাচনের অনুমতি প্রাপ্ত ব্যবহারকারীদের এই কমান্ডটি ব্যবহার করার অনুমতি দেয়। নোট করুন যে কমান্ডটি চালনার জন্য পর্যাপ্ত অনুমতিগুলি নির্বাচন করার জন্য নিম্নলিখিত প্রয়োজনীয়তাগুলি উপস্থিত রয়েছে:

এই সমস্যাটি যাচাই করার জন্য, আমাদের কেবলমাত্র লিঙ্কযুক্ত সার্ভারের সাইড ইনসনে প্রোফাইলার চালানো দরকার এবং নীচে প্রদর্শিত হিসাবে "ত্রুটি ও সতর্কতা" বিভাগে কিছু ইভেন্ট চালু করা দরকার।

এখানে চিত্র বর্ণনা লিখুন

আশা করি এই অভিজ্ঞতাটি কোনওভাবে সম্প্রদায়কে সহায়তা করবে।

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