অপারেটর স্পিল লেভেল 2 দিয়ে মৃত্যুদন্ড কার্যকর করার সময় ডেটা স্পিল করতে টেম্পিডবি ব্যবহার করে


18

আমি সতর্কতা Operator usedটেম্পিডবিটি দিয়ে একটি ক্যোয়ারী পরিকল্পনায় বাছাইয়ের ক্রিয়াকলাপটি কমিয়ে আনার জন্য সংগ্রাম করছিto spill data during execution with spill level 2

আমি এর সাথে সম্পর্কিত বেশ কিছু পোস্ট পাওয়া যায় বিষ্ফোরণের স্তর 1 সম্পাদনের সময় বিষ্ফোরণের ডেটা , কিন্তু না স্তর 2. লেভেল 1 বলে মনে হয় সৃষ্ট করা Bu পুরানো পরিসংখ্যান , স্তর 2 কি খবর? এর সাথে সম্পর্কিত কিছু খুঁজে পেলাম না level 2

আমি এই নিবন্ধটি বাছাই করার সতর্কতার সাথে সম্পর্কিত খুব আকর্ষণীয় পেয়েছি:

এসকিউএল সার্ভারে কোনও বাছাইয়ের সতর্কতা উপেক্ষা করবেন না

আমার এসকিএল সার্ভার?

মাইক্রোসফ্ট এসকিউএল সার্ভার 2014 (এসপি 2) (কেবি 3171021) - 12.0.5000.0 (এক্স 64) জুন 17 2016 19:14:09 কপিরাইট (গ) মাইক্রোসফ্ট কর্পোরেশন এন্টারপ্রাইজ সংস্করণ (-৪-বিট) উইন্ডোজ এনটি 6.3 (বিল্ড 9600:) (হাইপারভাইজার)

আমার হার্ডওয়্যার?

হারওয়্যারটি অনুসন্ধানের জন্য নীচে ক্যোয়ারী চালাচ্ছেন:

- এসকিউএল সার্ভার 2012 থেকে হার্ডওয়্যার সম্পর্কিত তথ্য

SELECT cpu_count AS [Logical CPU Count], hyperthread_ratio AS [Hyperthread Ratio],
cpu_count/hyperthread_ratio AS [Physical CPU Count], 
physical_memory_kb/1024 AS [Physical Memory (MB)], affinity_type_desc, 
virtual_machine_type_desc, sqlserver_start_time
FROM sys.dm_os_sys_info WITH (NOLOCK) OPTION (RECOMPILE);

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

বরাদ্দ মেমরি বর্তমানে

SELECT
(physical_memory_in_use_kb/1024) AS Memory_usedby_Sqlserver_MB,
(locked_page_allocations_kb/1024) AS Locked_pages_used_Sqlserver_MB,
(total_virtual_address_space_kb/1024) AS Total_VAS_in_MB,
process_physical_memory_low,
process_virtual_memory_low
FROM sys.dm_os_process_memory;

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

আমি যখন আমার জিজ্ঞাসাটি এক বছরের সুযোগ নিয়ে চালাচ্ছি তখন নীচের চিত্র অনুসারে কোনও সতর্কতা পাচ্ছি না:

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

তবে আমি যখন এটি 1 দিনের স্কোপতে চালিত করি তখন আমি এই সতর্কতাটি পাই on the sort operator:

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

এই প্রশ্নটি:

    DECLARE @FromDate SMALLDATETIME = '19-OCT-2016 11:00'
    DECLARE @ToDate   SMALLDATETIME = '20-OCT-2016 12:00'




    SELECT      DISTINCT
                a.strAccountCode ,
                a.strAddressLine6 ,
                a.strPostalCode ,
                CASE    WHEN a.strCountryCode IN ('91','92') THEN 'GB-Int'
                        ELSE a.strCountryCode
                        END AS [strCountryCode]
    FROM        Bocss2.dbo.tblBAccountParticipant AS ap
    INNER JOIN  Bocss2.dbo.tblBAccountParticipantAddress AS apa ON ap.lngParticipantID = apa.lngParticipantID
                                                                AND apa.sintAddressTypeID = 2
    INNER JOIN  Bocss2.dbo.tblBAccountHolder AS ah ON ap.lngParticipantID = ah.lngParticipantID
    INNER JOIN  Bocss2.dbo.tblBAddress AS a ON apa.lngAddressID = a.lngAddressID
                                            AND a.blnIsCurrent = 1
    INNER JOIN  Bocss2.dbo.tblBOrder AS o ON ap.lngParticipantID = o.lngAccountParticipantID
                                        AND o.sdtmOrdCreated >= @FromDate
                                        AND o.sdtmOrdCreated < @ToDate

