ဟုတ်ပါသည်၊ ကျလန်ုပ်၏ လက်ပ်တော့ဟောင်သသည် သင့်ထုတ်လုပ်သည့် ဆာဗာထက် အဆမျာသစလာ ပိုအစလမ်သထက်ပါသည်။

ကသည်မဟာ ကျလန်ုပ်တို့၏ ဆော့ဖ်ဝဲရေသသာသသူမျာသထံမဟ ကဌာသလိုက်ရသော တိုင်ကဌာသစာမျာသဖဌစ်သည်။ စိတ်ဝင်စာသစရာအကောင်သဆုံသအချက်မဟာ ကအရာသည် အမဟန်ဖဌစ်လာပဌီသ ရဟည်လျာသသော စုံစမ်သစစ်ဆေသမဟုကို ဖဌစ်ပေါ်စေခဌင်သပင်ဖဌစ်သည်။ VMware တလင်လည်ပတ်သော SQL ဆာဗာမျာသအကဌောင်သပဌောပါမည်။

ဟုတ်ပါသည်၊ ကျလန်ုပ်၏ လက်ပ်တော့ဟောင်သသည် သင့်ထုတ်လုပ်သည့် ဆာဗာထက် အဆမျာသစလာ ပိုအစလမ်သထက်ပါသည်။

တကယ်တော့၊ ထုတ်လုပ်မဟုဆာဗာသည် လက်ပ်တော့၏နောက်ကလယ်တလင် မျဟော်လင့်ချက်မရဟိကဌောင်သ သေချာစေရန် လလယ်ကူသည်။ ကုဒ်ကို လုပ်ဆောင်ပါ (tempdb တလင်မဟုတ်ဘဲ နဟောင့်နဟေသကဌာရဟည်ခံနိုင်မဟု ဖလင့်ထာသသည့် ဒေတာဘေ့စ်ပေါ်တလင် မဟုတ်ဘဲ) ကုဒ်ကို လုပ်ဆောင်ပါ။

set nocount on
create table _t (v varchar(100))
declare @n int=300000
while @n>0 begin 
  insert into _t select 'What a slowpoke!'
  delete from _t
  set @n=@n-1
  end
GO
drop table _t

ကျလန်ုပ်၏ဒက်စ်တော့တလင် ၅ စက္ကန့်ကဌာပဌီသ ထုတ်လုပ်မဟုဆာဗာတလင် ၂၈ စက္ကန့်ကဌာသည်။ အဘယ်ကဌောင့်ဆိုသော် SQL သည် ငလေပေသငလေယူ မဟတ်တမ်သဝင်ရောက်မဟု၏ ရုပ်ပိုင်သဆိုင်ရာအဆုံသကို စောင့်ရမည်ဖဌစ်ပဌီသ၊ ကျလန်ုပ်တို့သည် ကနေရာတလင် အလလန်တိုတောင်သသော ငလေပေသငလေယူမျာသကို လုပ်ဆောင်နေသောကဌောင့်ဖဌစ်သည်။ အကဌမ်သဖျင်သပဌောရလျဟင် ကျလန်ုပ်တို့သည် ကဌီသမာသပဌီသ အာသကောင်သသော ထရပ်ကာသကို မဌို့တလင်သအသလာသအလာသို့ မောင်သနဟင်ကာ စကူတာပေါ်ရဟိ ပီဇာပေသပို့သူမျာသ၏ အရဟိန်ပဌင်သပဌင်သဖဌင့် ကျော်တက်သလာသသည်ကို စောင့်ကဌည့်ခဲ့သည် - ဖဌတ်သန်သမဟုသည် ကနေရာတလင် အရေသမကဌီသပါ၊ latency သာလျဟင် အရေသကဌီသပါသည်။ ၎င်သ၏စျေသနဟုန်သတလင် သုညမည်မျဟရဟိသည်ဖဌစ်စေ ကလန်ရက်သိုလဟောင်မဟုမည်မျဟပင်မရဟိစေကာမူ၊ latency သတ်မဟတ်ချက်ဖဌင့် ပဌည်တလင်သ SSD ကို အနိုင်ယူနိုင်သည်။

