সূচিপত্র অপ্টিমাইজ করার পরে প্রশ্ন এবং আপডেটগুলি অত্যন্ত ধীর slow


12

ডাটাবেস এসকিউএল সার্ভার 2017 এন্টারপ্রাইজ CU16 14.0.3076.1

আমরা সম্প্রতি ডিফল্ট সূচক পুনর্নির্মাণ রক্ষণাবেক্ষণ কাজগুলি ওলা হাল্লেংরেনে স্যুইচ করার চেষ্টা করেছি IndexOptimize। ডিফল্ট সূচক পুনর্নির্মাণ কাজগুলি কয়েক মাস ধরে কোনও সমস্যা ছাড়াই চলছিল এবং প্রশ্নগুলি এবং আপডেটগুলি গ্রহণযোগ্য সম্পাদনের সময় নিয়ে কাজ করছে। IndexOptimizeডাটাবেস চালানোর পরে :

EXECUTE dbo.IndexOptimize
@Databases = 'USER_DATABASES',
@FragmentationLow = NULL,
@FragmentationMedium = 'INDEX_REORGANIZE,INDEX_REBUILD_ONLINE,INDEX_REBUILD_OFFLINE',
@FragmentationHigh = 'INDEX_REBUILD_ONLINE,INDEX_REBUILD_OFFLINE',
@FragmentationLevel1 = 5,
@FragmentationLevel2 = 30,
@UpdateStatistics = 'ALL',
@OnlyModifiedStatistics = 'Y'

পারফরম্যান্স চরম অবনমিত ছিল। 100 মিটার আগে একটি আপডেট স্টেটমেন্ট IndexOptimizeপরে 78.000 মিমি পরে নিয়েছে (অভিন্ন পরিকল্পনা ব্যবহার করে), এবং কোয়েরিগুলি আরও বেশ কয়েকটি ক্রমের দৈর্ঘ্যের ক্রম সম্পাদন করছে।

যেহেতু এটি এখনও একটি পরীক্ষামূলক ডাটাবেস (আমরা ওরাকল থেকে একটি উত্পাদন সিস্টেম স্থানান্তরিত করছি) আমরা একটি ব্যাকআপ এবং অক্ষম হয়েছি IndexOptimizeএবং সমস্ত কিছুই স্বাভাবিক অবস্থায় ফিরে এসেছি ।

তবে, আমরা বুঝতে চাই IndexOptimizeযে "স্বাভাবিক" থেকে আলাদা কী ঘটে Index Rebuildযা এই চরম পারফরম্যান্সের অবক্ষয়ের কারণ হতে পারে যাতে আমরা প্রযোজনায় যাওয়ার পরে এটি এড়াতে পারি। কী সন্ধান করতে হবে সে সম্পর্কে যে কোনও পরামর্শই প্রশংসিত হবে।

ধীর গতিতে আপডেট বিবৃতিটির জন্য কার্যকর করার পরিকল্পনা। অর্থাত্ বাস্তবায়নের পরিকল্পনা অনুসারে
সূচিপত্র অপ্টিমাইজ করার পরে ( যেমন
আসবে)

আমি একটি পার্থক্য স্পষ্ট করতে সক্ষম হইনি।
দ্রুত বাস্তব বাস্তবায়ন পরিকল্পনা হওয়ার সময় একই ক্যোয়ারির জন্য
পরিকল্পনা করুন

উত্তর:


11

আমি সন্দেহ করি যে আপনি আপনার দুটি রক্ষণাবেক্ষণ পদ্ধতির মধ্যে সংজ্ঞা দিয়ে আলাদা আলাদা নমুনা রেট পেয়েছেন । আমি বিশ্বাস করি যে ওলার স্ক্রিপ্টগুলি পূর্বনির্ধারিত নমুনা ব্যবহার করে আপনি যদি @StatisticsSampleপ্যারামিটারটি নির্দিষ্ট না করেন যা এটি বর্তমানে করছেন বলে মনে হচ্ছে না।

এই মুহূর্তে, এটি জল্পনা, তবে আপনি বর্তমানে আপনার ডেটাবেজে নিম্নোক্ত ক্যোয়ারী চালিয়ে আপনার পরিসংখ্যানগুলিতে স্যাম্পলিং হারটি কী ব্যবহৃত হচ্ছে তা পরীক্ষা করে দেখতে পারেন:

SELECT  OBJECT_SCHEMA_NAME(st.object_id) + '.' + OBJECT_NAME(st.object_id) AS TableName
    ,   col.name AS ColumnName
    ,   st.name AS StatsName
    ,   sp.last_updated
    ,   sp.rows_sampled
    ,   sp.rows
    ,   (1.0*sp.rows_sampled)/(1.0*sp.rows) AS sample_pct
FROM sys.stats st 
    INNER JOIN sys.stats_columns st_col
        ON st.object_id = st_col.object_id
        AND st.stats_id = st_col.stats_id
    INNER JOIN sys.columns col
        ON st_col.object_id = col.object_id
        AND st_col.column_id = col.column_id
    CROSS APPLY sys.dm_db_stats_properties (st.object_id, st.stats_id) sp
ORDER BY 1, 2

আপনি যদি দেখেন যে এটি 1s (যেমন 100%) সম্ভাবনা রয়েছে তবে এটি আপনার সমস্যা। @StatisticsSampleএই কোয়েরীর দ্বারা ফিরে আসা শতাংশের সাথে প্যারামিটার সহ আবার ওলার স্ক্রিপ্টগুলি আবার চেষ্টা করুন এবং দেখুন যে এটি আপনার সমস্যার সমাধান করে?


এই তত্ত্বের অতিরিক্ত সমর্থনকারী প্রমাণ হিসাবে, এক্সিকিউশন প্ল্যান এক্সএমএল ধীর ক্যোয়ারির (2.18233%) বিস্তৃত নমুনার হার দেখায়:

<StatisticsInfo LastUpdate="2019-09-01T01:07:46.04" ModificationCount="0" 
    SamplingPercent="2.18233" Statistics="[INDX_UPP_4]" Table="[UPPDRAG]" 
    Schema="[SVALA]" Database="[ulek-sva]" />

দ্রুত জিজ্ঞাসা বনাম (100%):

<StatisticsInfo LastUpdate="2019-08-25T23:01:05.52" ModificationCount="555" 
    SamplingPercent="100" Statistics="[INDX_UPP_4]" Table="[UPPDRAG]" 
    Schema="[SVALA]" Database="[ulek-sva]" />

@ জোশারডেনল এলএল, এটি দ্বিতীয় ঘটনা যেখানে আপনি কোয়েরি পরিকল্পনায় কিছু সমর্থনকারী পরিসংখ্যানের তথ্য পেয়েছিলেন যা আমি দেখতে ব্যর্থ হয়েছি। সম্পাদনার জন্য ধন্যবাদ!
জন আইজব্রেনার

হাহা আমি ভুলে গেছি তুমি, জন! আমি প্রতিশ্রুতি দিচ্ছি যে আমি আপনাকে লাঠিপেটা করছি না 😅
জোশ ডার্নেল

@ জোশারডনেল আমি অতিরিক্ত অন্তর্দৃষ্টিগুলির প্রশংসা করি এবং এটি আরও একটি ভাল অনুস্মারক যে বাস্তবায়নের পরিকল্পনাগুলিতে এমন অনেক তথ্য রয়েছে যা আপনার ঠিক এড়ানো উচিত নয়।
জন আইজব্রেনার

