Yebo, i-laptop yami endala inamandla izikhathi eziningana kuneseva yakho yokukhiqiza.

Lezi yizo kanye izikhalo engizizwe konjiniyela bethu. Okuthakazelisa kakhulu ukuthi avele ayiqiniso, asusa uphenyo olude. Lokhu kuthinta amaseva e-SQL esiwasebenzisa ku-VMware.

Yebo, i-laptop yami endala inamandla izikhathi eziningana kuneseva yakho yokukhiqiza.

Eqinisweni, kulula ukwenza iseva yokukhiqiza iwele ngokungenathemba ngemuva kwekhompuyutha ephathekayo. Qalisa ikhodi elandelayo (hhayi ku-temdb noma kusizindalwazi esinokuqina Okubambezelekile kunikwe amandla):

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

Kudeskithophu yami, kuthatha imizuzwana emi-5, futhi kuseva yokukhiqiza, imizuzwana engama-28. Lokhu kungenxa yokuthi i-SQL kufanele ilinde ukuthi ilogu yokwenziwayo ibhalwe ngokomzimba, futhi senza imisebenzi emifushane kakhulu lapha. Uma sikhuluma nje, sishayele iloli elikhulu, elinamandla phakathi kwethrafikhi yedolobha futhi sibukele abashayeli bokulethwa kwe-pizza kumjaho we-scooters ukudlula kulo—umphumela awubalulekile lapha, ukubambezeleka kuphela. Futhi asikho isitoreji senethiwekhi, kungakhathaliseki ukuthi mangaki ama-zero ngentengo yaso, engashaya i-SSD yendawo ngesikhathi sokulinda.

(Emazwaneni, kuvele ukuthi ngiqambe amanga—ngibambezele ukuqina kuzo zombili izindawo. Ngaphandle kokulibaziseka ukuqina, kubukeka kanje:
Ideskithophu - imizuzwana engama-39, 15K tr/isekhondi, 0.065ms /io uhambo lokuya nokubuya
I-PROD - 360 imizuzwana, 1600 tr/sec, 0.6ms
Bekumele ngiqaphele ukuthi bekushesha kakhulu)

Kodwa-ke, kulesi simo, sibhekene noziro abancane bomsebenzi we-Riemann zeta ngesibonelo esincane. Isibonelo onjiniyela abangilethele sona sasihlukile. Ngaba nokuqiniseka ukuthi baqinisile futhi ngaqala ukuyihlubula yonke imininingwane yayo ehlobene nokucabanga kwebhizinisi. Ngesinye isikhathi, ngabona ukuthi ngingakhipha ikhodi yabo ngokuphelele futhi ngibhale eyami-ebonisa inkinga efanayo-kodwa ekukhiqizeni, ihamba kancane izikhathi ezingu-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

Uma konke kuhamba kahle, ukuhlolwa kokubaluleka kuzothatha imizuzwana engu-6-7-8. Yilokhu okwenzekile ochungechungeni. amasevaKodwa kwamanye amaseva, ukuhlolwa kwathatha imizuzwana engama-25-40. Ngokuthakazelisayo, kwakungekho amaseva lapho ukwenziwa kwathatha, ake sithi, imizuzwana eyi-14—ikhodi yayisebenza ngokushesha kakhulu noma kancane kakhulu, okusho ukuthi inkinga, ngomqondo ongokomfanekiso, kwakumnyama nomhlophe.

Ngenzeni? Ngihlole amamethrikhi e-VMware. Konke kwakuhamba kahle lapho-kwakunezinsiza eziningi, Isikhathi Esilungile = 0, konke kwakuhamba kahle, futhi ngesikhathi sokuhlolwa, kokubili kumaseva asheshayo nahamba kancane, i-CPU = 100 ku-vCPU eyodwa. Ngisebenzise uhlolo lokubala lwe-Pi—imiphumela ibihambisana kuwo wonke amaseva. Iphunga lemilingo lase liba namandla.