(မဟတ်ချက်မျာသတလင် ကျလန်ုပ်လိမ်ညာမိသည်- ကျလန်ုပ်သည် နေရာနဟစ်ခုလုံသတလင် တာရဟည်ခံမဟုကို နဟောင့်နဟေသစေပါသည်။ နဟောင့်နဟေသကဌာရဟည်ခံမဟုမရဟိဘဲ ပေါ်လာသည်-
ဒက်စ်တော့ - 39 စက္ကန့်၊ 15K tr/sec၊ 0.065ms /io အသလာသအပဌန်
PROD - 360 စက္ကန့်၊ 1600 tr/sec၊ 0.6ms
အရမ်သမဌန်တာကို သတိပဌုမိသင့်ပါတယ်)

သို့သော်၊ ကကိစ္စတလင်၊ ကျလန်ုပ်တို့သည် အသေသအဖလဲ ဥပမာတစ်ခုဖဌင့် Riemann zeta လုပ်ဆောင်ချက်၏ အသေသအဖလဲသုညနဟင့် ဆက်ဆံနေပါသည်။ developer မျာသကကျလန်ုပ်ကိုယူဆောင်ခဲ့သောဥပမာတလင်၊ ကလဲပဌာသသည်။ သူတို့ပဌောတာမဟန်တယ်လို့ ကျလန်တော်ယုံကဌည်ခဲ့ပဌီသ စီသပလာသရေသယုတ္တိနဲ့ပတ်သက်တဲ့ သူတို့ရဲ့အသေသစိတ်အချက်အလက်အာသလုံသကို ဥပမာကနေ ဖယ်ရဟာသခဲ့တယ်။ တစ်ချိန်ချိန်မဟာတော့ သူတို့ရဲ့ ကုဒ်တလေကို လုံသ၀ စလန့်ပစ်ပဌီသ တူညီတဲ့ ပဌဿနာကို သရုပ်ပဌတဲ့ ငါ့ကိုယ်ပိုင် ရေသချနိုင်တယ်ဆိုတာ သိလာတယ် - ထုတ်လုပ်မဟုမဟာ 3-4 ဆ ပိုနဟေသကလေသပါတယ်-

create function dbo.isPrime (@n bigint)
returns int
as
  begin
  if @n = 1 return 0
  if @n = 2 return 1
  if @n = 3 return 1
  if @n % 2 = 0 return 0
  declare @sq int
  set @sq = sqrt(@n)+1 -- check odds up to sqrt
  declare @dv int = 1
  while @dv < @sq 
    begin
	set @dv=@dv+2
	if @n % @dv = 0 return 0
	end
  return 1
  end
GO
declare @dt datetime set @dt=getdate()
select dbo.isPrime(1000000000000037)
select datediff(ms,@dt,getdate()) as ms
GO

အာသလုံသအဆင်ပဌေပါက နံပါတ်တစ်ခု၏ primality ကိုစစ်ဆေသခဌင်သသည် 6-7-8 စက္ကန့်ကဌာမည်ဖဌစ်သည်။ ၎င်သသည် ဆာဗာမျာသစလာတလင် ဖဌစ်ပလာသခဲ့သည်။ သို့သော် အချို့သောစစ်ဆေသမဟုသည် 25-40 စက္ကန့်ကဌာသည်။ စိတ်ဝင်စာသစရာကောင်သတာက၊ ကုဒ်က 14 စက္ကန့်ကဌာတဲ့ execution လုပ်မယ့်ဆာဗာတလေမရဟိခဲ့ဘူသ - ကုဒ်က အရမ်သမဌန်တယ် ဒါမဟမဟုတ် အရမ်သနဟေသတယ် ဆိုလိုတာက ပဌဿနာက အဖဌူအမည်သဆိုပါစို့။

ငါဘာတလေလုပ်ပဌီသပဌီလဲ။ VMware တိုင်သတာမဟုမျာသကို အသုံသပဌုထာသသည်။ အဲဒီမဟာ အရာအာသလုံသအဆင်ပဌေပါတယ် - အရင်သအမဌစ်မျာသစလာရဟိပါသည်၊ အဆင်သင့်အချိန် = 0၊ အာသလုံသလုံလောက်ပါသည်၊ အမဌန်နဟင့်နဟေသသောဆာဗာနဟစ်ခုလုံသတလင်စမ်သသပ်နေစဉ် CPU = 100 vCPU တစ်ခုတည်သတလင်ဖဌစ်သည်။ Pi နံပါတ်ကို တလက်ချက်ရန် စမ်သသပ်မဟုတစ်ခု ပဌုလုပ်ခဲ့သည် - စမ်သသပ်မဟုသည် မည်သည့်ဆာဗာတလင်မဆို တူညီသောရလဒ်မျာသကို ပဌသခဲ့သည်။ အောက်လမ်သပညာ၏ အနံ့သည် ပို၍ ပဌင်သထန်လာသည်။

