আরও সিপিইউ এবং র‌্যাম বরাদ্দের পরে ধীর এসকিউএল সার্ভারের কর্মক্ষমতা


33

আমাদের ভার্চুয়াল উইন্ডোজ 2008 আর 2 সার্ভারে এসকিউএল সার্ভার 2008 আর 2 (10.50.1600) চলছে। সিপিইউটি 1 কোর থেকে 4 এবং র‌্যাম 4 জিবি থেকে 10 গিগাবাইটে আপগ্রেড করার পরে আমরা লক্ষ্য করেছি যে কর্মক্ষমতাটি আরও খারাপ।

আমি দেখতে কিছু পর্যবেক্ষণ:

  1. একটি ক্যোয়ারী যা চালাতে <5 সেকেন্ড সময় নিয়েছে এখন> 200 সেকেন্ড নিচ্ছে।
  2. সিপিইউ 100 কে স্কেলসার.অ্যাক্সিকে অপরাধী হিসাবে চিহ্নিত করা হয়।
  3. ৪.6 মিলিয়ন সারি সহ একটি টেবিলে একটি নির্বাচন গণনা (*) 90 সেকেন্ডের বেশি সময় নিয়েছে।
  4. সার্ভারে চলমান প্রক্রিয়াগুলি পরিবর্তন হয়নি। একমাত্র পরিবর্তন ছিল সিপিইউ এবং র‌্যাম বাড়ানো।
  5. অন্যান্য এসকিএল সার্ভারের একটি স্ট্যাটিক পেজিং ফাইল থাকে যেখানে এই সার্ভারটি নিজেরাই এটি পরিচালনা করতে সেট করা আছে।

এর আগে কেউ কি এই ইস্যুতে দৌড়েছে?

প্রতি এসপি_ব্লিটজ এরিক, আমি দৌড়েছি

EXEC dbo.sp_BlitzFirst @SinceStartup = 1;

আমাকে এই ফলাফলগুলি দিচ্ছেন।

পরিসংখ্যান অপেক্ষা করুন


9
গতবার আমি এসই তে একটি অনুরূপ প্রশ্ন দেখেছি, কারণ কেউ ভিএম সিপিইউ এবং র‌্যাম আপ করেছে তবে ভিএম হোস্টের কাছে আসলে এতগুলি সিপিইউ ছিল না এবং এতটা র‌্যাম নেই । তাই আমি আগে এটি পরীক্ষা করে নিই।
ব্যবহারকারী 253751

উত্তর:


55

এখানে অনেক কিছু চলছে, এবং এর বেশিরভাগই বেশ বিস্তৃত এবং অস্পষ্ট।

  1. 2008R2 আরটিএম 21 এপ্রিল, 2010 এ প্রকাশিত হয়েছিল It's এটি সম্পূর্ণরূপে সমর্থনের বাইরে। আপনি প্রায় 3 বছর আগে এসেছিল সর্বশেষতম সার্ভিস প্যাকটিতে অগ্রাধিকার দিতে চাইবেন। আপনি যদি কোনও অদ্ভুত ত্রুটি বা কোনও কিছুর আঘাত করছেন তবে আপনি you'llাকা পড়ে যাবেন। উপর হেড এখানে উপর জিনিসটা কি আপনি ডাউনলোড করতে হবে।

  2. যেহেতু আপনি ভিসিপিইউ যুক্ত করেছেন (1 থেকে 4 পর্যন্ত) এবং কোনও সেটিংস পরিবর্তন করেন নি, আপনার প্রশ্নগুলি এখন সমান্তরালে যেতে পারে। আমি এগুলি জানি যে তারা সমস্ত দ্রুত হবে, তবে স্তব্ধ থাকুন!

  3. আপনি র‌্যাম যুক্ত করে থাকতে পারেন, তবে আপনি সম্ভবত ম্যাক্স সার্ভার মেমরিটি পরিবর্তন করেন নি যাতে আপনার সার্ভার এটির সুবিধা নিতে পারে।

  4. আপনার সার্ভারটি কী অপেক্ষা করছে তা নির্ধারণ করুন। আমি যে ওপেন সোর্স প্রকল্পটিতে কাজ করি তা আপনাকে আপনার এসকিউএল সার্ভার পরিমাপে সহায়তা করার জন্য বিনামূল্যে স্ক্রিপ্ট সরবরাহ করে। মাথা এখানে উপর যদি তাদের ব্যবহার করে দেখুন ওয়ানা।

আপনার সার্ভারের অপেক্ষার পরিসংখ্যানগুলি পরীক্ষা করতে আপনি sp_BlitzFirst নিতে চাইবেন। আপনি এটি কয়েক উপায় চালাতে পারেন।