Lapho ngifika epulazini le-dev, ngaqala ukudlala ngamaseva. Kuvele ukuthi i-vMotion isuka kosokhaya iye kwenye ingakwazi "ukwelapha" iseva, kodwa futhi ingaguqula iseva "esheshayo" ibe "ehamba kancane". Kwabonakala sengathi kwakunjalo—abanye ababungazi babenezinkinga... kodwa... cha. Umshini owodwa we-virtual wawuhamba kancane kumsingathi, yithi, A, kodwa wagijima ngokushesha kumsingathi u-B. Omunye umshini we-virtual, ngakolunye uhlangothi, wagijima ngokushesha ku-A futhi wehlisa isivinini ku-B! Yomibili imishini “esheshayo” kanye “nenensayo” yayivame ukusebenza kumsingathi ofanayo!

Kusukela ngaleso sikhathi kuqhubeke, kwaba nephunga elihlukile lesibabule emoyeni. Inkinga ayikwazanga ukuthi yenziwe umshini we-virtual (iziqephu ze-Windows, isibonelo)—uguqulelwe ekubeni "ukushesha" ngesikhathi se-vMotion. Kodwa inkinga nayo ayikwazanga ukuthi iyabalulwa kumsingathi—ingaba nayo yomibili imishini "esheshayo" kanye "nenensayo". Futhi ibingahlobene nokulayisha—ngikwazile ukuthola umshini "ohamba kancane" kumsingathi, lapho bekungekho okunye.

Ngokuphelelwa yithemba, ngethule i-Sysinternals 'Process Explorer futhi ngabheka isitaki se-SQL. Emishinini ehamba kancane, ulayini owangidonsa amehlo ngokushesha wawuthi:

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

Lokhu bekuvele kukhona. Kwabhalwa uhlelo:

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

Lolu hlelo lubonise ukwehla okumangazayo nakakhulu: emishinini "esheshayo", ibonise imijikelezo eyizigidi ezingu-16-18 ngomzuzwana, kanti emincane yayiyizigidi ezingu-1.5 noma i-700,000. Lowo umehluko we-10-20x (!!!). Lokhu bekuwukunqoba okuncane: okungenani ibingekho ingozi yokubambeka phakathi kokusekelwa kweMicrosoft neVMware, lapho bedlulisa imali.

Khona-ke inqubekela-phambili yamiswa—iholide, izindaba ezibalulekile, i-virus hysteria, nokwanda okukhulu komsebenzi. Ngangivame ukusho inkinga yomlingo kozakwethu, kodwa ngezinye izikhathi kwakubonakala sengathi babengangikholwa—isimangalo sokuthi i-VMware yayinciphisa ikhodi izikhathi ezingu-10-20 sasicasula kakhulu.

Ngazama ukuthola ukuthi yini eyayingibambezela mina. Ngezinye izikhathi, ngangicabanga ukuthi ngithole isixazululo—ukuvumela nokukhubaza ama-Hot Plug, ukushintsha usayizi wenkumbulo, noma inani labacubungulayo ngokuvamile kwenza umshini “usheshe.” Kodwa hhayi kuze kube phakade. Okufike kuyiqiniso wukuthi okumele ukwenze wukuphuma ucofe isondo—okungukuthi, ulishintshe. noma yikuphi ipharamitha yomshini we-virtual

Ekugcineni, ozakwethu baseMelika bavele bathola umnyombo.

Yebo, i-laptop yami endala inamandla izikhathi eziningana kuneseva yakho yokukhiqiza.

Abasingathi bebehluka ngobuningi!

  • Lokhu ngokuvamile akuyona inkinga. Kodwa-ke, lapho usuka kumsingathi womdabu uye kumsingathi onemvamisa ehlukile, i-VMware kufanele ilungise umphumela we-GetTimePrecise.
  • Lokhu ngokuvamile akuyona into enkulu ngaphandle uma unohlelo lokusebenza olucela isikhathi esiqondile izigidi zezikhathi ngomzuzwana, njenge-SQL Server.
  • Kepha lokhu akuyona into enkulu, njengoba i-SQL Server ingakwenzi lokhu ngaso sonke isikhathi (bona Isiphetho)