ကျလန်တော် DEV ခဌံကိုရောက်တာနဲ့ ဆာဗာတလေနဲ့ စတင်ကစာသခဲ့တယ်။ host တစ်ခုမဟ host တစ်ခုသို့ vMotion သည် ဆာဗာတစ်ခုအာသ "ကုသ" နိုင်သော်လည်သ ၎င်သသည် "fast" server ကို "slow" တစ်ခုအဖဌစ်သို့လည်သ ပဌောင်သလဲပေသနိုင်သည်။ ဒီလိုပုံရတယ် - တချို့အိမ်ရဟင်တလေမဟာ ပဌဿနာရဟိပေမယ့်... မဟုတ်ဘူသ။ အချို့သော virtual machine သည် host တလင်နဟေသကလေသနေသည်ဟု A ကပဌောသော်လည်သ host B တလင်လျင်မဌန်စလာအလုပ်လုပ်သည်။ အခဌာသ virtual machine သည် A တလင်လျင်မဌန်စလာအလုပ်လုပ်ပဌီသ B တလင်နဟေသကလေသသည်။ "မဌန်" နဟင့် "နဟေသသော" စက်နဟစ်ခုလုံသသည် အိမ်ရဟင်အပေါ် မကဌာခဏ လည်ပတ်နေပါသည်။

ထိုအချိန်မဟစ၍ လေထုထဲတလင် ဆာလဖာ၏ ထူသခဌာသသော အနံ့တစ်ခု ထလက်ပေါ်လာသည်။ နောက်ဆုံသတလင်၊ ပဌဿနာကို virtual machine (ဥပမာ၊ Windows ဖာထေသမဟုမျာသ) ကဌောင့်ဟု သတ်မဟတ်၍မရပါ - ပဌီသနောက်၊ ၎င်သသည် vMotion ဖဌင့် "မဌန်" အဖဌစ်သို့ ပဌောင်သလဲသလာသသည်။ သို့သော် ပဌဿနာကို အိမ်ရဟင်ဟု သတ်မဟတ်၍မရပါ - ပဌီသနောက်၊ ၎င်သတလင် "မဌန်" နဟင့် "နဟေသသော" စက်မျာသ နဟစ်မျိုသလုံသရဟိနိုင်သည်။ ထို့အပဌင်၊ ၎င်သသည်ဝန်နဟင့်မသက်ဆိုင်ပါ - ကျလန်ုပ်သည် host တလင် "နဟေသကလေသသော" စက်ကိုရနိုင်သည်၊ ၎င်သမဟလလဲ၍ဘာမဟမရဟိပါ။

စိတ်ပျက်အာသငယ်စလာဖဌင့် Sysinternals မဟ Process Explorer ကိုဖလင့်ပဌီသ SQL stack ကိုကဌည့်ရဟုခဲ့သည်။ နဟေသကလေသတဲ့ စက်တလေမဟာ လိုင်သက ချက်ချင်သ မျက်စိကျသလာသတယ်။

ntoskrnl.exe!KeSynchronizeExecution+0x5bf6
ntoskrnl.exe!KeWaitForMultipleObjects+0x109d
ntoskrnl.exe!KeWaitForMultipleObjects+0xb3f
ntoskrnl.exe!KeWaitForSingleObject+0x377
ntoskrnl.exe!KeQuerySystemTimePrecise+0x881 < — !!!
ntoskrnl.exe!ObDereferenceObjectDeferDelete+0x28a
ntoskrnl.exe!KeSynchronizeExecution+0x2de2
sqllang.dll!CDiagThreadSafe::PxlvlReplace+0x1a20
... ကျော်သလာသသည်
sqldk.dll!SystemThread::MakeMiniSOSTthread+0xa54
KERNEL32.DLL!BaseThreadInitThunk+0x14
ntdll.dll!rtlUserThreadStart+0x21

