рд╣реЛрдп, рдорд╛рдЭрд╛ рдЬреБрдирд╛ рд▓реЕрдкрдЯреЙрдк рддреБрдордЪреНрдпрд╛ рдкреНрд░реЛрдбрдХреНрд╢рди рд╕рд░реНрд╡реНрд╣рд░рдкреЗрдХреНрд╖рд╛ рдХрд┐рддреНрдпреЗрдХ рдкрдЯреАрдиреЗ рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЖрд╣реЗ

рдореА рдЖрдордЪреНрдпрд╛ рдбреЗрд╡реНрд╣рд▓рдкрд░реНрд╕рдХрдбреВрди рдРрдХрд▓реЗрд▓реНрдпрд╛ рддрдХреНрд░рд╛рд░реА рдЖрд╣реЗрдд. рд╕рд░реНрд╡рд╛рдд рдордиреЛрд░рдВрдЬрдХ рдЧреЛрд╖реНрдЯ рдЕрд╢реА рдЖрд╣реЗ рдХреА рд╣реЗ рдЦрд░реЗ рдард░рд▓реЗ, рдЬреНрдпрд╛рдореБрд│реЗ рджреАрд░реНрдШ рддрдкрд╛рд╕рд╛рд▓рд╛ рдЪрд╛рд▓рдирд╛ рдорд┐рд│рд╛рд▓реА. рдЖрдореНрд╣реА рд╡реНрд╣реАрдПрдорд╡реЗрдЕрд░рд╡рд░ рдЪрд╛рд▓рдгрд╛рд░реНтАНрдпрд╛ SQL рд╕рд░реНрд╡реНрд╣рд░рдмрджреНрджрд▓ рдмреЛрд▓реВ.

рд╣реЛрдп, рдорд╛рдЭрд╛ рдЬреБрдирд╛ рд▓реЕрдкрдЯреЙрдк рддреБрдордЪреНрдпрд╛ рдкреНрд░реЛрдбрдХреНрд╢рди рд╕рд░реНрд╡реНрд╣рд░рдкреЗрдХреНрд╖рд╛ рдХрд┐рддреНрдпреЗрдХ рдкрдЯреАрдиреЗ рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЖрд╣реЗ