OPTION(RECOMPILE)

ক্যোয়ারী পরিকল্পনা এখানে

পেস্টেপ্লান ব্যবহার করে ক্যোয়ারী পরিকল্পনা

প্রশ্নসমূহ: 1) ক্যোয়ারী পরিকল্পনায় আমি এটি দেখতে পেয়েছি:

StatementOptmEarlyAbortReason="GoodEnoughPlanFound" CardinalityEstimationModelVersion="70" 

কেন 70? আমি স্কিল সার্ভার 2014 ব্যবহার করছি

2) আমি কীভাবে এই বাছাই করা অপারেটরটি থেকে মুক্তি পাব (যদি সম্ভব হয় তবে)?

3) আমি পৃষ্ঠার জীবনের প্রত্যাশাটি বেশ কম দেখেছি, এই সার্ভারটিতে আরও মেমরি যুক্ত করার পরেও, আমি এই সতর্কতাটি রোধ করতে পারি কিনা তা দেখার জন্য আমার অন্য কোনও জিনিস থাকতে পারে?

চিয়ার্স

শ্যাঙ্কি এবং পল হোয়াইটের উত্তর পরে আপডেট করুন

আমি নীচের স্ক্রিপ্ট অনুযায়ী আমার পরিসংখ্যান পরীক্ষা করেছি এবং সেগুলি সমস্ত সঠিক এবং আপডেট হয়েছে বলে মনে হচ্ছে।

এগুলি এই ক্যোয়ারিতে ব্যবহৃত সমস্ত সূচী এবং সারণী।

DBCC SHOW_STATISTICS ('dbo.tblBAddress','IDXF_tblBAddress_lngAddressID__INC')
GO
DBCC SHOW_STATISTICS  ('dbo.tblBOrder','IX_tblBOrder_sdtmOrdCreated_INCL')
GO
DBCC SHOW_STATISTICS ('dbo.tblBAccountHolder','PK_tblAccountHolder')
GO
DBCC SHOW_STATISTICS ('dbo.tblBAccountParticipant','PK_tblBAccountParticipants')
GO
DBCC SHOW_STATISTICS ('dbo.tblBAccountParticipantAddress','IDXF_tblBAccountParticipantAddress_lngParticipantID')
GO

এটাই আমি ফিরে পেয়েছি:

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

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

এটি একটি আংশিক ফলাফল, তবে আমি তাদের সকলকে আবার দেখা করেছি।

পরিসংখ্যান আপডেটের জন্য আমার কাছে বর্তমানে ওলা হ্যালেনগ্রেন রয়েছে

সূচক অপ্টিমাইজ কাজ - সপ্তাহে একবার চালানোর জন্য নির্ধারিত - রবিবার s

EXECUTE [dbo].[IndexOptimize] 
@Databases = 'USER_DATABASES,-%Archive', 
@Indexes = 'ALL_INDEXES' , 
@FragmentationLow = NULL,
@FragmentationMedium = NULL,
@FragmentationHigh = NULL,
@PageCountLevel=1000,
@StatisticsSample =100
,@UpdateStatistics = 'Index', 
@OnlyModifiedStatistics = 'Y',
@TimeLimit=10800, 
@LogToTable = 'Y'

যদিও আমি নীচের স্ক্রিপ্টটি চালানোর পরে পরিসংখ্যানগুলি আপডেট হয়েছে বলে মনে হয়েছিল, আমি বাছাই করা অপারেটরের উপর আর কোনও সতর্কতা পাইনি।

UPDATE STATISTICS [Bocss2].[dbo].[tblBOrder]  WITH FULLSCAN
--1 hour  04 min 14 sec

UPDATE STATISTICS [Bocss2].[dbo].tblBAddress  WITH FULLSCAN
-- 45 min 29 sec

UPDATE STATISTICS  [Bocss2].[dbo].tblBAccountHolder WITH FULLSCAN
-- 26 SEC

UPDATE STATISTICS  [Bocss2].[dbo].tblBAccountParticipant WITH FULLSCAN
-- 4 min

UPDATE STATISTICS  [Bocss2].[dbo].tblBAccountParticipantAddress WITH FULLSCAN
-- 7 min 3 sec

ক্যোয়ারির সময় কত কমেছিল?
প্রভাবশালী

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

উত্তর:


17

স্তর 2 সম্পর্কে কী? 2 স্তরের সাথে সম্পর্কিত কিছু খুঁজে পাচ্ছি না।

