Yog lawm, kuv lub laptop qub yog ob peb zaug ntau dua li koj cov neeg siv khoom tsim khoom.

Cov no yog cov lus tsis txaus siab uas kuv tau hnov ​​los ntawm peb cov neeg tsim khoom. Qhov nthuav tshaj plaws yog tias qhov no tau muab los ua qhov tseeb, ua rau muaj kev tshawb nrhiav ntev. Peb yuav tham txog SQL servers uas khiav ntawm VMware.

Yog lawm, kuv lub laptop qub yog ob peb zaug ntau dua li koj cov neeg siv khoom tsim khoom.

Qhov tseeb, nws yog ib qho yooj yim los xyuas kom meej tias cov neeg rau zaub mov tsim tawm tsis muaj kev cia siab tom qab lub laptop. Execute (tsis nyob rau tempdb thiab tsis nyob rau hauv ib tug database nrog Delayed Durability enabled) cov cai:

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

Ntawm kuv lub desktop nws siv sijhawm 5 vib nas this, thiab ntawm lub server tsim nws siv sijhawm 28 vib nas this. Vim hais tias SQL yuav tsum tau tos rau lub cev kawg ntawm kev sib pauv log nkag, thiab peb tab tom ua luv luv ntawm no. Hais lus kwv yees, peb tau tsav tsheb loj, muaj zog tsheb thauj mus los hauv nroog, thiab saib raws li nws tau nrawm dhau los ntawm cov neeg xa khoom pizza ntawm scooters - kev hla tsis tseem ceeb ntawm no, tsuas yog latency tseem ceeb. Thiab tsis muaj kev cia hauv network, txawm tias muaj pes tsawg tus lej muaj nyob rau hauv nws tus nqi, tuaj yeem yeej SSD hauv zos raws li latency.

(nyob rau hauv cov lus nws muab tawm hais tias kuv dag - Kuv tau ncua durability nyob rau hauv ob qho tib si qhov chaw.
Desktop - 39 vib nas this, 15K tr/sec, 0.065ms / io roundtrip
PROD - 360 vib nas this, 1600 tr/sec, 0.6ms
Kuv yuav tsum tau pom tias nws nrawm dhau)

Txawm li cas los xij, nyob rau hauv cov ntaub ntawv no peb tab tom cuam tshuam nrog tsis tseem ceeb xoom ntawm Riemann zeta muaj nuj nqi nrog piv txwv tsis tseem ceeb. Hauv qhov piv txwv uas cov neeg tsim khoom coj kuv, nws txawv. Kuv tau ntseeg tias lawv yog lawm, thiab pib tshem tawm ntawm qhov piv txwv tag nrho lawv cov kev qhia tshwj xeeb ntsig txog kev lag luam logic. Qee lub sij hawm kuv pom tau hais tias kuv tuaj yeem muab pov tseg tag nrho lawv cov cai thiab sau kuv tus kheej - uas qhia txog qhov teeb meem tib yam - hauv kev tsim khoom nws khiav 3-4 zaug qeeb:

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

Yog tias txhua yam zoo, tom qab ntawd xyuas qhov tseem ceeb ntawm tus lej yuav siv sijhawm 6-7-8 vib nas this. Qhov no tshwm sim ntawm ntau lub servers. Tab sis ntawm qee qhov, daim tshev siv 25-40 vib nas this. Interestingly, tsis muaj servers qhov kev tua yuav siv sijhawm, hais tias, 14 vib nas this - cov cai ua haujlwm sai heev lossis qeeb heev, uas yog, qhov teeb meem yog, peb hais, dub thiab dawb.

Kuv tau ua dab tsi? Siv VMware metrics. Txhua yam ua tau zoo nyob ntawd - muaj ntau cov peev txheej, Npaj sijhawm = 0, muaj txhua yam txaus, thaum lub sijhawm sim ntawm ob qho tib si ceev thiab qeeb servers CPU = 100 ntawm ib vCPU. Kuv tau sim ntsuas tus lej Pi - qhov kev sim pom tau zoo ib yam ntawm txhua lub server. Qhov tsw ntawm cov khawv koob dub tau ua kom muaj zog thiab muaj zog.