সাহায্য করে আনন্দ পেলাম! এবং হ্যাঁ, আমি এখানে সমস্ত জিনিস মিস করি (পরিসংখ্যানের জিনিসটি দ্বারা আমি দগ্ধ হয়েছি, তাই কী ঘটছে তা দেখার জন্য আমি দ্রুত সেখানে যাই।
জোশ ডার্নেল

এই ব্যাখ্যাটির জন্য আপনাকে ধন্যবাদ, এটি আসলে সমস্যা ছিল। বেশিরভাগ পরিসংখ্যানের ডিফল্ট নমুনা হার ছিল ২.২% তবে অরাকল থেকে স্থানান্তরের পরে তৈরি হওয়া কয়েকটি এমন নমুনা হার ছিল 100%। মনে হয় ডিফল্ট সূচকটি পুনর্নির্মাণটি 100% রক্ষা করেছে তবে আমরা যখন ইনডেক্স অপটিমাইজ ব্যবহার করি তখন এটি তাদের ক্ষেত্রেও 2.2% এর ডিফল্ট প্রয়োগ করে। @ স্ট্যাটিস্টিক্সস্যাম্পল প্যারামিটার প্রয়োগ করা এবং পুনরায় অনুসন্ধানগুলি চালানো আবার যাচাই করেছে যে এটিই সমস্যাটির কারণ হয়েছিল।
মার্টিন বার্গস্ট্রোম

5

জন এর উত্তর সঠিক সমাধান, এটি কার্যকরভাবে পরিকল্পনার অংশগুলি কী পরিবর্তিত হয়েছিল এবং সেন্টারি ওয়ান প্ল্যান এক্সপ্লোরারের সাথে কীভাবে সহজেই পার্থক্যগুলি চিহ্নিত করা যায় তার উদাহরণ হিসাবে এটি একটি সংযোজন is

ইনডেক্স অপ্টিমাইজ করার আগে ১০০ মাইল নিয়ে যাওয়া একটি আপডেট স্টেটমেন্ট পরে .৮.০০০০ মিমি নিয়েছে (অভিন্ন পরিকল্পনা ব্যবহার করে)

আপনার কার্য সম্পাদন যখন অবনমিত হয়েছিল তখন সমস্ত ক্যোয়ারী পরিকল্পনাগুলি সন্ধান করার সময় আপনি সহজেই পার্থক্যগুলি চিহ্নিত করতে পারেন।

ডিগ্রেড পারফরম্যান্স

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

সিপিইউ সময় এবং অতিবাহিত সময়ের 35 সেকেন্ডেরও বেশি দুটি গুন

প্রত্যাশিত পারফরম্যান্স

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

অনেক ভাল

মূল অবক্ষয় এই আপডেট ক্যোয়ারিতে দ্বিগুণ:

UPDATE SVALA.INGÅENDEANALYS
                           SET 
                              UPPDRAGAVSLUTAT = @NEW$AVSLUTAT
                        WHERE INGÅENDEANALYS.ID IN 
                           (
                              SELECT IA.ID
                              FROM 
                                 SVALA.INGÅENDEANALYS  AS IA 
                                    JOIN SVALA.INGÅENDEANALYSX  AS IAX 
                                    ON IAX.INGÅENDEANALYS = IA.ID 
                                    JOIN SVALA.ANALYSMATERIAL  AS AM 
                                    ON AM.ID = IA.ANALYSMATERIALID 
                                    JOIN SVALA.ANALYSMATERIALX  AS AMX 
                                    ON AMX.ANALYSMATERIAL = AM.ID 
                                    JOIN SVALA.INSÄNTMATERIAL  AS IM 
                                    ON IM.ID = AM.INSÄNTMATERIALID 
                                    JOIN SVALA.INSÄNTMATERIALX  AS IMX 
                                    ON IMX.INSÄNTMATERIAL = IM.ID
                              WHERE IM.UPPDRAGSID = SVALA.PKGSVALA$STRIPVERSION(@NEW$ID)
                      )

অবজ্ঞাত কর্মক্ষমতা সহ এই প্রশ্নের জন্য কার্যকরকরণ পরিকল্পনা

এই আপডেটের ক্যোয়ারির আনুমানিক ক্যোয়ারী পরিকল্পনার কর্মক্ষমতা হ্রাসের সময় খুব বেশি অনুমান হয়:

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

বাস্তবে থাকাকালীন (প্রকৃত বাস্তবায়ন পরিকল্পনা) এখনও কাজ করতে হবে, অনুমানগুলি দেখায় এমন পাগল পরিমাণ নয়।

পারফরম্যান্সের উপর সবচেয়ে বড় প্রভাব নীচে দুটি স্ক্যান এবং হ্যাশ ম্যাচটিতে যোগদান করে:

অবনমিত পারফরম্যান্সের আসল স্ক্যান # 1

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

অবনমিত পারফরম্যান্সের আসল স্ক্যান # 2

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


প্রত্যাশিত পারফরম্যান্স সহ এই প্রশ্নের জন্য কার্যকরকরণ পরিকল্পনা execution

আপনি যখন সাধারণ প্রত্যাশিত পারফরম্যান্সের সাথে ক্যোয়ারী পরিকল্পনার অনুমানের (বা বাস্তব) সাথে তুলনা করেন, তখন পার্থক্যগুলি চিহ্নিত করা সহজ।

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

এছাড়াও, আগের দুটি টেবিলের অ্যাক্সেসগুলি ঘটেনি:

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

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

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

আপনি হ্যাশ জোনে এই বিলোপটি দেখতে পাচ্ছেন না কারণ বিল্ড (শীর্ষ) ইনপুটটি প্রথমে হ্যাশ টেবিলটিতে .োকানো হয়েছে। এরপরে শূন্য মানগুলি এই হ্যাশ টেবিলটিতে প্রোব করা হবে zero


1
পরিকল্পনাগুলির বিশদ বিবরণের জন্য আপনাকে ধন্যবাদ, সমস্যাটি কেন ঘটেছিল তা বোঝার জন্য এটি আমার পক্ষে খুব সহায়ক হয়েছিল। আমি অবশ্যই সেন্ট্রি ওয়ান প্ল্যান এক্সপ্লোরারটির দিকে একবার নজর দেব, এটি দেখতে খুব দরকারী!
মার্টিন বার্গস্ট্রোম

@ মার্টিনবার্গস্ট্রোম এটি শুনে দুর্দান্ত লাগল, ক্যোয়ারী পরিকল্পনা সরবরাহ করার জন্য এবং মন্তব্যে আমরা জিজ্ঞাসা করা সমস্ত প্রাসঙ্গিক তথ্য আমাদের সরবরাহ করার জন্য আপনাকে ধন্যবাদ :) প্ল্যান এক্সপ্লোরার সম্পর্কে সেরা জিনিসটি এটি নিখরচায়! এটি এসএমএসের অভ্যন্তর থেকেও কাজ করতে পারে (এক্সিকিউশন পরিকল্পনার ডান ক্লিক করে এবং "সেন্ড্রোন প্ল্যান এক্সপ্লোরার দিয়ে দেখুন" টিপুন)।
রেন্ডি ভার্টনজেন

