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.
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.
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
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