Thaum kuv tau mus rau DEV ua liaj ua teb, kuv pib ua si nrog cov servers. Nws tau muab tawm tias vMotion los ntawm tus tswv tsev mus rau tus tswv tuaj yeem "kho" tus neeg rau zaub mov, tab sis nws kuj tuaj yeem tig lub "ceev" server rau hauv "slow" ib qho. Zoo li qhov no yog nws - qee tus tswv muaj teeb meem ... tab sis ... tsis yog. Qee lub tshuab virtual tau qeeb ntawm tus tswv, hais tias A, tab sis ua haujlwm sai ntawm tus tswv B. Thiab lwm lub tshuab virtual, ntawm qhov tsis sib xws, ua haujlwm sai ntawm A thiab qeeb ntawm B! Ob lub tshuab "ceev" thiab "slow" feem ntau tig rau ntawm tus tswv tsev!

Txij thaum ntawd los, muaj ib tug txawv tsw ntawm leej faj nyob rau hauv cov huab cua. Tom qab tag nrho, qhov teeb meem tsis tuaj yeem raug ntaus nqi rau lub tshuab virtual (Windows thaj ua rau thaj, piv txwv li) - tom qab tag nrho, nws hloov mus ua "ceev" nrog vMotion. Tab sis qhov teeb meem kuj tsis tuaj yeem raug ntaus nqi rau tus tswv tsev - tom qab tag nrho, nws tuaj yeem muaj ob qho tib si "ceev" thiab "slow". Tsis tas li ntawd, qhov no tsis cuam tshuam nrog kev thauj khoom - Kuv tau tswj kom tau lub tshuab "slow" ntawm tus tswv tsev, qhov twg tsis muaj dab tsi ntxiv rau nws.

Tawm ntawm qhov kev xav tsis thoob, Kuv tau pib txheej txheem Explorer los ntawm Sysinternals thiab saib ntawm SQL pawg. Ntawm cov tshuab qeeb, kab tam sim ntawd ntes kuv lub qhov muag:

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

Qhov no twb yog ib yam dab tsi. Qhov kev zov me nyuam tau sau:

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

Qhov kev pab cuam no pom tau hais tias qeeb qeeb - ntawm "ceev" tshuab nws qhia 16-18 lab cycles ib ob, thaum nyob rau hauv cov cav tov qeeb nws qhia ib thiab ib nrab lab, los yog txawm 700 txhiab. Ntawd yog, qhov sib txawv yog 10-20 zaug (!!!). Qhov no twb yog ib qho kev yeej me me: nyob rau hauv txhua rooj plaub, tsis muaj kev hem thawj ntawm kev cuam tshuam ntawm Microsoft thiab VMware kev txhawb nqa kom lawv tig xub rau ib leeg.

Tom qab ntawd kev nce qib tau nres - so haujlwm, teeb meem tseem ceeb, kis kab mob hysteria thiab kev nce ntxiv hauv kev ua haujlwm. Kuv feem ntau hais txog qhov teeb meem khawv koob rau kuv cov npoj yaig, tab sis qee lub sij hawm nws zoo li lawv tsis ntseeg kuv ib txwm - cov lus hais tias VMware qeeb tus lej los ntawm 10-20 zaug yog qhov tsis txaus ntseeg.

Kuv sim khawb tawm kuv tus kheej dab tsi ua rau kuv qeeb. Qee lub sij hawm nws zoo li kuv tau pom ib qho kev daws teeb meem - tig Kub plugs rau thiab tawm, hloov lub cim xeeb lossis tus naj npawb ntawm cov processors feem ntau tig lub tshuab mus rau "ceev" ib qho. Tab sis tsis yog mus ib txhis. Tab sis dab tsi ua rau muaj tseeb yog tias nws txaus tawm mus thiab khob lub log - uas yog, hloov yam virtual tshuab parameter

Thaum kawg, kuv cov npoj yaig Asmeskas dheev pom qhov laj thawj.

Yog lawm, kuv lub laptop qub yog ob peb zaug ntau dua li koj cov neeg siv khoom tsim khoom.