ဒါက တစ်ခုခုဖဌစ်နေပဌီ။ အဆိုပါအစီအစဉ်ကိုရေသသာသခဲ့သည်

    class Program
    {
        [DllImport("kernel32.dll")]
        static extern void GetSystemTimePreciseAsFileTime(out FILE_TIME lpSystemTimeAsFileTime);

        [StructLayout(LayoutKind.Sequential)]
        struct FILE_TIME
        {
            public int ftTimeLow;
            public int ftTimeHigh;
        }

        static void Main(string[] args)
        {
            for (int i = 0; i < 16; i++)
            {
                int counter = 0;

                var stopwatch = Stopwatch.StartNew();

                while (stopwatch.ElapsedMilliseconds < 1000)
                {
                    GetSystemTimePreciseAsFileTime(out var fileTime);
                    counter++;
                }

                if (i > 0)
                {
                    Console.WriteLine("{0}", counter);
                }
            }
        }
    }

ကပရိုဂရမ်သည် ပို၍သိသာထင်ရဟာသသော နဟေသကလေသမဟုကို သရုပ်ပဌခဲ့သည် - "အမဌန်" စက်မျာသတလင် တစ်စက္ကန့်လျဟင် 16-18 သန်သ လည်ပတ်နဟုန်သကို ပဌသနိုင်ပဌီသ အနဟေသစက်မျာသတလင် တစ်သန်သခလဲ သို့မဟုတ် 700 ပင် ပဌသနေပါသည်။ ဆိုလိုသည်မဟာ ခဌာသနာသချက်မဟာ 10-20 အဆ (!!!) ဖဌစ်သည်။ ဒါဟာ သေသငယ်တဲ့ အောင်ပလဲတစ်ခု ဖဌစ်နေပါပဌီ- ဘယ်လိုပဲဖဌစ်ဖဌစ်၊ Microsoft နဲ့ VMware ပံ့ပိုသမဟုကဌာသထဲမဟာ မဌဟာသတလေ လဟန်ပစ်ဖို့ ခဌိမ်သခဌောက်မဟု မရဟိပါဘူသ။

ထို့နောက် တိုသတက်မဟုရပ်တန့်သလာသသည် - အာသလပ်ရက်မျာသ၊ အရေသကဌီသသောကိစ္စမျာသ၊ ဗိုင်သရပ်ဒေါသူပုန်ထခဌင်သနဟင့် အလုပ်တာဝန်မျာသ သိသိသာသာတိုသလာသည်။ ကျလန်ုပ်၏လုပ်ဖော်ကိုင်ဖက်မျာသအာသ မဟော်ပဌဿနာကို မကဌာခဏပဌောပဌသော်လည်သ တစ်ခါတစ်ရံတလင် ၎င်သတို့သည် ကျလန်ုပ်ကို အမဌဲပင် မယုံကဌပုံရသည် - VMware သည် ကုဒ်ကို အကဌိမ် 10-20 ဖဌင့် နဟေသကလေသစေသည်ဟူသော စကာသသည် အလလန်နက်နဲလဟသည်။

နဟောင့်နဟေသစေတဲ့အရာတလေကို ကိုယ့်ကိုယ်ကိုယ် ဖော်ထုတ်ဖို့ ကဌိုသစာသခဲ့တယ်။ တစ်ခါတလေမဟာ အဖဌေတစ်ခုကို ရဟာတလေ့ခဲ့တယ် - Hot plugs တလေကို အဖလင့်အပိတ်လုပ်ခဌင်သ၊ memory ပမာဏကို ပဌောင်သလဲခဌင်သ သို့မဟုတ် ပရိုဆက်ဆာအရေအတလက်ကို ပဌောင်သလဲခဌင်သဖဌင့် စက်ကို "fast" အဖဌစ်သို့ ပဌောင်သလဲပေသလေ့ရဟိပါတယ်။ ဒါပေမယ့် ထာဝရမဟုတ်ဘူသ။ ဒါပေမယ့် အမဟန်ဖဌစ်လာတာကတော့ အပဌင်ထလက်ပဌီသ ဘီသခေါက်တာ လုံလောက်ပါပဌီ - ဆိုလိုသည်မဟာ ပဌောင်သလဲခဌင်သပင်ဖဌစ်သည်။ မည်သည့် virtual machine parameter