এটি আপনাকে দেখাবে যে এটি শুরু হওয়ার পরে আপনার সার্ভার অপেক্ষায় রয়েছে।

EXEC dbo.sp_BlitzFirst @SinceStartup = 1;

এটি আপনাকে দেখাবে যে 30 সেকেন্ডের উইন্ডোর সময় এখন কী কী প্রশ্নগুলি অপেক্ষা করা হচ্ছে।

EXEC dbo.sp_BlitzFirst @Seconds = 30, @ExpertMode = 1;

আপনি কী কী জিজ্ঞাসাগুলি অপেক্ষা করছেন তা বুঝতে পেরে (সেখানে অপেক্ষা করার পরিসংখ্যান সম্পর্কে এক টন স্টাফ লেখা আছে), আপনি জিনিসগুলি নিয়ন্ত্রণে পেতে পরিবর্তন শুরু করতে পারেন।

যদি আপনি তাদের অপেক্ষায় থাকতে দেখেন তবে এর CXPACKETঅর্থ আপনার প্রশ্নগুলি সমান্তরাল হয়ে চলেছে এবং সম্ভবত একে অপরকে পদদলিত করে। আপনি যদি এটি আঘাত করেন তবে আপনি সম্ভবত 50 এর সমতুল্যতার জন্য কস্ট থ্রোসোল্ড বাম্পিং এবং ম্যাক্সডপকে 2 এ নেমে যেতে বিবেচনা করতে পারেন।

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

আপনি এসএমএল সার্ভারের সাথে যোগাযোগ করতে ভিএমওয়্যার কাউন্টার সম্পর্কে জনাথন কেহিয়াসের এই নিবন্ধটিও দেখতে চাইতে পারেন out

হালনাগাদ

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

  1. আপনি একটি বিষ অপেক্ষার আঘাত বলা হয় THREADPOOL। আপনার কাছে এটির এক টনও নেই, তবে এটির অর্থ বোঝায় কারণ আপনার সার্ভারটি ভয়ঙ্করভাবে সক্রিয় নয়। আমি কেন এক মিনিটে ব্যাখ্যা করব।

  2. আপনি সত্যিই দীর্ঘ গড় অপেক্ষা করছেন SOS_SCHEDULER_YIELDএবং CXPACKET। আপনি কোনও ভিএম-তে রয়েছেন, সুতরাং আপনি এটি নিশ্চিত করতে চাইবেন যে এসকিউএল সার্ভারের সংরক্ষণ রয়েছে বা বাক্সটি মারাত্মকভাবে ওভারস্ক্রাইব করা হয়নি। একটি শোরগোল প্রতিবেশী সত্যিই এখানে আপনার দিন নষ্ট করতে পারে। আপনি এটি নিশ্চিত করতে চাইবেন যে সার্ভার / ভিএম অতিথি / ভিএম হোস্ট ব্যালেন্সড পাওয়ার মোডে চলমান না। এটি আপনার সিপিইউগুলিকে অহেতুক কম গতিতে নামিয়ে দেয় এবং তত্ক্ষণাত পুরো গতিতে ব্যাক আপ করে না।

  3. তারা কিভাবে টাই করবেন? 4 সিপিইউ সহ আপনার 512 কর্মী থ্রেড রয়েছে। মনে রাখবেন, আপনার একক সিপিইউর সাথে একই পরিমাণ ছিল তবে এখন আপনার প্রশ্নগুলি সমান্তরালে যেতে পারে, তারা আরও অনেক কর্মী থ্রেড গ্রাস করতে পারে। আপনার ক্ষেত্রে সমান্তরাল ক্যোয়ারির সমান্তরাল শাখায় 4 টি থ্রেড।

কি সমান্তরাল যাচ্ছে? সম্ভবত সব কিছু। সমান্তরালতা জন্য ডিফল্ট খরচ বিক্রেতার 5. হলে সংখ্যা প্রয়াত একটি ডেস্কটপ কাজ 90s মধ্যে ডিফল্ট একদা যে লাগছিল হয়েছিল যে এই রকম

পাগল

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

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

আপনি কি করতে পারেন?

  1. ব্যালেন্সড পাওয়ার মোডে কিছুই নেই তা নিশ্চিত করুন
  2. MAXDOP 2 এ পরিবর্তন করুন
  3. সমান্তরালতার জন্য 50 এর দামের প্রান্তিক পরিবর্তন করুন
  4. ভিএম স্বাস্থ্যকে বৈধতা দেওয়ার জন্য উপরের জোন কে। নিবন্ধটি অনুসরণ করুন
  5. যে sp_BlitzIndexকোনও অনুপস্থিত সূচক অনুরোধগুলি সন্ধান করতে ডাকা স্ক্রিপ্টটি ব্যবহার করুন ।