1

আরও তথ্য ব্যতীত আমরা কেবল অন্ধকারে হালকাভাবে জানানো ছুরিকা নিতে পারি, সুতরাং আপনার আরও কিছু সরবরাহ করার জন্য প্রশ্নটি সম্পাদনা করা উচিত। উদাহরণস্বরূপ ক্যোয়ারী সেই আপডেটের স্টেটমেন্টের জন্য পরিকল্পনা করেছে যে আপনি সূচি রক্ষণাবেক্ষণ কার্যক্রমের আগে এবং পরে উভয়ই সময় দিয়েছেন, কারণ সূচি সংক্রান্ত পরিসংখ্যান আপডেট হওয়ার কারণে পরিকল্পনাগুলি পৃথক হতে পারে ( https://www.brentozar.com/pastetheplan / এর জন্য দরকারী, এক্সএমএল-এর বিশাল অংশ কী হতে পারে বা সেই স্ক্রিন-গ্র্যাব দেওয়া যা পরিকল্পনার পাঠ্যটিতে কিছু প্রাসঙ্গিক তথ্য অন্তর্ভুক্ত না করে তা পূরণ করার পরিবর্তে এটি দরকারী।

ব্যাট থেকে দুটি খুব সাধারণ পয়েন্ট যদিও:

  1. অপ্টিমাইজড রানটি অবশ্যই শেষ হয়েছে? যদি আপনার পরীক্ষাগুলি দীর্ঘ চলমান সূচক পুনর্নির্মাণের আইওয়ের সাথে প্রতিযোগিতা করে যা সময়কে প্রভাবিত করে।
  2. আপনি একাধিকবার পরীক্ষা করেছেন? আপডেটটি যদি কোনও কোয়েরি থেকে প্রাপ্ত ডেটা ভিত্তিক হয় যা অনেকগুলি ডেটা বিবেচনা করে (একটি সাধারণ `আপডেটের সময়সীমাটি এই কলামটি = 'একটি স্ট্যাটিক মান' এর চেয়ে) তবে এটি হতে পারে যে এই ডেটাটি সাধারণত মেমরিতে থাকে তবে এটিকে বাইরে বের করে দেওয়া হয়েছে in স্মৃতিতে বাফার পুলে ইতিমধ্যে প্রয়োজনীয় পৃষ্ঠাগুলি সন্ধানের পরিবর্তে ডিস্ক আঘাতের কারণে সম্পর্কিত প্রশ্নের প্রথম রানগুলি স্বাভাবিকের চেয়ে ধীর হবে

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

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

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