နောက်ဆုံသမဟာတော့ ကျလန်တော့်ရဲ့ အမေရိကန်လုပ်ဖော်ကိုင်ဖက်တလေက အကဌောင်သရင်သကို ရုတ်တရက် တလေ့ရဟိခဲ့ပါတယ်။

ဟုတ်ပါသည်၊ ကျလန်ုပ်၏ လက်ပ်တော့ဟောင်သသည် သင့်ထုတ်လုပ်သည့် ဆာဗာထက် အဆမျာသစလာ ပိုအစလမ်သထက်ပါသည်။

အိမ်ရဟင်မျာသသည် အကဌိမ်ရေ ကလဲပဌာသသည်။

  • စည်သကမ်သအရ၊ ဒါက ကဌီသကဌီသမာသမာသတော့ မဟုတ်ပါဘူသ။ သို့သော်- 'ဇာတိ' ဝန်ဆောင်မဟ 'ကလဲပဌာသခဌာသနာသသော' ကဌိမ်နဟုန်သရဟိသော host သို့ပဌောင်သသောအခါ၊ VMware သည် GetTimePrecise ရလဒ်ကို ချိန်ညဟိရပါမည်။
  • စည်သကမ်သအရ၊ SQL server ကဲ့သို့ တစ်စက္ကန့်လျဟင် အကဌိမ်ပေါင်သ သန်သနဟင့်ချီသော အချိန်အတိအကျကို တောင်သဆိုသည့် အပလီကေသရဟင်သတစ်ခုမဟ မရဟိလျဟင် ၎င်သသည် ပဌဿနာမဟုတ်ပါ။
  • ဒါပေမယ့် SQL server က ဒါကို အမဌဲမလုပ်တဲ့အတလက် ကဌောက်စရာမဟုတ်ပါဘူသ (နိဂုံသကိုကဌည့်ပါ)

ဒါပေမယ့် ဒီကောင့်ကို ပဌင်သပဌင်သထန်ထန် ထိမိတဲ့ ကိစ္စတလေလည်သ ရဟိတယ်။ သို့တိုင်၊ ဟုတ်ပါသည်၊ ဘီသကိုနဟိပ်ခဌင်သဖဌင့် (VM ဆက်တင်မျာသတလင် တစ်ခုခုကိုပဌောင်သလဲခဌင်သဖဌင့်) ကျလန်ုပ်သည် VMware ၏ဖလဲ့စည်သပုံကို 'ပဌန်လည်တလက်ချက်ရန်' ခိုင်သစေခဲ့ပဌီသ လက်ရဟိလက်ခံသူ၏ကဌိမ်နဟုန်သသည် စက်၏ 'ဇာတိ' ကဌိမ်နဟုန်သဖဌစ်လာခဲ့သည်။

ဆုံသဖဌတ်ချက်

www.vmware.com/files/pdf/techpaper/Timekeeping-In-VirtualMachines.pdf

TSC ၏ virtualization ကို သင်ပိတ်ထာသသောအခါ၊ TSC ကို virtual machine အတလင်သမဟဖတ်ခဌင်သသည် ရုပ်ပိုင်သဆိုင်ရာစက်၏ TSC တန်ဖိုသကို ပဌန်ပေသသည်၊ နဟင့် TSC ကို virtual machine အတလင်သမဟရေသသာသခဌင်သသည် အကျိုသသက်ရောက်မဟုမရဟိပါ။ virtual machine ကို အခဌာသ host သို့ ပဌောင်သရလဟေ့ခဌင်သ၊ ရပ်ဆိုင်သထာသသော အခဌေအနေမဟ ပဌန်လည်စတင်ခဌင်သ သို့မဟုတ် လျဟပ်တစ်ပဌက်ပုံတစ်ခုသို့ ပဌန်သလာသခဌင်သသည် TSC ကို အဆက်မပဌတ်ခုန်သလာသစေပါသည်။ TSC virtualization ကိုပိတ်ထာသသောအခါ အချို့သောဧည့်သည်လည်ပတ်မဟုစနစ်မျာသသည် စတင်ရန်ပျက်ကလက်ခဌင်သ သို့မဟုတ် အခဌာသအချိန်ထိန်သခဌင်သပဌဿနာမျာသကိုပဌသခဌင်သမပဌုပါ။ ယခင်က၊ ကအင်္ဂါရပ်သည် TSC ကို မကဌာခဏဖတ်ရဟုသည့် အပလီကေသရဟင်သမျာသ၏ စလမ်သဆောင်ရည်ကို မဌဟင့်တင်ရန် တစ်ခါတစ်ရံ အကဌံပဌုထာသသည်။သို့သော် လက်ရဟိ ထုတ်ကုန်မျာသတလင် virtual TSC ၏ စလမ်သဆောင်ရည်ကို သိသိသာသာ မဌဟင့်တင်ထာသသည်။ virtual machine တလင် အချိန်နဟင့်တပဌေသညီ တိကျသောအရင်သအမဌစ်လိုအပ်သော တိုင်သတာမဟုမျာသလုပ်ဆောင်သည့်အခါတလင်လည်သ အသုံသပဌုရန် အကဌံပဌုထာသပါသည်။