অনুযায়ী এই পুরোনো মাইক্রোসফট ডক Tempdb বিষ্ফোরণের প্রকাশ করে নম্বর কত পাস ডেটা সাজাতে ডেটার উপর আবশ্যক। সুতরাং স্পিল 1 এর অর্থ এটি ডেটা বাছাই করতে 1 সময় অতিক্রম করতে হবে এবং 2 এর অর্থ এটি 2 বার পাস করতে হবে।

ব্লগ থেকে উদ্ধৃতি:

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

কেন 70? আমি স্কিল সার্ভার 2014 ব্যবহার করছি

এটি কারণ ছবিতে ডাটাবেসের সামঞ্জস্যতা স্তরটি 120 নয় (যেটি 2014 এর ডাটাবেসের সামঞ্জস্যের স্তরটি বোঝায়) এটি 120 নয় বলে পুরানো কার্ডিনালিটি অনুমান (সিই) মডেল যা হিসাবে উল্লেখ করা হয়েছে তা ব্যবহার করে প্রক্রিয়া করা হবে CardinalityEstimationModelVersion="70"। আমি নিশ্চিত যে আপনি সচেতন যে এসকিউএল সার্ভার ২০১৪ থেকে আমাদের নতুন সিই হয়েছে।

আমি কীভাবে সেই বাছাই করা অপারেটর থেকে মুক্তি পাব (যদি সম্ভব হয় তবে)?

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

আপনি কার্যকর করার পরিকল্পনায় দেখতে পাচ্ছেন যে সারণির আনুমানিক সংখ্যার সংখ্যা 1, তবে রান সময় 16,353 টি মুখোমুখি হয়। সাজানোর জন্য সংরক্ষিত মেমরির পরিমাণটি ইনপুটটির প্রত্যাশিত (আনুমানিক) আকারের উপর ভিত্তি করে এবং কার্যকর করার সময় বৃদ্ধি করতে পারে না (এই ক্ষেত্রে)।

ক্যোয়ারির জন্য ছোট মেমোরি অনুদান (1632 কেবি) একই সাথে চালিত মেমরি গ্রাসকারী অপারেটরগুলির মধ্যে ভাগ করা হয় (সাজানো এবং 'অনুকূলিতকরণ' লুপ যোগ দেয়)। আপনার পরিকল্পনায়, এর অর্থ সারিগুলি (ইনপুট মেমরি ভগ্নাংশ) পড়ার সময় সাজানোর জন্য 33.33% (544KB) উপলব্ধ available 16,353 টি সারি বাছাই করার জন্য এটি পর্যাপ্ত মেমরি নয়, তাই এটি টেম্পিডবিতে ছড়িয়ে পড়ে । বাছাই সম্পন্ন করার জন্য একটি একক স্তরের স্পিল যথেষ্ট নয়, সুতরাং দ্বিতীয় স্তরের স্পিলিং প্রয়োজন (স্পিল স্তরের আরও বিশদের জন্য শেষে রেফারেন্সটি দেখুন)।

বৈশিষ্ট্যগুলি বাছাই করুন

এসকিউএল সেন্ট্রি প্ল্যান এক্সপ্লোরার হিসাবে দেখা হিসাবে সম্পত্তি বাছাই করুন

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

আমি পৃষ্ঠাগুলির জীবন প্রত্যাশা বেশ কম দেখতে পেয়েছি, এই সার্ভারটিতে আরও মেমরি যুক্ত করার পাশাপাশি, আমি এই সতর্কতাটি রোধ করতে পারি কিনা তা দেখার জন্য আমার অন্য কোনও জিনিস থাকতে পারে?

পিএলই হ'ল I / O ক্রিয়াকলাপের ইঙ্গিত, এটি কি বৃদ্ধি পেয়েছে? এটি প্রায়শই ঘটে থাকে বা কেবল যখন আপনি নির্দিষ্ট ক্যোয়ারি চালাচ্ছেন বা ঠিক আজ ঘটেছিল। হাঁটুর ঝাঁকুনির প্রতিক্রিয়া এড়িয়ে চলুন, প্রথমে আমাদের নিশ্চিত করা দরকার যে আপনি সত্যিই মেমরির চাপ বা এমন কিছু দুর্বৃত্ত কোয়ের মুখোমুখি হয়ে যাচ্ছেন যা খুব বেশি I / O তৈরি করছে। যাইহোক আপনি ইতিমধ্যে এসকিউএল সার্ভারে 97 জি মেমরি বরাদ্দ করেছেন।

স্পিল স্তর এবং আরোহী কী সমস্যা সম্পর্কিত আরও তথ্যের জন্য দেখুন:

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