Ee, laptop ea ka ea khale e matla ka makhetlo a 'maloa ho feta seva ea hau ea tlhahiso.

Tsena ke tsona litletlebo tseo ke li utloileng ho tsoa ho baetsi ba rona. Ntho e thahasellisang ka ho fetisisa ke hore sena se ile sa fetoha 'nete, sa hlahisa lipatlisiso tse telele. Re tla bua ka li-server tsa SQL tse sebetsang ho VMware.

Ee, laptop ea ka ea khale e matla ka makhetlo a 'maloa ho feta seva ea hau ea tlhahiso.

Ha e le hantle, ho bonolo ho netefatsa hore seva sa tlhahiso ha se na tšepo ka mor'a laptop. Phetha (eseng ho tempdb mme eseng ho database e nang le Delayed Durability e nolofalitsoeng) khoutu:

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

Ho komporo ea ka ho nka metsotsoana ea 5, 'me ho seva sa tlhahiso ho nka metsotsoana e 28. Hobane SQL e tlameha ho emela pheletso ea 'mele ea ho kena ha log log,' me re etsa litšebelisano tse khutšoane haholo mona. Ka mantsoe a mang, re ile ra khanna teraka e kholo, e matla har'a sephethephethe sa toropo, 'me ra shebella ha e ntse e haptjoa ke batho ba tsamaisang pizza ka li-scooters - ho sebetsa ha ho bohlokoa mona, ke ho lieha feela ho bohlokoa. 'Me ha ho polokelo ea marang-rang, ho sa tsotellehe hore na ho na le li-zero tse kae ka theko ea eona, e ka otlang SSD ea lehae ho latela latency.

(ho maikutlo ho ile ha fumaneha hore ke ile ka bua leshano - ke ne ke liehile ho tšoarella libakeng tseo ka bobeli. Ntle le ho lieha ho tšoarella hoa bonahala:
Desktop - metsotsoana e 39, 15K tr/sec, 0.065ms / io ho khutla
PROD - metsotsoana ea 360, 1600 tr / sec, 0.6ms
Ke ne ke lokela hore ebe ke hlokometse hore ho potlakile haholo)

Leha ho le joalo, tabeng ena re sebetsana le zero tse nyenyane tsa mosebetsi oa Riemann zeta ka mohlala o fokolang. Mohlala oo baetsi ba oona ba ileng ba ntlisetsa oona, o ne o fapane. Ke ne ke kholisehile hore ba nepile, 'me ba qala ho tlosa ho tloha mohlala lintlha tsohle tsa bona tse amanang le logic ea khoebo. Ka nako e 'ngoe ke ile ka hlokomela hore nka lahla khoutu ea bona ka ho feletseng ebe ke ngola ea ka - e bontšang bothata bo tšoanang - tlhahiso e tsamaea butle ka makhetlo a 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

Haeba ntho e 'ngoe le e' ngoe e le hantle, joale ho hlahloba boleng ba palo ho tla nka metsotsoana e 6-7-8. Sena se etsahetse ho li-server tse 'maloa. Empa ho ba bang, cheke e nkile metsotsoana e 25-40. Hoa thahasellisa hore ho ne ho se na li-server moo ho bolaoa ho neng ho tla nka, ho re, metsotsoana e 14 - khoutu e sebetsa ka potlako kapa butle haholo, ke hore, bothata e ne e le, ha re re, batsho le ba basoeu.

Ke entseng? E sebelisitsoe metrics ea VMware. Ntho e 'ngoe le e' ngoe e ne e le hantle moo - ho ne ho e-na le lisebelisoa tse ngata, Nako e lokiselitsoeng = 0, ho ne ho e-na le ntho e 'ngoe le e' ngoe e lekaneng, nakong ea teko ho li-server tse potlakileng le tse liehang CPU = 100 ho vCPU e le 'ngoe. Ke ile ka etsa tlhahlobo ho bala palo ea Pi - tlhahlobo e bontšitse liphetho tse tšoanang ho seva efe kapa efe. Monko oa boselamose o ile oa e-ba matla le ho feta.