Kodwa kunezimo lapho leli gama lishaya kanzima. Futhi yebo, ngokuthepha isondo (ukushintsha okuthile kuzilungiselelo ze-VM), ngiphoqe i-VMware ukuthi 'ibale kabusha' ukucushwa, futhi imvamisa yamanje yomsingathi yaba imvamisa 'yomdabu' yomshini.

Isixazululo

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

Uma ukhubaza ukwenziwa kwe-virtual kwe-TSC, ukufunda i-TSC ngaphakathi komshini obonakalayo kubuyisela inani le-TSC lomshini ophathekayo, futhi ukubhala i-TSC ngaphakathi komshini obonakalayo akunawo umthelela. Ukuthutha umshini we-virtual uwuyise komunye umsingathi, ukuwuqalisa kabusha usuka esimweni esimisiwe, noma ubuyela esifinyezweni kubangela i-TSC ukuthi igxume ingaqhubeki. Amanye amasistimu wokusebenza wezihambeli ahluleka ukuqalisa, noma abonise ezinye izinkinga zokugcina isikhathi, lapho ukwaziswa kwe-TSC kukhutshaziwe. Esikhathini esedlule, lesi sici kwesinye isikhathi siye sanconywa ukuthuthukisa ukusebenza kwezinhlelo zokusebenza ezifunda i-TSC njalo, kodwa ukusebenza kwe-TSC ebonakalayo kuthuthukiswe kakhulu emikhiqizweni yamanje. Isici sinconyelwe futhi ukuthi sisetshenziswe uma kwenziwa izilinganiso ezidinga umthombo onembile wesikhathi sangempela emshinini wokubuka.

Ngamafuphi, udinga ukwengeza ipharamitha

monitor_control.virtual_rdtsc = FALSE

isiphetho

Cishe uyazibuza: kungani i-SQL idinga ukushayela i-GetTimePrecise kaningi kangaka?

Anginayo ikhodi yomthombo ye-SQL Server, kodwa ingqondo isho lokhu. I-SQL icishe ifane nesistimu yokusebenza ene-cooperative concurrency, lapho intambo ngayinye kufanele iveze ngezikhathi ezithile. Futhi ikuphi indawo engcono kakhulu yokwenza lokhu? Lapho kunokulinda okungokwemvelo—ukhiye noma i-IO. Kulungile, kodwa kuthiwani uma sisebenzisa amalophu ekhompyutha? Khona-ke indawo esobala futhi ecishe ibe kuphela kumhumushi (akuyena ngempela umhumushi), ngemva kokwenza isitatimende esilandelayo.

Iseva ye-SQL ngokuvamile ayisetshenziselwa ukubala okumsulwa, futhi leyo akuyona inkinga. Kodwa-ke, amaluphu afaka amathebula esikhashana (afakwe kunqolobane ngokushesha) aguqula ikhodi ibe ukulandelana kwezitatimende ezikhishwe ngokushesha.

Kodwa-ke, uma ugoqa umsebenzi kokuthi NATIVELY COPILED, iyayeka ukubuza, futhi ijubane layo likhuphuka ngokuphindwe kashumi. Kodwa kuthiwani ngokwenza imisebenzi eminingi ngokubambisana? Ukuze uthole ikhodi ehlanganiswe ngokomdabu, bekufanele nginike amandla i-PREEMPTIVE MULTITASKING ku-SQL.

Source: www.habr.com

Thenga ukusingathwa okuthembekile kwamasayithi anokuvikelwa kwe-DDoS, amaseva e-VPS VDS 🔥 Thenga ukusingathwa kwewebhusayithi okuthembekile ngokuvikelwa kwe-DDoS, amaseva e-VPS VDS | ProHoster