ืืื ืืืืืง ืืชืืื ืืช ืฉืฉืืขืชื ืืืืคืชืืื ืฉืื ื. ืืืืจ ืืืขื ืืื ืืืืชืจ ืืื ืฉืื ืืชืืจืจ ืื ืืื, ืื ืฉืืืืื ืืงืืจื ืืจืืื. ื ืืืจ ืขื ืฉืจืชื SQL ืฉืคืืขืืื ืขื VMware.
ืืืขืฉื, ืงื ืืืืืื ืฉืฉืจืช ืืืืฆืืจ ื ืืฆื ืืืืืจื ืืืืฉื ืื ืืื ืืื ืชืงื ื. ืืฆืข (ืื ืขื tempdb ืืื ืขื ืืกื ื ืชืื ืื ืขื ืขืืืืืช ืืืฉืืืช ืืืคืขืืช) ืืช ืืงืื:
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
ืืฉืืืื ืืขืืืื ืฉืื ืื ืืืงื 5 ืฉื ืืืช, ืืืฉืจืช ืืืืฆืืจ ืื ืืืงื 28 ืฉื ืืืช. ืื SQL ืืืื ืืืืืช ืืกืืฃ ืืคืืื ืฉื ืจืืฉืื ืืืื ืืขืกืงืืืช, ืืื ืื ื ืขืืฉืื ืืื ืืจื ืืงืฆืืืช ืงืฆืจืืช ืืืื. ืืืืคื ืืก, ื ืกืขื ื ืืืฉืืืช ืืืืื ืืืืงื ืืชืื ืืชื ืืขื ืืขืืจ, ืืฆืคืื ื ืืื ืขืืงืคืื ืืืชื ืืืจืืืืช ืขื ืืื ืื ืฉื ืืฉืืืื ืคืืฆื ืขื ืงืื ืืขืื - ืืชืคืืงื ืื ืืฉืืื ืืื, ืจืง ืืฉืืื ืืฉืืื. ืืฉืื ืืืกืื ืจืฉืช, ืื ืืฉื ื ืืื ืืคืกืื ืืฉ ืืืืืจ ืฉืื, ืื ืืืื ืื ืฆื ืืช ื-SSD ืืืงืืื ืืืืื ืช ืืฉืืื.
(ืืืขืจืืช ืืกืชืืจ ืฉืฉืืงืจืชื - ืืื ืื ืขืืืืืช ืขืืืื ืืฉื ื ืืืงืืืืช. ืืื ืขืืืืืช ืขืืืื ืืกืชืืจ:
ืฉืืืื ืขืืืื - 39 ืฉื ืืืช, 15K tr/sek, 0.065ms /io ืืืื ืืฉืื
PROD - 360 ืฉื ืืืช, 1600 tr/sek, 0.6ms
ืืืืชื ืฆืจืื ืืฉืื ืื ืฉืื ืืื ืืืืจ ืืื)
ืขื ืืืช, ืืืงืจื ืื ืื ื ืขืืกืงืื ืืืคืกืื ืืจืืืืืืืืื ืฉื ืคืื ืงืฆืืืช ืืืื ืฉื โโืจืืื ืขื ืืืืื ืืจืืืืืืืืช. ืืืืืื ืฉืืืืื ืื ืืืคืชืืื ืื ืืื ืฉืื ื. ืืฉืชืื ืขืชื ืฉืื ืฆืืืงืื, ืืืชืืืชื ืืืกืืจ ืืืืืืื ืืช ืื ืืคืจืืื ืฉืืื ืืงืฉืืจืื ืืืืืืื ืขืกืงื. ืืฉืื ืืกืืื ืืื ืชื ืฉืื ื ืืืื ืืืจืืง ืืืืจื ืืช ืืงืื ืฉืืื ืืืืชืื ืืช ืืงืื ืฉืื - ืื ืฉืืืืื ืืช ืืืชื ืืขืื - ืืืืฆืืจ ืืื ืคืืขื ืคื 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
ืื ืืื ืืกืืจ, ืืืืงืช ืจืืฉืื ืืืชื ืฉื ืืกืคืจ ืชืืงื 6-7-8 ืฉื ืืืช. ืื ืงืจื ืืืกืคืจ ืฉืจืชืื. ืืื ืืืืง ืืืืืืงื ื ืืฉืื 25-40 ืฉื ืืืช. ืืขื ืืื ืืฆืืื ืฉืื ืืื ืฉืจืชืื ืฉืืื ืืืืฆืืข ืืื ืืืงื, ื ื ืื, 14 ืฉื ืืืช - ืืงืื ืขืื ืื ืืืจ ืืืื ืื ืืื ืืืื, ืืืืืจ, ืืืขืื ืืืืชื, ื ื ืื, ืฉืืืจ ืืืื.
ืื ืื ื ืขืฉืืชื? ืืฉืชืืฉื ืืืืื VMware. ืืื ืืื ืืกืืจ ืฉื - ืืื ืฉืคืข ืฉื ืืฉืืืื, ืืื ืืืื = 0, ืืื ืืกืคืืง ืืืื, ืืืืื ืืืืืงื ืขื ืฉืจืชืื ืืืืจืื ืืืืืืื ืืืื. CPU = 100 ื-vCPU ืืื. ืขืฉืืชื ืืืื ืืืืฉืื ืืืกืคืจ Pi - ืืืืืงื ืืจืืชื ืืช ืืืชื ืชืืฆืืืช ืืื ืฉืจืช. ืจืื ืืงืกื ืืฉืืืจ ื ืขืฉื ืืืง ืืืชืจ ืืืืชืจ.
ืืจืืข ืฉืืืขืชื ืืืืืช ื-DEV, ืืชืืืชื ืืฉืืง ืขื ืืฉืจืชืื. ืืชืืจืจ ืฉ-vMotion ืืืจื ืืืืจื ืืืืื "ืืจืคื" ืฉืจืช, ืืื ืืื ืื ืืืืื ืืืคืื ืฉืจืช "ืืืืจ" ืืฉืจืช "ืืืื". ื ืจืื ืฉืืื - ืืืืง ืืืืืจืืื ืืฉ ืืขืื... ืืื... ืื. ืืืื ืืืื ื ืืืจืืืืืืช ืืืืชื ืืืืืช ืขื ืืืจื, ื ืืื A, ืืื ืขืืื ืืืจ ืขื ืืืจื B. ืืืืื ื ืืืจืืืืืืช ืืืจืช, ืืืืคื, ืขืืื ืืืจ ืขื A ืืืืื ืขื B! ืื ืืืื ืืช "ืืืืจืืช" ืืื ืืืื ืืช "ืืืืืืช" ืืกืชืืืื ืืขืชืื ืงืจืืืืช ืขื ืืืืจื!
ืืืืชื ืจืืข, ืืื ืจืื ืืจืืจ ืฉื ืืืคืจืืช ืืืืืืจ. ืืืจื ืืื, ืื ื ืืชื ืืืืืก ืืช ืืืขืื ืืืืื ื ืืืืืจืืืืืืช (ืชืืงืื ื Windows, ืืืฉื) - ืืืจื ืืื, ืืื ืืคืื ื"ืืืืจ" ืขื vMotion. ืืื ืื ืื ื ืืชื ืืืืืก ืืช ืืืขืื ืืืืจื - ืืืจื ืืื, ืืืืืืช ืืืืืช ืื ืื ืืืื ืืช "ืืืืจืืช" ืืื "ืืืืืืช". ืืื ืื, ืื ืื ืืื ืงืฉืืจ ืืขืืืก - ืืฆืืืชื ืืืฉืื ืืืื ื "ืืืืืช" ืขื ืืืืจื, ืฉื ืื ืืื ืฉืื ืืืจ ืืืืื.
ืืชืื ืืืืืฉ, ืืคืขืืชื ืืช Process Explorer ื-Sysinternals ืืืกืชืืืชื ืขื ืืืกื ืืช ื-SQL. ืืืืื ืืช ืืืืืืช ืืงื ืืื ืชืคืก ืืช ืขืื ื:
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
... ืืืื
sqldk.dll!SystemThread::MakeMiniSOSThread+0xa54
KERNEL32.DLL!BaseThreadInitThunk+0x14
ntdll.dll!RtlUserThreadStart+0x21
ืื ืืืจ ืืื ืืฉืื. ืืชืืื ืืช ื ืืชืื:
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);
}
}
}
}
ืชืืื ืืช ืื ืืคืืื ื ืืืื ืืืืืช ืขืื ืืืชืจ - ืืืืื ืืช "ืืืืจืืช" ืืื ืืฆืืื 16-18 ืืืืืื ืืืืืจืื ืืฉื ืืื, ืืขืื ืฉืืืืื ืืช ืืืืืืช ืืื ืืฆืืื ืืืืืื ืืืฆื, ืื ืืคืืื 700 ืืืฃ. ืืืืืจ, ืืืืื ืืื ืคื 10-20 (!!!). ืื ืืืจ ืืื ื ืืฆืืื ืงืื: ืืื ืืงืจื, ืื ืืื ืืืื ืืืืชืงืข ืืื ืชืืืืช ืืืงืจืืกืืคื ื-VMware ืืื ืฉืื ืืคื ื ืืืฆืื ืื ืขื ืื.
ืืื ื ืขืฆืจื ืืืชืงืืืืช - ืืืคืฉืืช, ืขื ืืื ืื ืืฉืืืื, ืืืกืืจืื ืืืจืืืืช ืืขืืืื ืืื ืืขืืืก ืืขืืืื. ืื ืคืขื ืืืืจืชื ืืช ืืขืืืช ืืงืกื ืืขืืืชืื, ืืื ืืคืขืืื ื ืจืื ืฉืื ืืคืืื ืื ืชืืื ืืืืื ื ืื - ืืืืืจื ืฉ-VMware ืืืื ืืช ืืงืื ืคื 10-20 ืืืืชื ืืคืืฆืชืืช ืืื.
ื ืืกืืชื ืืืคืืจ ืืขืฆืื ืื ืืื ืืืชื. ืืคืขืืื ื ืืื ืืื ืื ืฉืืฆืืชื ืคืชืจืื - ืืคืขืื ืืืืืื ืฉื Hot Plugs, ืฉืื ืื ืืืืช ืืืืืจืื ืื ืืกืคืจ ืืืขืืืื ืืคืื ืืขืชืื ืงืจืืืืช ืืช ืืืืื ื ื"ืืืืจ". ืืื ืื ืื ืฆื. ืืื ืื ืฉืืชืืจืจ ืื ืืื ืื ืฉืืกืคืืง ืืฆืืช ืืืืคืืง ืขื ืืืื โ ืืืืืจ ืืฉื ืืช ืื ืคืจืืืจ ืฉื ืืืื ื ืืืจืืืืืืช
ืืืกืืฃ, ืขืืืชืื ืืืืจืืงืืื ืืฆืื ืืคืชืข ืืช ืืกืืื.
ืืืืจืืื ืืื ืฉืื ืื ืืชืืืจืืช!
- ืืืื, ืื ืื ืขื ืืื ืืืื. ืืื: ืืืฉืจ ืขืืืจืื ืืืืจื โโ'ืืงืืจื' ืืืืจื ืขื ืชืืจ 'ืฉืื ื', VMware ืืืืืช ืืืชืืื ืืช ืชืืฆืืช GetTimePrecise.
- ืืืื, ืื ืื ืืขืื, ืืื ืื ืื ืืฉ ืืคืืืงืฆืื ืฉืืืงืฉืช ืืช ืืืื ืืืืืืง ืืืืืื ื ืคืขืืื ืืฉื ืืื, ืืื ืฉืจืช SQL.
- ืืื ืื ืื ืืคืืื, ืืืืืื ืฉืฉืจืช SQL ืื ืชืืื ืขืืฉื ืืืช (ืจืื ืืกืงื ื)
ืืื ืืฉ ืืงืจืื ืฉืืื ืืืจืืคื ืืื ืืื ืืืง. ืืืื ืืืช, ืื, ืขื ืืื ืืงืฉื ืขื ืืืื (ืขื ืืื ืฉืื ืื ืืฉืื ืืืืืจืืช ื-VM) ืืืจืืชื ืืช VMware 'ืืืฉื ืืืืฉ' ืืช ืืชืฆืืจื, ืืืชืืจ ืฉื ืืืืจื ืื ืืืื ืืคื ืืชืืจ 'ืืืงืืจื' ืฉื ืืืืื ื.
ืืืืื
ืืืฉืจ ืืชื ืืฉืืืช ืืช ืืืืืจืืืืืืืฆืื ืฉื ื-TSC, ืงืจืืืช ื-TSC ืืชืื ืืืืฉื ืืืืืจืืืืื ืืืืืจื ืืช ืขืจื ื-TSC ืฉื ืืืืฉื ืืคืืื, ืืืืชืืืช ื-TSC ืืชืื ืืืืฉื ืืืืืจืืืืื ืืื ืืฉืคืขื. ืืขืืจืช ืืืืฉื ืืืืืจืืืืื ืืืืจื ืืืจ, ืืืืืฉื ืืืฆื ืืืฉืขื ืื ืืืจื ืืชืืื ืช ืืฆื ืืืจืืื ื-TSC ืืงืคืืฅ ืืจืฆืืคืืช. ืืืง ืืืขืจืืืช ืืืคืขืื ืืืืจืืืช ืื ืืฆืืืืืช ืืืชืื, ืื ืืืจืืืช ืืขืืืช ืืืจืืช ืฉื ืฉืืืจืช ืืื, ืืืฉืจ ืืืจืืืืืืืฆืื ืฉื TSC ืืืฉืืชืช. ืืขืืจ ืืืืืฅ ืืขืชืื ืขื ืชืืื ื ืื ืืื ืืฉืคืจ ืืช ืืืืฆืืขืื ืฉื ืืืฉืืืื ืฉืงืืจืืื ืืช ื-TSC ืืขืชืื ืงืจืืืืช, ืื ืืืืฆืืขืื ืฉื ื-TSC ืืืืืจืืืืื ืฉืืคืจื ืืืืคื ืืฉืืขืืชื ืืืืฆืจืื ืื ืืืืืื. ืืชืืื ื ืืืืืฆื ืืฉืืืืฉ ืื ืืขืช ืืืฆืืข ืืืืืืช ืืืืจืฉืืช ืืงืืจ ืืืืืง ืฉื ืืื ืืืช ืืืืื ื ืืืืจืืืืืืช.
ืืงืืฆืืจ, ืฆืจืื ืืืืกืืฃ ืืช ืืคืจืืืจ
monitor_control.virtual_rdtsc = FALSE
ืืกืงื ื
ืืื ืืฉ ืื ืฉืืื: ืืืืข SQL ืืชืงืฉืจ ื-GetTimePrecise ืืขืชืื ืงืจืืืืช ืื ืื?
ืืื ืื ืืช ืงืื ืืืงืืจ ืฉื ืฉืจืช SQL, ืืื ืืืืืืื ืืืืจ ืืช ืื. SQL ืืื ืืืขื ืืขืจืืช ืืคืขืื ืขื ืฉืืชืืฃ ืคืขืืื ืืืงืืื, ืฉืื ืื ืืื ืืืื "ืืืืื ืข" ืืขืช ืืขืช. ืืืคื ืืื ืืื ืืขืฉืืช ืืช ืื? ืืืคื ืฉืืฉ ืืืชื ื ืืืขืืช - ืื ืขืื ืื IO. ืืืงืื, ืืื ืื ืื ืื ืื ื ืืกืืืืื ืืืืืืช ืืืฉืืืืืช? ืืื ืืืงืื ืืืืื ืืืืื ืืืืขื ืืืืื ืืื ืืคืจืฉื (ืื ืื ืืืืช ืืชืืจืืื), ืืืืจ ืืืฆืืข ืืืฆืืจื ืืืื.
ืืืจื ืืื, ืฉืจืช SQL ืืื ื ืืฉืืฉ ืืืกืืจ ืืืฉืื ืืืืจ ืืื ืืื ื ืืขืื. ืืื ืืืืืืช ืฉืขืืืืืช ืขื ืื ืืื ื ืืืืืืช ืืื ืืืช (ืฉื ืืฆืืืช ืืื ืืืืืื) ืืืคืืืช ืืช ืืงืื ืืจืฆืฃ ืฉื ืืฆืืจืืช ืืืืืฆืขืืช ืืืจ ืืืื.
ืืื, ืื ืขืืืคืื ืืช ืืคืื ืงืฆืื ื-NATIVELY COMPILED, ืื ืืื ืืคืกืืงื ืืืงืฉ ืืื, ืืืืืืจืืช ืฉืื ืขืืื ืคื 10. ืื ืืืื ืจืืืื ืืฉืืืืช ืฉืืชืืคืืช? ืืื ืขืืืจ ืงืื ืืงืืจื ืืืื ื ืฆืจืืืื ืืขืฉืืช MULTITASKING PREEMPTIVE ื-SQL.
ืืงืืจ: www.habr.com