Cov tswv tau sib txawv hauv ntau zaus!

  • Raws li txoj cai, qhov no tsis yog qhov loj. Tab sis: thaum tsiv los ntawm ' haiv neeg' tus tswv tsev mus rau tus tswv tsev nrog 'sib txawv' zaus, VMware yuav tsum kho qhov txiaj ntsig GetTimePrecise.
  • Raws li txoj cai, qhov no tsis yog ib qho teeb meem, tshwj tsis yog tias muaj ib daim ntawv thov uas thov lub sijhawm pes tsawg lab lab zaug ib ob, zoo li SQL server.
  • Tab sis qhov no tsis txaus ntshai, vim SQL neeg rau zaub mov tsis tas yuav ua qhov no (saib Cov Lus Qhia)

Tab sis muaj cov xwm txheej thaum qhov no rake hits nyuaj. Thiab tseem, yog, los ntawm tapping ntawm lub log (los ntawm kev hloov ib yam dab tsi hauv VM chaw), Kuv yuam VMware kom 'calculate' lub configuration, thiab zaus ntawm tus tswv tsev tam sim no los ua ' haiv neeg' zaus ntawm lub tshuab.

kev txiav txim siab

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

Thaum koj lov tes taw virtualization ntawm TSC, nyeem TSC los ntawm hauv lub tshuab virtual rov qab lub tshuab lub cev tus nqi TSC, thiab sau TSC los ntawm hauv lub tshuab virtual tsis muaj txiaj ntsig. Migrating lub tshuab virtual mus rau lwm tus tswv tsev, rov pib dua los ntawm lub xeev raug tshem tawm, lossis rov qab mus rau ib qho snapshot ua rau TSC dhia tsis tu ncua. Qee cov qhua khiav haujlwm tsis ua haujlwm, lossis pom muaj lwm yam teeb meem sijhawm, thaum TSC virtualization raug kaw. Yav dhau los, cov yam ntxwv no qee zaum tau pom zoo los txhim kho kev ua haujlwm ntawm cov ntawv thov uas nyeem TSC nquag, tab sis kev ua tau zoo ntawm TSC virtual tau raug txhim kho zoo hauv cov khoom tam sim no. Lub feature kuj tau pom zoo siv thaum ua kev ntsuas uas yuav tsum tau muaj qhov tseeb ntawm lub sijhawm tiag tiag hauv lub tshuab virtual.

Hauv luv luv, koj yuav tsum tau ntxiv qhov parameter

monitor_control.virtual_rdtsc = FALSE

xaus

Tej zaum koj yuav muaj lus nug: vim li cas SQL hu GetTimePrecise ntau zaus?

Kuv tsis muaj SQL server qhov chaws, tab sis cov logic hais qhov no. SQL yog yuav luag ib qho kev khiav hauj lwm nrog kev sib koom ua ke, qhov twg txhua txoj xov yuav tsum "muab" los ntawm ib ntus. Qhov twg yog qhov zoo tshaj plaws los ua qhov no? Qhov twg muaj ntuj tos - xauv lossis IO. Okay, tab sis yuav ua li cas yog tias peb tig lub voj voog suav? Tom qab ntawd qhov pom tseeb thiab yuav luag tsuas yog qhov chaw nyob hauv tus neeg txhais lus (qhov no tsis yog tus neeg txhais lus tiag tiag), tom qab ua tiav nqe lus tom ntej.

Feem ntau, SQL neeg rau zaub mov tsis yog siv rau kev suav cov nailing thiab qhov no tsis yog teeb meem. Tab sis cov loops uas ua hauj lwm nrog txhua yam ntawm cov rooj ib ntus (uas yog cached tam sim ntawd) tig cov cai mus rau hauv ib ntu ntawm cov nqe lus ceev heev.

Los ntawm txoj kev, yog tias koj qhwv lub luag haujlwm hauv NATIVELY COMPILED, tom qab ntawd nws nres thov lub sijhawm, thiab nws qhov nrawm nce 10 zaug. Ua li cas txog kev koom tes ua haujlwm ntau? Tab sis rau natively compiled code peb yuav tsum tau ua PREEMPTIVE MULTITASKING nyob rau hauv SQL.

Tau qhov twg los: www.hab.com

Ntxiv ib saib