Ae, ko taku pona tawhito he maha nga wa e kaha ake ana i to tuumau whakaputa

Koia tonu nga amuamu i rongohia e au mai i o maatau kaihanga. Ko te mea tino pai ko tenei ka puta he pono, ka puta he rangahau roa. Ka korero tatou mo nga tūmau SQL e rere ana i runga i te VMware.

Ae, ko taku pona tawhito he maha nga wa e kaha ake ana i to tuumau whakaputa

Inaa, he mea ngawari ki te whakarite kei te noho kore te kaituku mahi i muri o te pona. Whakaotia (kaore i runga i te tempdb, kaua hoki i runga i te papaunga raraunga me te Roa Whakaaetanga kua whakahohea) te waehere:

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

I runga i taku papamahi e 5 hēkona, ā, i runga i te tūmau whakaputa ka 28 hēkona. Na te mea me tatari a SQL mo te mutunga tinana o te urunga rangitaki tauwhitinga, a kei te mahi poto noa matou i konei. Ko te ahua o te korero, i peia e matou he taraka nui, kaha ki roto i te taone nui, me te mataki i te hopukina e te hunga kawe pizza i runga i nga motopaika - ehara i te mea nui ki konei, he mea nui te toropono. A kaore he rokiroki whatunga, ahakoa te maha o nga kore i roto i tana utu, ka taea te patu i te SSD o te rohe i runga i te roanga.

(i roto i nga korero ka puta he korero teka ahau - kua whakaroa ahau i te roanga o nga waahi e rua. Ki te kore e whakaroa te roa ka puta:
Papamahi - 39 hēkona, 15K tr/hekona, 0.065ms/io te haere haere
PROD - 360 hēkona, 1600 tr/sec, 0.6ms
Me kite ahau he tere rawa)

Heoi, i roto i tenei keehi e pa ana ki nga koretake o te mahi Riemann zeta me tetahi tauira iti. I roto i te tauira i kawea mai e nga kaihanga ki ahau, he rereke. I whakapono ahau he tika ratou, a ka timata ki te tango mai i te tauira o raatau korero katoa e pa ana ki te arorau pakihi. I etahi wa ka mohio ahau ka taea e au te whakakore i o raatau waehere me te tuhi i aku ake - e whakaatu ana i te raru ano - i roto i te mahi ka rere 3-4 nga wa poto ake:

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

Mena kei te pai nga mea katoa, ka 6-7-8 hekona te roa o te tirotiro i te tuatahi o te nama. I puta tenei i runga i te maha o nga tūmau. Engari ki etahi, 25-40 hekona te roa o te haki. Ko te mea whakamiharo, karekau he kaitaunaki e mahi ana, me kii, 14 hēkona - he tere te mahi o te waehere, he tino puhoi ranei, ara, ko te raru, me kii, he pango me te ma.

He aha aku mahi? I whakamahia nga inenga VMware. He pai nga mea katoa i reira - he nui nga rauemi, Te wa rite = 0, he nui nga mea katoa, i te wa o te whakamatautau mo nga kaitoro tere me te puhoi CPU = 100 mo te vCPU kotahi. I whakamatauria e au ki te tatau i te tau Pi - he rite nga hua o te whakamatautau ki runga i tetahi tūmau. Ka kaha ake, ka kaha haere te haunga o te makutu pango.

I taku taenga ki te paamu DEV, ka tiimata ahau ki te takaro me nga kaitoro. I puta mai ko te vMotion mai i te kaihautu ki te kaihautu ka taea te "whakaora" i tetahi tūmau, engari ka taea hoki te huri i te "tere" tūmau ki te "puoro". Ko te ahua tenei - he raruraru etahi o nga kaihautu... engari... kao. Ko etahi miihini mariko he puhoi ki te kaihautu, e kii ana a A, engari i tere te mahi i runga i te kaihautu B. A ko tetahi atu miihini mariko, engari, ka tere te mahi i runga i te A me te puhoi ki te B! Ko nga miihini "tere" me te "puturi" he maha nga wa e huri ana i runga i te ope!

Mai i tera wa, he haunga o te whanariki i te rangi. I muri i nga mea katoa, kaore e taea te kii i te raruraru ki te miihini mariko (patch Windows, hei tauira) - i muri i nga mea katoa, ka huri ki te "tere" me te vMotion. Engari ko te raru kaore e taea te kii ki te kaihautu - i muri i nga mea katoa, ka taea e nga miihini "tere" me te "puoro". Ano, kaore tenei e pa ana ki te kawenga - I kaha ahau ki te tiki miihini "puturi" ki te kaihautu, kaore he mea i tua atu i tera.

Na te pouri, i whakarewahia e ahau te Process Explorer mai i Sysinternals ka titiro ki te puranga SQL. I runga i nga miihini puhoi ka mau tonu taku kanohi:

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
... pekepeke
sqldk.dll!SystemThread::MakeMiniSOSThread+0xa54
KERNEL32.DLL!BaseThreadInitThunk+0x14
ntdll.dll!RtlUserThreadStart+0x21

He mea ke tenei. I tuhia te kaupapa:

    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);
                }
            }
        }
    }