আরও পুঙ্খানুপুঙ্খ সমস্যার সমাধানের জন্য, ক্লাউডে হার্ডওয়্যার আকার দেওয়ার বিষয়ে আমি গুগলের জন্য যে হুইটপেপারটি লিখেছি তা পরীক্ষা করে দেখুন ।

আশাকরি এটা সাহায্য করবে!


8

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


5

একটি জিনিস যা আমি উল্লেখ করে দেখিনি, তা হ'ল একটি ভিএম-তে ভিসিপিইউ যুক্ত করা সময়সূচির কারণে প্রায়শই এটি ধীর করতে পারে।

মূল ধারণাটি হ'ল যদি কোনও ভিএম-তে 4 টি ভিসিপিইউ থাকে, তবে হাইপারভাইজারের অবশ্যই 4 টি শারীরিক কোরের উপলব্ধ হওয়ার জন্য অপেক্ষা করতে হবে যাতে এটি 3 টি নিষ্ক্রিয় থাকলেও সমস্ত ভিসিপিইউকে নির্ধারিত করতে পারে।

যদি আপনার হোস্টে প্রচুর কোর না থাকে এবং আপনার অন্যান্য কাজের চাপ ব্যস্ত থাকে, তবে এটি অতিরিক্ত অপেক্ষা এবং কার্যক্ষমতাতে উল্লেখযোগ্য পরিমাণে হ্রাস পেতে পারে।

ভিএমওয়্যার ইএসএক্সিতে আপনি এটি সিপিইউ রেডি এর মাধ্যমে উন্নত গ্রাফগুলিতে দেখতে পাবেন।

এটি ঘটছে এবং কীভাবে এটি নির্ণয় করা হয়েছিল তার বাস্তব বিশ্বের উদাহরণ সহ অনেক নিবন্ধগুলির একটি এখানে

ভিএম এর র‌্যাম বরাদ্দ যদি একটি NUMA নোডের চেয়ে বড় হয় তবে আরও র‌্যাম যুক্ত করা হঠাৎ কার্যকারিতা হ্রাস পেতে পারে।

অতিরিক্তভাবে, আপনার ভিসিপিইউগুলির কনফিগারেশন (vSocket বনাম vCores) আসলে এসকিউএল সার্ভারের মতো কিছু অ্যাপ্লিকেশনকে প্রভাবিত করতে পারে। এটি কারণ এসকিউএল সার্ভার নিজেই NUMA সচেতন (একই ধরণের NUMA- স্প্যানিং পারফরম্যান্স ড্রপ এড়াতে) এবং কারণ ভিএমওয়্যার ভার্চুয়াল NUMA নোডকে আলাদাভাবে উপস্থাপন করতে পারে।

এটি ভিএমওয়্যারের নিজস্ব সাইটে একটি ব্লগ পোস্টে আচ্ছাদিত


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


3

@ স্প_ব্লিটজ এরিকের উত্তর অবিরত রেখে কেবল একটি সামান্য সহায়তা (পিছু নিতে পারে না), পিনাল এবং ম্যাক্স ভার্ননের সাথে আমি কিছু প্রশ্ন পেয়েছি (কোথায় স্মরণ করতে পারি না) যে আপনাকে কতটা ম্যাক্সডপ ব্যবহার করা উচিত তা বলে:

/*************************************************************************
Author          :   Kin Shah
Purpose         :   Recommend MaxDop settings for the server instance
Tested RDBMS    :   SQL Server 2008R2

**************************************************************************/
declare @hyperthreadingRatio bit
declare @logicalCPUs int
declare @HTEnabled int
declare @physicalCPU int
declare @SOCKET int
declare @logicalCPUPerNuma int
declare @NoOfNUMA int

select @logicalCPUs = cpu_count -- [Logical CPU Count]
    ,@hyperthreadingRatio = hyperthread_ratio --  [Hyperthread Ratio]
    ,@physicalCPU = cpu_count / hyperthread_ratio -- [Physical CPU Count]
    ,@HTEnabled = case 
        when cpu_count > hyperthread_ratio
            then 1
        else 0
        end -- HTEnabled
from sys.dm_os_sys_info
option (recompile);

select @logicalCPUPerNuma = COUNT(parent_node_id) -- [NumberOfLogicalProcessorsPerNuma]
from sys.dm_os_schedulers
where [status] = 'VISIBLE ONLINE'
    and parent_node_id < 64
group by parent_node_id
option (recompile);

select @NoOfNUMA = count(distinct parent_node_id)
from sys.dm_os_schedulers -- find NO OF NUMA Nodes 
where [status] = 'VISIBLE ONLINE'
    and parent_node_id < 64