рд╡рд╛рд╕реНрддрд╡рд┐рдХ, рдЙрддреНрдкрд╛рджрди рд╕рд░реНрд╡реНрд╣рд░ рд▓реЕрдкрдЯреЙрдкрдЪреНрдпрд╛ рдорд╛рдЧреЗ рд╣рддрд╛рд╢рдкрдгреЗ рдЕрд╕рд▓реНрдпрд╛рдЪреА рдЦрд╛рддреНрд░реА рдХрд░рдгреЗ рд╕реЛрдкреЗ рдЖрд╣реЗ. рдХреЛрдб рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рд╛ (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/рд╕реЗрдХрдВрдж, 0.065ms/io рд░рд╛рдЙрдВрдбрдЯреНрд░рд┐рдк
PROD - 360 рд╕реЗрдХрдВрдж, 1600 tr/рд╕реЗрдХрдВрдж, 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 рд╡рд░ рдордВрдж рдЭрд╛рд▓реЗ! тАЬрд╡реЗрдЧрд╡рд╛рдитАЭ рдЖрдгрд┐ тАЬрд╕реНрд▓реЛтАЭ рджреЛрдиреНрд╣реА рдорд╢реАрдиреНрд╕ рдпрдЬрдорд╛рдирд╛рд╡рд░ рдЕрдиреЗрдХрджрд╛ рдлрд┐рд░рдд рд╣реЛрддреНрдпрд╛!

рддреНрдпрд╛ рдХреНрд╖рдгрд╛рдкрд╛рд╕реВрди рд╣рд╡реЗрдд рдЧрдВрдзрдХрд╛рдЪрд╛ рд╡реЗрдЧрд│рд╛ рд╡рд╛рд╕ рдпреЗрдд рд╣реЛрддрд╛. рддрдерд╛рдкрд┐, рд╕рдорд╕реНрдпреЗрдЪреЗ рд╢реНрд░реЗрдп рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдорд╢реАрдирд▓рд╛ рджрд┐рд▓реЗ рдЬрд╛рдК рд╢рдХрдд рдирд╛рд╣реА (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде рд╡рд┐рдВрдбреЛрдЬ рдкреЕрдЪреЗрд╕) - рд╢реЗрд╡рдЯреА, рддреЗ vMotion рд╕рд╣ "рд╡реЗрдЧрд╡рд╛рди" рдордзреНрдпреЗ рдмрджрд▓рд▓реЗ. рдкрд░рдВрддреБ рд╕рдорд╕реНрдпреЗрдЪреЗ рд╢реНрд░реЗрдп рд╣реЛрд╕реНрдЯрд▓рд╛ рджреЗрдЦреАрд▓ рджрд┐рд▓реЗ рдЬрд╛рдК рд╢рдХрдд рдирд╛рд╣реА - рд╢реЗрд╡рдЯреА, рддреНрдпрд╛рдд "рд╡реЗрдЧрд╡рд╛рди" рдЖрдгрд┐ "рдзреАрдореЗ" рджреЛрдиреНрд╣реА рдорд╢реАрди рдЕрд╕реВ рд╢рдХрддрд╛рдд. рддрд╕реЗрдЪ, рд╣реЗ рд▓реЛрдбрд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдирд╡реНрд╣рддреЗ - рдореА рд╣реЛрд╕реНрдЯрд╡рд░ "рд╕реНрд▓реЛ" рдорд╢реАрди рдорд┐рд│рд╡рд┐рдгреНрдпрд╛рдд рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓реЗ, рдЬрд┐рдереЗ рддреНрдпрд╛рд╢рд┐рд╡рд╛рдп рдХрд╛рд╣реАрд╣реА рдирд╡реНрд╣рддреЗ.

рдирд┐рд░рд╛рд╢реЗрддреВрди, рдореА Sysinternals рд╡рд░реВрди Process Explorer рд▓рд╛рдБрдЪ рдХреЗрд▓реЗ рдЖрдгрд┐ 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 рдкрдЯ (!!!) рдЖрд╣реЗ. рд╣рд╛ рдЖрдзреАрдЪ рдПрдХ рдЫреЛрдЯрд╛рд╕рд╛ рд╡рд┐рдЬрдп рд╣реЛрддрд╛: рдХреЛрдгрддреНрдпрд╛рд╣реА рдкрд░рд┐рд╕реНрдерд┐рддреАрдд, рдорд╛рдпрдХреНрд░реЛрд╕реЙрдлреНрдЯ рдЖрдгрд┐ рд╡реНрд╣реАрдПрдорд╡реЗрдЕрд░ рд╕рдорд░реНрдердирд╛рдордзреНрдпреЗ рдЕрдбрдХрдгреНрдпрд╛рдЪреА рдХреЛрдгрддреАрд╣реА рдзрдордХреА рдирд╡реНрд╣рддреА рдЬреЗрдгреЗрдХрд░реВрди рддреЗ рдПрдХрдореЗрдХрд╛рдВрд╡рд░ рдмрд╛рдг рдлрд┐рд░рд╡рддреАрд▓.

рдордЧ рдкреНрд░рдЧрддреА рдерд╛рдВрдмрд▓реА - рд╕реБрдЯреНрдЯреНрдпрд╛, рдорд╣рддреНрддреНрд╡рд╛рдЪреНрдпрд╛ рдмрд╛рдмреА, рд╡рд┐рд╖рд╛рдгреВрдЬрдиреНрдп рдЙрдиреНрдорд╛рдж рдЖрдгрд┐ рдХрд╛рдорд╛рдЪреНрдпрд╛ рд▓реЛрдбрдордзреНрдпреЗ рддреАрд╡реНрд░ рд╡рд╛рдв. рдореА рдмрд░реНтАНрдпрд╛рдЪрджрд╛ рдорд╛рдЭреНрдпрд╛ рд╕рд╣рдХрд╛рд░реНтАНрдпрд╛рдВрдирд╛ рдЬрд╛рджреВрдЪреНрдпрд╛ рд╕рдорд╕реНрдпреЗрдЪрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХреЗрд▓рд╛, рдкрд░рдВрддреБ рдХрдзреАрдХрдзреА рдЕрд╕реЗ рджрд┐рд╕рддреЗ рдХреА рддреНрдпрд╛рдВрдиреА рдорд╛рдЭреНрдпрд╛рд╡рд░ рдиреЗрд╣рдореАрдЪ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдареЗрд╡рд▓рд╛ рдирд╛рд╣реА - рд╡реНрд╣реАрдПрдорд╡реЗрдЕрд░ рдХреЛрдб 10-20 рд╡реЗрд│рд╛ рдХрдореА рдХрд░рддреЛ рд╣реЗ рд╡рд┐рдзрд╛рди рдЦреВрдк рднрдпрд╛рдирдХ рд╣реЛрддреЗ.

рдорд▓рд╛ рдХрд╛рдп рдордВрдж рд╣реЛрдд рдЖрд╣реЗ рддреЗ рдореА рд╕реНрд╡рддрдГрд▓рд╛ рд╢реЛрдзрдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХреЗрд▓рд╛. рдХрдзреАрдХрдзреА рдорд▓рд╛ рдЕрд╕реЗ рд╡рд╛рдЯрд▓реЗ рдХреА рдорд▓рд╛ рдПрдХ рдЙрдкрд╛рдп рд╕рд╛рдкрдбрд▓рд╛ рдЖрд╣реЗ - рд╣реЙрдЯ рдкреНрд▓рдЧ рдЪрд╛рд▓реВ рдЖрдгрд┐ рдмрдВрдж рдХрд░рдгреЗ, рдореЗрдорд░реА рдХрд┐рдВрд╡рд╛ рдкреНрд░реЛрд╕реЗрд╕рд░рдЪреА рд╕рдВрдЦреНрдпрд╛ рдмрджрд▓рдгреЗ рдпрд╛рдореБрд│реЗ рдорд╢реАрдирд▓рд╛ "рд╡реЗрдЧрд╡рд╛рди" рдмрдирд╡рд▓реЗ рдЬрд╛рддреЗ. рдкрдг рдХрд╛рдпрдордЪреЗ рдирд╛рд╣реА. рдкрдг рдЬреЗ рдЦрд░реЗ рдард░рд▓реЗ рддреЗ рдореНрд╣рдгрдЬреЗ рдмрд╛рд╣реЗрд░ рдЬрд╛рдКрди рдЪрд╛рдХ рдареЛрдард╛рд╡рдгреЗ рдкреБрд░реЗрд╕реЗ рдЖрд╣реЗ - рдореНрд╣рдгрдЬреЗ рдмрджрд▓ рдХреЛрдгрддреЗрд╣реА рдЖрднрд╛рд╕реА рдорд╢реАрди рдкреЕрд░рд╛рдореАрдЯрд░

рд╢реЗрд╡рдЯреА, рдорд╛рдЭреНрдпрд╛ рдЕрдореЗрд░рд┐рдХрди рд╕рд╣рдХрд╛рд▒реНрдпрд╛рдВрдирд╛ рдЕрдЪрд╛рдирдХ рдореВрд│ рдХрд╛рд░рдг рд╕рд╛рдкрдбрд▓реЗ.

рд╣реЛрдп, рдорд╛рдЭрд╛ рдЬреБрдирд╛ рд▓реЕрдкрдЯреЙрдк рддреБрдордЪреНрдпрд╛ рдкреНрд░реЛрдбрдХреНрд╢рди рд╕рд░реНрд╡реНрд╣рд░рдкреЗрдХреНрд╖рд╛ рдХрд┐рддреНрдпреЗрдХ рдкрдЯреАрдиреЗ рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЖрд╣реЗ

рдпрдЬрдорд╛рдирд╛рдВрдЪреА рд╡рд╛рд░рдВрд╡рд╛рд░рддрд╛ рд╡реЗрдЧрд│реА!

  • рдирд┐рдпрдорд╛рдиреБрд╕рд╛рд░, рд╣реА рдПрдХ рдореЛрдареА рдЧреЛрд╖реНрдЯ рдирд╛рд╣реА. рдкрдг: 'рдиреЗрдЯрд┐рд╡реНрд╣' рд╣реЛрд╕реНрдЯрд╡рд░реВрди 'рд╡реЗрдЧрд│реНрдпрд╛' рдлреНрд░рд┐рдХреНрд╡реЗрдиреНрд╕реАрд╕рд╣ рд╣реЛрд╕реНрдЯрдХрдбреЗ рдЬрд╛рддрд╛рдирд╛, VMware рдиреЗ GetTimePrecise рдкрд░рд┐рдгрд╛рдо рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ.
  • рдирд┐рдпрдорд╛рдиреБрд╕рд╛рд░, SQL рд╕рд░реНрд╡реНрд╣рд░рдкреНрд░рдорд╛рдгреЗ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдж рд▓рд╛рдЦреЛ рд╡реЗрд│рд╛ рдЕрдЪреВрдХ рд╡реЗрд│реЗрдЪреА рд╡рд┐рдирдВрддреА рдХрд░рдгрд╛рд░рд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдирд╕рд▓реНрдпрд╛рд╕ рд╣реА рд╕рдорд╕реНрдпрд╛ рдирд╛рд╣реА.
  • рдкрд░рдВрддреБ рд╣реЗ рднрд┐рддреАрджрд╛рдпрдХ рдирд╛рд╣реА, рдХрд╛рд░рдг SQL рд╕рд░реНрд╡реНрд╣рд░ рдиреЗрд╣рдореА рдЕрд╕реЗ рдХрд░рдд рдирд╛рд╣реА (рдирд┐рд╖реНрдХрд░реНрд╖ рдкрд╣рд╛)

рдкрд░рдВрддреБ рдЕрд╢реА рдкреНрд░рдХрд░рдгреЗ рдЖрд╣реЗрдд рдЬреЗрд╡реНрд╣рд╛ рдпрд╛ рд░реЗрдХрд▓рд╛ рдЬреЛрд░рджрд╛рд░ рдлрдЯрдХрд╛ рдмрд╕рддреЛ. рдЖрдгрд┐ рддрд░реАрд╣реА, рд╣реЛрдп, рд╡реНрд╣реАрд▓рд╡рд░ рдЯреЕрдк рдХрд░реВрди (VM рд╕реЗрдЯрд┐рдВрдЧреНрдЬрдордзреНрдпреЗ рдХрд╛рд╣реАрддрд░реА рдмрджрд▓реВрди) рдореА VMware рд▓рд╛ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди 'рдкреБрдирд░реНрдЧрдгрдирд╛' рдХрд░рдгреНрдпрд╛рд╕ рднрд╛рдЧ рдкрд╛рдбрд▓реЗ рдЖрдгрд┐ рд╕рдзреНрдпрд╛рдЪреНрдпрд╛ рд╣реЛрд╕реНрдЯрдЪреА рд╡рд╛рд░рдВрд╡рд╛рд░рддрд╛ рдорд╢реАрдирдЪреА 'рдиреЗрдЯрд┐рд╡реНрд╣' рд╡рд╛рд░рдВрд╡рд╛рд░рддрд╛ рдмрдирд▓реА.

рдирд┐рд░реНрдгрдп

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

рдЬреЗрд╡реНрд╣рд╛ рддреБрдореНрд╣реА TSC рдЪреЗ рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓рд╛рдпрдЭреЗрд╢рди рдЕрдХреНрд╖рдо рдХрд░рддрд╛, рддреЗрд╡реНрд╣рд╛ рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдорд╢реАрдирдордзреВрди TSC рд╡рд╛рдЪрд▓реНрдпрд╛рдиреЗ рднреМрддрд┐рдХ рдорд╢реАрдирдЪреЗ TSC рдореВрд▓реНрдп рдкрд░рдд рдорд┐рд│рддреЗ рдЖрдгрд┐ рдЖрднрд╛рд╕реА рдорд╢реАрдирдордзреВрди TSC рд▓рд┐рд╣рд┐рдгреНрдпрд╛рдЪрд╛ рдХреЛрдгрддрд╛рд╣реА рдкрд░рд┐рдгрд╛рдо рд╣реЛрдд рдирд╛рд╣реА. рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдорд╢реАрди рджреБрд╕рд░реНтАНрдпрд╛ рд╣реЛрд╕реНрдЯрд╡рд░ рд╕реНрдерд▓рд╛рдВрддрд░рд┐рдд рдХрд░рдгреЗ, рддреЗ рдирд┐рд▓рдВрдмрд┐рдд рд╕реНрдерд┐рддреАрддреВрди рдкреБрдиреНрд╣рд╛ рд╕реБрд░реВ рдХрд░рдгреЗ, рдХрд┐рдВрд╡рд╛ рд╕реНрдиреЕрдкрд╢реЙрдЯрд╡рд░ рдкрд░рдд рдХреЗрд▓реНрдпрд╛рдиреЗ TSC рд╕рддрдд рдЙрдбреА рдорд╛рд░рддреЗ. рдХрд╛рд╣реА рдЕрддрд┐рдереА рдХрд╛рд░реНрдпрдкреНрд░рдгрд╛рд▓реА рдмреВрдЯ рдХрд░рдгреНрдпрд╛рдд рдЕрдпрд╢рд╕реНрд╡реА рд╣реЛрддрд╛рдд, рдХрд┐рдВрд╡рд╛ рдЗрддрд░ рдЯрд╛рдЗрдордХреАрдкрд┐рдВрдЧ рд╕рдорд╕реНрдпрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛рдд, рдЬреЗрд╡реНрд╣рд╛ TSC рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓рд╛рдпрдЭреЗрд╢рди рдЕрдХреНрд╖рдо рдХреЗрд▓реЗ рдЬрд╛рддреЗ. рднреВрддрдХрд╛рд│рд╛рдд, TSC рд╡рд╛рд░рдВрд╡рд╛рд░ рд╡рд╛рдЪрдгрд╛рд░реНтАНрдпрд╛ рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕рдЪреЗ рдХрд╛рд░реНрдпрдкреНрд░рджрд░реНрд╢рди рд╕реБрдзрд╛рд░рдгреНрдпрд╛рд╕рд╛рдареА рдпрд╛ рд╡реИрд╢рд┐рд╖реНрдЯреНрдпрд╛рдЪреА рд╢рд┐рдлрд╛рд░рд╕ рдХреЗрд▓реА рдЧреЗрд▓реА рдЖрд╣реЗ, рдкрд░рдВрддреБ рд╡рд░реНрддрдорд╛рди рдЙрддреНрдкрд╛рджрдирд╛рдВрдордзреНрдпреЗ рд╡рд░реНрдЪреНрдпреБрдЕрд▓ TSC рдЪреЗ рдХрд╛рд░реНрдпрдкреНрд░рджрд░реНрд╢рди рд▓рдХреНрд╖рдгреАрдпрд░реАрддреНрдпрд╛ рд╕реБрдзрд╛рд░рд▓реЗ рдЧреЗрд▓реЗ рдЖрд╣реЗ. рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдорд╢реАрдирдордзреНрдпреЗ рд░рд┐рдЕрд▓ рдЯрд╛рдЗрдордЪрд╛ рдЕрдЪреВрдХ рд╕реНрд░реЛрдд рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реЗрд▓реА рдореЛрдЬрдорд╛рдк рдХрд░рддрд╛рдирд╛ рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡реИрд╢рд┐рд╖реНрдЯреНрдпрд╛рдЪреА рд╢рд┐рдлрд╛рд░рд╕ рджреЗрдЦреАрд▓ рдХреЗрд▓реА рдЖрд╣реЗ.

рдереЛрдбрдХреНрдпрд╛рдд, рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдкреЕрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ

рдореЙрдирд┐рдЯрд░_рдХрдВрдЯреНрд░реЛрд▓.virtual_rdtsc = рдЕрд╕рддреНрдп

рдирд┐рд╖реНрдХрд░реНрд╖

рддреБрдореНрд╣рд╛рд▓рд╛ рдХрджрд╛рдЪрд┐рдд рдкреНрд░рд╢реНрди рдкрдбрд▓рд╛ рдЕрд╕реЗрд▓: рдПрд╕рдХреНрдпреВрдПрд▓ рдЧреЗрдЯрдЯрд╛рдЗрдо рдкреНрд░рд┐рд╕рд╛рдИрд╕рд▓рд╛ рд╡рд╛рд░рдВрд╡рд╛рд░ рдХрд╛ рдХреЙрд▓ рдХрд░рддреЗ?

рдорд╛рдЭреНрдпрд╛рдХрдбреЗ SQL рд╕рд░реНрд╡реНрд╣рд░ рд╕реЛрд░реНрд╕ рдХреЛрдб рдирд╛рд╣реА, рдкрдг рд▓реЙрдЬрд┐рдХ рд╣реЗ рд╕рд╛рдВрдЧрддреЗ. рдПрд╕рдХреНрдпреВрдПрд▓ рд╣реА рдЬрд╡рд│рдЬрд╡рд│ рд╕рд╣рдХрд╛рд░реА рд╕рдВрдпреЛрдЧ рдЕрд╕рд▓реЗрд▓реА рдПрдХ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯреАрдо рдЖрд╣реЗ, рдЬрд┐рдереЗ рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдбрдиреЗ рд╡реЗрд│реЛрд╡реЗрд│реА "рджреЗрдгреЗ" рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рд╣реЗ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕рд░реНрд╡реЛрддреНрддрдо рдард┐рдХрд╛рдг рдХреЛрдареЗ рдЖрд╣реЗ? рдЬреЗрдереЗ рдиреИрд╕рд░реНрдЧрд┐рдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдЖрд╣реЗ - рд▓реЙрдХ рдХрд┐рдВрд╡рд╛ рдЖрдпрдУ. рдареАрдХ рдЖрд╣реЗ, рдкрдг рдЬрд░ рдЖрдкрдг рд╕рдВрдЧрдгрдХреАрдп рд▓реВрдк рдлрд┐рд░рд╡рдд рдЖрд╣реЛрдд рддрд░? рдирдВрддрд░ рд╕реНрдкрд╖реНрдЯ рдЖрдгрд┐ рдЬрд╡рд│рдЬрд╡рд│ рдПрдХрдореЗрд╡ рд╕реНрдерд╛рди рджреБрднрд╛рд╖реНрдпрд╛рдордзреНрдпреЗ рдЖрд╣реЗ (рд╣реЗ рдЦрд░реЛрдЦрд░ рджреБрднрд╛рд╖реА рдирд╛рд╣реА), рдкреБрдвреАрд▓ рд╡рд┐рдзрд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХреЗрд▓реНрдпрд╛рдирдВрддрд░.

рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ, SQL рд╕рд░реНрд╡реНрд╣рд░ рд╢реБрджреНрдз рд╕рдВрдЧрдгрдирд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓рд╛ рдЬрд╛рдд рдирд╛рд╣реА рдЖрдгрд┐ рд╣реА рд╕рдорд╕реНрдпрд╛ рдирд╛рд╣реА. рдкрд░рдВрддреБ рд▓реВрдк рдЬреЗ рд╕рд░реНрд╡ рдкреНрд░рдХрд╛рд░рдЪреНрдпрд╛ рддрд╛рддреНрдкреБрд░рддреНрдпрд╛ рд╕рд╛рд░рдгреНрдпрд╛рдВрд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рддрд╛рдд (рдЬреЗ рд▓рдЧреЗрдЪ рдХреЕрд╢реЗ рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд) рдХреЛрдбрд▓рд╛ рдЕрддрд┐рд╢рдп рддреНрд╡рд░реАрдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╡рд┐рдзрд╛рдирд╛рдВрдЪреНрдпрд╛ рдЕрдиреБрдХреНрд░рдорд╛рдд рдмрджрд▓рддрд╛рдд.

рддрд╕реЗ, рдЬрд░ рддреБрдореНрд╣реА NATIVELY COMPILED рдордзреНрдпреЗ рдлрдВрдХреНрд╢рди рдЧреБрдВрдбрд╛рд│рд▓реЗ рддрд░ рддреЗ рд╡реЗрд│ рд╡рд┐рдЪрд╛рд░рдгреЗ рдерд╛рдВрдмрд╡рддреЗ рдЖрдгрд┐ рддреНрдпрд╛рдЪрд╛ рд╡реЗрдЧ 10 рдкрдЯреАрдиреЗ рд╡рд╛рдврддреЛ. рд╕рд╣рдХрд╛рд░реА рдорд▓реНрдЯреАрдЯрд╛рд╕реНрдХрд┐рдВрдЧрдЪреЗ рдХрд╛рдп? рдкрд░рдВрддреБ рдореВрд│ рд╕рдВрдХрд▓рд┐рдд рдХреЛрдбрд╕рд╛рдареА рдЖрдореНрд╣рд╛рд▓рд╛ SQL рдордзреНрдпреЗ рдкреНрд░реАрдИрдореНрдкреНрдЯреАрд╡реНрд╣ рдорд▓реНрдЯреАрдЯрд╛рд╕реНрдХрд┐рдВрдЧ рдХрд░рд╛рд╡реЗ рд▓рд╛рдЧрд▓реЗ.

рд╕реНрддреНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