ื›ืŸ, ื”ืžื—ืฉื‘ ื”ื ื™ื™ื“ ื”ื™ืฉืŸ ืฉืœื™ ื—ื–ืง ืคื™ ื›ืžื” ืžืฉืจืช ื”ื™ื™ืฆื•ืจ ืฉืœืš

ืืœื• ื‘ื“ื™ื•ืง ื”ืชืœื•ื ื•ืช ืฉืฉืžืขืชื™ ืžื”ืžืคืชื—ื™ื ืฉืœื ื•. ื”ื“ื‘ืจ ื”ืžืขื ื™ื™ืŸ ื‘ื™ื•ืชืจ ื”ื•ื ืฉื–ื” ื”ืชื‘ืจืจ ื›ื ื›ื•ืŸ, ืžื” ืฉื”ื•ืœื™ื“ ื—ืงื™ืจื” ืืจื•ื›ื”. ื ื“ื‘ืจ ืขืœ ืฉืจืชื™ 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 'ืœื—ืฉื‘ ืžื—ื“ืฉ' ืืช ื”ืชืฆื•ืจื”, ื•ื”ืชื“ืจ ืฉืœ ื”ืžืืจื— ื”ื ื•ื›ื—ื™ ื”ืคืš ืœืชื“ืจ 'ื”ืžืงื•ืจื™' ืฉืœ ื”ืžื›ื•ื ื”.

ื”ื—ืœื˜ื”

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

ื›ืืฉืจ ืืชื” ืžืฉื‘ื™ืช ืืช ื”ื•ื•ื™ืจื˜ื•ืืœื™ื–ืฆื™ื” ืฉืœ ื”-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

ื”ื•ืกืคืช ืชื’ื•ื‘ื”