কেন আমি এসকিউএল সার্ভার বিকল্পটি "অ্যাডহক ওয়ার্কলোডের জন্য অনুকূলিত করব" ব্যবহার করব না?


49

আমি এই হিসাবে একটি কিম্বারলি ট্রিপ দ্বারা এসকিউএল সার্ভার পরিকল্পনা ক্যাশে সম্পর্কিত কিছু দুর্দান্ত নিবন্ধ পড়ছি: http://www.sqlskills.com/blogs/kimberly/plan-cache-and-optimizing-for-adoc-workloads/

"অ্যাডহক ওয়ার্কলোডের জন্য অনুকূলিতকরণ" করার বিকল্প কেন আছে? এই সবসময় করা উচিত নয়? বিকাশকারীরা অ্যাড-হক এসকিউএল ব্যবহার করছে বা না, আপনি কেন এই বিকল্পটি সক্ষম করে না এমন প্রতিটি ক্ষেত্রে এটি সমর্থন করে (এসকিউএল ২০০+), যার ফলে ক্যাশে ব্লাট কমে?

উত্তর:


45

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

হ্যাঁ, প্ল্যান ক্যাশে ব্লাট কমাতে অ্যাডহক কাজের চাপের জন্য অনুকূলিতকরণ - তবে সর্বদা এটি প্রথমে পরীক্ষা করুন!