Hang ha ke fihla polasing ea DEV, ke ile ka qala ho bapala ka li-server. Ho ile ha fumaneha hore vMotion ho tloha ho moamoheli ho ea ho moamoheli e ka "phekola" seva, empa e ka boela ea fetola seva e "potlakang" hore e be "e liehang". Ho bonahala eka sena ke sona - baamoheli ba bang ba na le bothata ... empa ... che. Mochini o mong o ne o lieha ho amohela moamoheli, ho re A, empa o sebelitse ka potlako ho moamoheli B. 'Me mochini o mong o sebetsang, ho fapana le hoo, o ile oa sebetsa ka potlako ho A mme oa fokotsa lebelo ho B! Mechini e 'ngoe ea "ka potlako" le "ea butle" hangata e ne e bilika ho moamoheli!

Ho tloha ka nako eo ho ea pele, ho ne ho e-na le monko o hlakileng oa sebabole moeeng. Ha e le hantle, bothata bo ne bo ke ke ba amahanngoa le mochine oa sebele (li-patches tsa Windows, mohlala) - ka mor'a moo, e fetohile "ka potlako" ka vMotion. Empa bothata le bona bo ne bo ke ke ba amahanngoa le moamoheli - ka mor'a moo, e ka ba le mechini e "potlakang" le "e butle". Hape, sena se ne se sa amane le mojaro - ke ile ka khona ho fumana mochine o "liehang" ho moeti, moo ho neng ho se letho ho hang ntle le oona.

Ka lebaka la ho tsieleha, ke ile ka tsebisa Process Explorer ho tsoa ho Sysinternals mme ka sheba stack ea SQL. Mechineng e liehang, mohala o ile oa nkhahla hang-hang:

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

Sena e ne e se e le ntho e itseng. Lenaneo le ne le ngotsoe:

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

Lenaneo lena le bonts'itse ho fokotseha ho hlakileng le ho feta - ka mechini e "potlakileng" e bonts'a lipotoloho tse limilione tse 16-18 motsotsoana, ha mochini o liehang o bonts'a milione e le 'ngoe le halofo, kapa esita le 700 sekete. Ke hore, phapang ke linako tse 10-20 (!!!). Ena e ne e se e ntse e le tlhōlo e nyenyane: ho sa tsotellehe boemo leha e le bofe, ho ne ho se na ts'okelo ea ho khomarela Microsoft le VMware tšehetso e le hore ba ka hulana ka metsu.

Joale tsoelo-pele e ile ea emisa - matsatsi a phomolo, litaba tsa bohlokoa, hysteria ea kokoana-hloko le keketseho e matla ea mosebetsi. Ke ne ke atisa ho bua ka bothata ba boselamose ho basebetsi-'moho le 'na, empa ka linako tse ling ho ne ho bonahala eka ha ba nkholoe kamehla - polelo ea hore VMware e liehisa khoutu ka makhetlo a 10-20 e ne e le mpe haholo.

Ke ile ka leka ho ichekela hore na ke eng e ntšitisang butle. Ka linako tse ling ho 'na ho ne ho bonahala eka ke fumane tharollo - ho bulela le ho tima li-Hot plugs, ho fetola boholo ba mohopolo kapa palo ea li-processor hangata ho fetola mochine hore o "potlake". Empa eseng ka ho sa feleng. Empa se ileng sa bonahala e le 'nete ke hore ho lekane ho tsoa le ho kokota lebili - ke hore, phetoho leha e le efe parameter ea mochine oa sebele

Qetellong, basebetsi-'moho le 'na ba Amerika ka tšohanyetso ba ile ba fumana sesosa sa sesosa.

Ee, laptop ea ka ea khale e matla ka makhetlo a 'maloa ho feta seva ea hau ea tlhahiso.