-- Report the recommendations ....
select
    --- 8 or less processors and NO HT enabled
    case 
        when @logicalCPUs < 8
            and @HTEnabled = 0
            then 'MAXDOP setting should be : ' + CAST(@logicalCPUs as varchar(3))
                --- 8 or more processors and NO HT enabled
        when @logicalCPUs >= 8
            and @HTEnabled = 0
            then 'MAXDOP setting should be : 8'
                --- 8 or more processors and HT enabled and NO NUMA
        when @logicalCPUs >= 8
            and @HTEnabled = 1
            and @NoofNUMA = 1
            then 'MaxDop setting should be : ' + CAST(@logicalCPUPerNuma / @physicalCPU as varchar(3))
                --- 8 or more processors and HT enabled and NUMA
        when @logicalCPUs >= 8
            and @HTEnabled = 1
            and @NoofNUMA > 1
            then 'MaxDop setting should be : ' + CAST(@logicalCPUPerNuma / @physicalCPU as varchar(3))
        else ''
        end as Recommendations

-------------------------------------------------- -------

--MAX VERNON 

/* 
   This will recommend a MAXDOP setting appropriate for your machine's NUMA memory
   configuration.  You will need to evaluate this setting in a non-production 
   environment before moving it to production.

   MAXDOP can be configured using:  
   EXEC sp_configure 'max degree of parallelism',X;
   RECONFIGURE

   If this instance is hosting a Sharepoint database, you MUST specify MAXDOP=1 
   (URL wrapped for readability)
   http://blogs.msdn.com/b/rcormier/archive/2012/10/25/
   you-shall-configure-your-maxdop-when-using-sharepoint-2013.aspx

   Biztalk (all versions, including 2010): 
   MAXDOP = 1 is only required on the BizTalk Message Box
   database server(s), and must not be changed; all other servers hosting other 
   BizTalk Server databases may return this value to 0 if set.
   http://support.microsoft.com/kb/899000
*/
SET NOCOUNT ON;

DECLARE @CoreCount int;
SET @CoreCount = 0;
DECLARE @NumaNodes int;

/*  see if xp_cmdshell is enabled, so we can try to use 
    PowerShell to determine the real core count
*/
DECLARE @T TABLE (
    name varchar(255)
    , minimum int
    , maximum int
    , config_value int
    , run_value int
);
INSERT INTO @T 
EXEC sp_configure 'xp_cmdshell';
DECLARE @cmdshellEnabled BIT;
SET @cmdshellEnabled = 0;
SELECT @cmdshellEnabled = 1 
FROM @T
WHERE run_value = 1;
IF @cmdshellEnabled = 1
BEGIN
    CREATE TABLE #cmdshell
    (
        txt VARCHAR(255)
    );
    INSERT INTO #cmdshell (txt)
    EXEC xp_cmdshell 'powershell -OutputFormat Text -NoLogo -Command "& {Get-WmiObject -namespace "root\CIMV2" -class Win32_Processor -Property NumberOfCores} | select NumberOfCores"';
    SELECT @CoreCount = CONVERT(INT, LTRIM(RTRIM(txt)))
    FROM #cmdshell
    WHERE ISNUMERIC(LTRIM(RTRIM(txt)))=1;
    DROP TABLE #cmdshell;
END
IF @CoreCount = 0 
BEGIN
    /* 
        Could not use PowerShell to get the corecount, use SQL Server's 
        unreliable number.  For machines with hyperthreading enabled
        this number is (typically) twice the physical core count.
    */
    SET @CoreCount = (SELECT i.cpu_count from sys.dm_os_sys_info i); 
END

SET @NumaNodes = (
    SELECT MAX(c.memory_node_id) + 1 
    FROM sys.dm_os_memory_clerks c 
    WHERE memory_node_id < 64
    );

DECLARE @MaxDOP int;

/* 3/4 of Total Cores in Machine */
SET @MaxDOP = @CoreCount * 0.75; 

/* if @MaxDOP is greater than the per NUMA node
    Core Count, set @MaxDOP = per NUMA node core count
*/
IF @MaxDOP > (@CoreCount / @NumaNodes) 
    SET @MaxDOP = (@CoreCount / @NumaNodes) * 0.75;

/*
    Reduce @MaxDOP to an even number 
*/
SET @MaxDOP = @MaxDOP - (@MaxDOP % 2);

/* Cap MAXDOP at 8, according to Microsoft */
IF @MaxDOP > 8 SET @MaxDOP = 8;

PRINT 'Suggested MAXDOP = ' + CAST(@MaxDOP as varchar(max));

প্রথম স্ক্রিপ্ট একটি ফাঁকা ফলাফল দেয়। দ্বিতীয়টি একটি প্রস্তাবিত MAXDOP = 2যা @sp_BlitzErik এর সাথে সামঞ্জস্যপূর্ণ ফেরত দেয়। ধন্যবাদ!
জেফ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.