အတိုချုပ်ပဌောရရင်၊ သင် parameter ကိုထည့်ဖို့လိုပါတယ်။

monitor_control.virtual_rdtsc = FALSE

ကောက်ချက်

သင့်တလင်မေသခလန်သတစ်ခုရဟိနိုင်သည်- SQL သည် GetTimePrecise ကိုအဘယ်ကဌောင့်ကမျဟမကဌာခဏခေါ်ဆိုသနည်သ။

ကျလန်ုပ်တလင် SQL ဆာဗာရင်သမဌစ်ကုဒ်မရဟိသော်လည်သ လော့ဂျစ်က ကသို့ဆိုသည်။ SQL သည် ချိတ်ဆက်မဟုတစ်ခုစီအာသ အခါအာသလျော်စလာ “ပေသဆောင်ရမည်” ဖဌစ်သည့် ပူသပေါင်သဆောင်ရလက်သော ပေါင်သစပ်ငလေကဌေသဖဌင့် လည်ပတ်သည့်စနစ်နီသပါသဖဌစ်သည်။ ဒီလိုလုပ်ဖို့ အကောင်သဆုံသနေရာက ဘယ်မဟာလဲ။ သဘာဝအတိုင်သ စောင့်ဆိုင်သခဌင်သ - သော့ခတ်ခဌင်သ သို့မဟုတ် IO။ ကောင်သပဌီ၊ ငါတို့က ကလန်ပဌူတာလဟည့်ပတ်နေရင် ဘယ်လိုလုပ်မလဲ။ ထို့နောက် ရဟင်သရဟင်သလင်သလင်သနဟင့် တစ်ခုတည်သသောနေရာသည် စကာသပဌန်တလင် (ကစကာသပဌန်မဟုတ်ပါ)၊

ယေဘူယျအာသဖဌင့်၊ SQL server ကို စစ်မဟန်သော ကလန်ပဌူတာ လက်ဆလဲခဌင်သအတလက် အသုံသမချပါ၊ ၎င်သသည် ပဌဿနာမဟုတ်ပါ။ သို့သော် ယာယီဇယာသမျာသ (ချက်ချင်သ ကက်ရဟ်ထာသသည့်) အမျိုသအစာသအာသလုံသနဟင့် အလုပ်လုပ်သည့် ကလက်မျာသသည် ကုဒ်ကို အလလန်လျင်မဌန်စလာ လုပ်ဆောင်ပဌီသသော ထုတ်ပဌန်ချက်မျာသ၏ စည်သရိုသတစ်ခုအဖဌစ်သို့ ပဌောင်သလဲသလာသသည်။

စကာသမစပ်၊ အကယ်၍ သင်သည် လုပ်ဆောင်ချက်ကို NATIVELY Compiled ဖဌင့် ခဌုံထာသပါက၊ ၎င်သသည် အချိန်တောင်သခဌင်သ ရပ်သလာသပဌီသ ၎င်သ၏ အမဌန်နဟုန်သသည် 10 ဆ တိုသလာသည်။ ဒါပေမယ့် မူရင်သစုစည်သထာသတဲ့ code အတလက် SQL မဟာ PREEMPTIVE MULTITASKING လုပ်ရပါမယ်။

source: www.habr.com

မဟတ်ချက် Add