Baamoheli ba ne ba fapana ka makhetlo!

  • E le molao, sena ha se taba e kholo. Empa: ha o tloha ho moamoheli oa 'letsoalloa' ho ea ho moamoheli ea nang le maqhubu a 'fapaneng', VMware e tlameha ho lokisa sephetho sa GetTimePrecise.
  • E le molao, sena ha se bothata, ntle le haeba ho na le kopo e batlang nako e nepahetseng ka makhetlo a limilione ka motsotsoana, joaloka seva sa SQL.
  • Empa sena ha se tšose, kaha seva sa SQL ha se kamehla se etsang sena (sheba Qetello)

Empa ho na le maemo ha lefu lena le otla ka thata. Leha ho le joalo, e, ka ho penya lebili (ka ho fetola ntho e 'ngoe ho litlhophiso tsa VM) ke ile ka qobella VMware ho 'bala hape' tlhophiso, 'me maqhubu a moeti oa hona joale a fetoha maqhubu a' matsoalloa a mochine.

u etsa qeto ea

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

Ha o tima virtualization ea TSC, ho bala TSC ka har'a mochini o sebetsang ho khutlisa boleng ba TSC ba mochini oa 'mele, mme ho ngola TSC ho tsoa ka har'a mochini o hlakileng ha ho na phello. Ho fallisetsa mochini o sebetsang ho moamoheli e mong, ho o qala hape ho tloha maemong a emisitsoeng, kapa ho khutlela setšoantšong ho etsa hore TSC e tlole e sa khaotse. Litsamaiso tse ling tsa ts'ebetso ea baeti li hloleha ho qala, kapa li bonts'a mathata a mang a ho boloka nako, ha ts'ebetso ea TSC e koetsoe. Nakong e fetileng, ka linako tse ling tšobotsi ena e khothalelitsoe ho ntlafatsa ts'ebetso ea lits'ebetso tse balang TSC khafetsa, empa ts'ebetso ea TSC ea sebele e ntlafalitsoe haholo lihlahisoa tsa morao-rao. Karolo e boetse e khothalelitsoe hore e sebelisoe ha ho etsoa litekanyo tse hlokang mohloli o nepahetseng oa nako ea 'nete mochining oa sebele.

Ka bokhutšoanyane, o hloka ho eketsa parameter

monitor_control.virtual_rdtsc = FALSE

fihlela qeto e

Mohlomong u na le potso: hobaneng SQL e letsetsa GetTimePrecise hangata hakaale?

Ha ke na khoutu ea mohloli oa seva sa SQL, empa mohopolo o bolela sena. SQL ke hoo e batlang e le mokhoa oa ho sebetsa o nang le tumellano ea tšebelisano-'moho, moo khoele e 'ngoe le e' ngoe e lokelang ho "inehela" nako le nako. Sebaka se setle sa ho etsa see se hokae? Moo ho nang le ho leta ha tlhaho - senotlolo kapa IO. Ho lokile, empa ho thoe'ng haeba re ntse re ohla li-loops tsa computational? Ebe sebaka se totobetseng le hoo e batlang e le sebaka se le seng feela ho mofetoleli (ena ha e le hantle e le mofetoleli), ka mor'a ho phethahatsa polelo e latelang.

Ka kakaretso, seva sa SQL ha se sebelisoe bakeng sa lisebelisoa tse hloekileng tsa khomphutha mme sena ha se bothata. Empa li-loops tse sebetsang ka mefuta eohle ea litafole tsa nakoana (tse bolokiloeng hang-hang) li fetola khoutu hore e be tatellano ea lipolelo tse entsoeng ka potlako haholo.

Ha u le tseleng, haeba u phuthela mosebetsi ho NATIVELY COPILED, joale e khaotsa ho botsa nako, 'me lebelo la eona le eketseha ka makhetlo a 10. Ho thoe'ng ka cooperative multitasking? Empa bakeng sa khoutu e hlophisitsoeng ka tlhaho re ile ra tlameha ho etsa PREEMPTIVE MULTITASKING ho SQL.

Source: www.habr.com

Eketsa ka tlhaloso