I whakaatu tenei kaupapa i te tino puhoi - i runga i nga miihini "tere" e whakaatu ana i te 16-18 miriona huringa ia hekona, i runga i nga miihini puhoi ka whakaatuhia he kotahi me te hawhe miriona, tae atu ki te 700 mano. Arā, ko te rerekētanga he 10-20 ngā wā (!!!). He wikitoria iti tenei: ahakoa he aha, karekau he riri kia mau i waenga i te tautoko a Microsoft me VMware kia huri pere ki a raua ano.

Na ka mutu te ahunga whakamua - nga hararei, nga mea nui, te hikaka me te piki haere o nga mahi. He maha nga wa i whakahuahia e au te raru makutu ki aku hoa mahi, engari i etahi wa karekau ratou i whakapono ki ahau i nga wa katoa - ko te korero e whakaroa ana a VMware i te waehere ma te 10-20 wa he tino whakamataku.

I whakamatau ahau ki te keri i a au ano he aha te mea e whakaroa ana i ahau. I etahi wa, ki taku whakaaro kua kitea e au he otinga - te huri me te whakaweto i nga Hot plugs, te huri i te nui o te mahara, te maha ranei o nga kaitukatuka ka huri te miihini ki te "tere". Engari kaua mo ake tonu atu. Engari ko te mea i puta he pono ko te mea ka nui te haere ki te patuki i te wira - ara, whakarereke tetahi tawhā miihini mariko

Ka mutu, ka kitea ohorere e aku hoa mahi Amerika te take.

Ae, ko taku pona tawhito he maha nga wa e kaha ake ana i to tuumau whakaputa

He rereke te auau o nga kaihautu!

  • Hei tikanga, ehara tenei i te mea nui. Engari: ina neke mai i te kaihautu 'maori' ki te kaihautu me te auau 'rereke', me whakatika e VMware te hua GetTimePrecise.
  • Hei tikanga, ehara tenei i te raru, mena he tono e tono ana i te wa tika e hia miriona nga wa ia hekona, penei i te tūmau SQL.
  • Engari ehara tenei i te mea whakamataku, na te mea kaore e mahia e te tūmau SQL tenei mahi i nga wa katoa (tirohia te Whakamutunga)

Engari tera ano etahi keehi ka pa kaha tenei rake. Heoi ano, ae, ma te patuki i te wira (ma te whakarereke i tetahi mea i roto i nga tautuhinga VM) ka akiakihia e ahau a VMware ki te 'taatai' ano i te whirihoranga, a ko te auau o te kaihautu o naianei ko te auau 'maori' o te miihini.

whakatau

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

Ina mono koe i te marikotanga o te TSC, ko te panui i te TSC mai i roto i te miihini mariko ka whakahoki te uara TSC o te miihini tinana, karekau he painga o te tuhi i te TSC mai i roto i te miihini mariko. Ko te heke i te miihini mariko ki tetahi atu kaihautu, ka hoki mai ano i te ahua kua whakatarewahia, ka hoki ano ranei ki te whakaahua ka peke te TSC. Ko etahi o nga punaha whakahaere manuhiri ka kore e puhipuhi, ka whakaatu ranei i etahi atu raru mo te pupuri i te waa, ka monokia te marikotanga TSC. I nga wa o mua, i etahi wa ka taunakihia tenei waahanga hei whakapai ake i te mahinga o nga tono e panui ana i te TSC i nga wa katoa, engari kua tino pai ake te mahinga o te TSC mariko i roto i nga hua o naianei. Kua taunakitia ano te waahanga mo te whakamahi i te wa e mahi ana i nga inenga me whai puna tika mo te waa tuuturu i roto i te miihini mariko.

Hei poto, me taapiri koe i te tawhā

monitor_control.virtual_rdtsc = HERE

mutunga

He patai pea taau: he aha i karanga ai a SQL ki a GetTimePrecise i nga wa maha?

Kaore au i te waehere punaha SQL, engari e kii ana te arorau. Ko te SQL he punaha whakahaere me te mahi tahi, me "tuku" ia miro i ia wa. Kei hea te waahi pai mo tenei mahi? Kei hea he tatari maori - maukati, IO ranei. Kati, engari ka pehea mena kei te huri tatou i nga koropiko rorohiko? Na ko te waahi kitea me te tata anake kei roto i te kaiwhakamaori (ehara tenei i te tino kaiwhakamaori), i muri i te mahi i te korero i muri mai.

Ko te tikanga, kaore i te whakamahia te tūmau SQL mo te whao rorohiko parakore a ehara tenei i te raru. Engari ko nga koropiko e mahi tahi ana me nga momo ripanga rangitahi katoa (kei te keteroki tonu) ka huri i te waehere ki te raupapa o nga korero kua tere te mahia.

Ae ra, ki te takai koe i te mahi ki NATIVELY COMPILED, ka mutu te tono mo te wa, ka piki ake te tere ma te 10 nga wa. Engari mo te waehere whakahiato taketake me mahi matou i PREEMPTIVE MULTITASKING i SQL.

Source: will.com

Tāpiri i te kōrero