আমি সতর্কতা 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