[সম্পাদনা করুন: ক্যালেন ডেলানির একটি আকর্ষণীয় উপাখ্যান বলেছেন যে তিনি তার এক মাইক্রোসফ্ট ইঞ্জিনিয়ার বন্ধুকে জিজ্ঞাসা করেছিলেন যে এমন পরিস্থিতি রয়েছে যেখানে এটি সক্ষম করা উপযুক্ত হবে না কিনা। তিনি বেশ কয়েকদিন পরে ফিরে এসে বললেন - এমন একটি অ্যাপ্লিকেশনটি কল্পনা করুন যাতে প্রচুর পরিমাণে বিভিন্ন প্রশ্ন রয়েছে এবং প্রতিটি ক্যোয়ারী মোট দু'বার করে চলে। তাহলে এটি অনুপযুক্ত হতে পারে। এর মতো অনেক অ্যাপ নেই বলে বলাই যথেষ্ট!]

[সম্পাদনা: আপনার প্রশ্নের সর্বাধিক যদি একাধিকবার কার্যকর করা হয় (ঠিক দ্বিগুণ নয়); এটি সম্ভবত অনুচিত হবে। সাধারণ নিয়মটি হ'ল যদি ডাটাবেসে অনেক এককালীন-ব্যবহার অ্যাডহক প্রশ্ন থাকে; তবে এখনও এর মতো অনেকগুলি অ্যাপ নেই]]


9
+1 নতুন বৈশিষ্ট্যগুলি খুব খুব কমই ডিফল্টরূপে চালু থাকে। এই নির্দিষ্ট বৈশিষ্ট্যটি চালু না করার জন্য আমি কোনও ভাল কারণ সম্পর্কে সত্যিই ভাবতে পারি না - সবচেয়ে খারাপ ক্ষেত্রে আপনার সমস্ত প্রশ্নের একক-ব্যবহার এবং যাইহোক ক্যাশে যাওয়ায় কোনও উপকার হবে না।
অ্যারন বারট্রান্ড

1
এটি সাধারণ জ্ঞানের ভিত্তিতে একটি "নিরাপদ" উত্তর এবং প্রশ্নের সমাধান করে না। প্রশ্নকর্তা বিশেষত ইউজ কেসটি জানতে চান যখন এই বৈশিষ্ট্যটি চালু না করা আরও ভাল for
মাইকটিভিউ 26'13

2
মাইকটিভি - এটি একটি নিরাপদ উত্তর হতে পারে তবে এটি এমন একটি বৈশিষ্ট্য যেখানে আমি সত্যই এটি সক্ষম না করার কারণটি ভাবতে পারি না। এটি যেহেতু দুর্দান্ত, তাই আমি কেবল এটি ব্যাখ্যা করতে চেয়েছিলাম কেন এটি ডিফল্টরূপে বন্ধ ছিল!
পিটার শোফিল্ড

21

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

এটি সক্ষম করার জন্য এটি সবচেয়ে নিরাপদ বিকল্প এবং ব্র্যাড এবং এখানে গ্লেন বেরি দ্বারা এখানে বর্ণনা করা হয়েছে

--- for 2008 and up .. Optimize ad-hoc for workload 
IF EXISTS (
        -- this is for 2008 and up
        SELECT 1
        FROM sys.configurations
        WHERE NAME = 'optimize for ad hoc workloads'
        )
BEGIN
    DECLARE @AdHocSizeInMB DECIMAL(14, 2)
        ,@TotalSizeInMB DECIMAL(14, 2)
        ,@ObjType NVARCHAR(34)

    SELECT @AdHocSizeInMB = SUM(CAST((
                    CASE 
                        WHEN usecounts = 1
                            AND LOWER(objtype) = 'adhoc'
                            THEN size_in_bytes
                        ELSE 0
                        END
                    ) AS DECIMAL(14, 2))) / 1048576
        ,@TotalSizeInMB = SUM(CAST(size_in_bytes AS DECIMAL(14, 2))) / 1048576
    FROM sys.dm_exec_cached_plans

    SELECT 'SQL Server Configuration' AS GROUP_TYPE
        ,' Total cache plan size (MB): ' + cast(@TotalSizeInMB AS VARCHAR(max)) + '. Current memory occupied by adhoc plans only used once (MB):' + cast(@AdHocSizeInMB AS VARCHAR(max)) + '.  Percentage of total cache plan occupied by adhoc plans only used once :' + cast(CAST((@AdHocSizeInMB / @TotalSizeInMB) * 100 AS DECIMAL(14, 2)) AS VARCHAR(max)) + '%' + ' ' AS COMMENTS
        ,' ' + CASE 
            WHEN @AdHocSizeInMB > 200
                OR ((@AdHocSizeInMB / @TotalSizeInMB) * 100) > 25 -- 200MB or > 25%
                THEN 'Switch on Optimize for ad hoc workloads as it will make a significant difference. Ref: http://sqlserverperformance.idera.com/memory/optimize-ad-hoc-workloads-option-sql-server-2008/. http://www.sqlskills.com/blogs/kimberly/post/procedure-cache-and-optimizing-for-adhoc-workloads.aspx'
            ELSE 'Setting Optimize for ad hoc workloads will make little difference !!'
            END + ' ' AS RECOMMENDATIONS
END

7

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


মন্তব্যগুলি বর্ধিত আলোচনার জন্য নয়; এই কথোপকথন চ্যাটে সরানো হয়েছে ।
পল হোয়াইট

7

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

ক্যাচিং ম্যানেজমেন্ট অ্যালগরিদম:

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

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

এর অর্থ হ'ল এই সংবেদনশীল ওয়ান-টাইমার পরিকল্পনাগুলি যখন আপনার সংস্থানগুলি মুক্ত করার দরকার হবে তখন প্রথম হবে।

সুতরাং এখন প্রশ্ন হয়ে ওঠে:

    " কেন আমরা প্রয়োজন 'তদর্থক চাপ জন্য অপ্টিমাইজ করুন' যখন SQL সার্ভার যখন প্রয়োজন অব্যবহৃত পরিকল্পনা সরানোর যত্ন নেয় না? "

করবো, যেটা আমার উত্তর, যদি আপনি নিয়মিত ডাইনামিক-SQL অ স্থিতিমাপ বিজ্ঞাপনের গাদাগাদা উৎপাদিত একজন গুলি-টন আছে -হোক জিজ্ঞাসা, তারপরে এটি এই বৈশিষ্ট্যটি চালু করার জন্য সঠিক ধারণা তৈরি করে।
আপনি সিস্টেমের সংস্থানগুলিতে স্ট্রেন চাপানো এড়াতে চান, যেমন আপনি সর্বোচ্চ ক্যাশে মেমরির জায়গাটি ব্যবহার করার পরে ক্যাশেড / পরিকল্পনা / ডেটা অপসারণকে বাধ্য করে।

কখন এটি চালু করতে হবে তা আমি কীভাবে জানব?

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

--Great query for making the argument to use "Optimize for Ad Hoc Workloads":
SELECT S.CacheType, S.Avg_Use, S.Avg_Multi_Use,
       S.Total_Plan_3orMore_Use, S.Total_Plan_2_Use, S.Total_Plan_1_Use, S.Total_Plan,
       CAST( (S.Total_Plan_1_Use * 1.0 / S.Total_Plan) as Decimal(18,2) )[Pct_Plan_1_Use],
       S.Total_MB_1_Use,   S.Total_MB,
       CAST( (S.Total_MB_1_Use   * 1.0 / S.Total_MB  ) as Decimal(18,2) )[Pct_MB_1_Use]
  FROM
  (
    SELECT CP.objtype[CacheType],
           COUNT(*)[Total_Plan],
           SUM(CASE WHEN CP.usecounts > 2 THEN 1 ELSE 0 END)[Total_Plan_3orMore_Use],
           SUM(CASE WHEN CP.usecounts = 2 THEN 1 ELSE 0 END)[Total_Plan_2_Use],
           SUM(CASE WHEN CP.usecounts = 1 THEN 1 ELSE 0 END)[Total_Plan_1_Use],
           CAST((SUM(CP.size_in_bytes * 1.0) / 1024 / 1024) as Decimal(12,2) )[Total_MB],
           CAST((SUM(CASE WHEN CP.usecounts = 1 THEN (CP.size_in_bytes * 1.0) ELSE 0 END)
                      / 1024 / 1024) as Decimal(18,2) )[Total_MB_1_Use],
           CAST(AVG(CP.usecounts * 1.0) as Decimal(12,2))[Avg_Use],
           CAST(AVG(CASE WHEN CP.usecounts > 1 THEN (CP.usecounts * 1.0)
                         ELSE NULL END) as Decimal(12,2))[Avg_Multi_Use]
      FROM sys.dm_exec_cached_plans as CP
     GROUP BY CP.objtype
  ) AS S
 ORDER BY S.CacheType

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

আমি এটি বলব না, " যখন আপনার এক্স এমবি রয়েছে " বা " যদি আপনার বিজ্ঞাপনের X% একক ব্যবহার হয় " এটি চালু করতে।
এটি স্প্রোকস, ট্রিগারস, ভিউ বা প্যারামিটারাইজড / প্রস্তুত এসকিউএলকে প্রভাবিত করে না - কেবলমাত্র অ্যাড-হকের অনুসন্ধানগুলি qu
আমার ব্যক্তিগত সুপারিশটি হ'ল কেবল আপনার প্রোড পরিবেশে চালু করা, তবে এটি আপনার দেব পরিবেশে ছেড়ে দেওয়া বিবেচনা করুন।
আমি এই বলতে শুধুমাত্র দেব জন্য, কারণ তুমি একটি ক্যোয়ারী করে একটি মিনিট বা তার বেশি রান লাগে নিখুঁত করছি, তাহলে আপনি না এটা 3 বার চালানোর আগে আপনি দেখতে পারেন কিভাবে দ্রুত এটা দিয়ে এটা দিয়ে ক্যাশে যাব চাই - যে একক সময় আপনি এটি সর্বোত্তম অপ্টিমাইজেশন নকশা সন্ধান করতে সম্পাদনা করুন।
যদি আপনার কাজটি সারাদিন এটি করার সাথে জড়িত না থাকে তবে বাদাম হয়ে যান এবং আপনার ডিবিএকে এটি যে কোনও জায়গায় চালু করতে বলুন।


0

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

"সংকলিত পরিকল্পনার স্টাবের সাথে এটি কার্যকর করার পরিকল্পনা নেই এবং পরিকল্পনা হ্যান্ডেলের জন্য অনুসন্ধান করা কোনও এক্সএমএল শোপ্ল্যান ফিরিয়ে দেবে না।" http://technet.microsoft.com/en-us/library/cc645587.aspx

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