์ด๊ฒ์ด ๋ฐ๋ก ์ ๊ฐ ๊ฐ๋ฐ์๋ค๋ก๋ถํฐ ๋ค์๋ ๋ถ๋ง ์ฌํญ์ ๋๋ค. ๊ฐ์ฅ ํฅ๋ฏธ๋ก์ด ์ ์ ์ด๊ฒ์ด ์ฌ์ค๋ก ๋ฐํ์ ธ ์ค๋ ์กฐ์ฌ๊ฐ ์ด์ด์ก๋ค๋ ๊ฒ์ ๋๋ค. VMware์์ ์คํ๋๋ 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์ ํธ๋์ญ์ ๋ก๊ทธ ํญ๋ชฉ์ ๋ฌผ๋ฆฌ์ ๋์ ๊ธฐ๋ค๋ ค์ผ ํ๊ธฐ ๋๋ฌธ์ ์ฌ๊ธฐ์๋ ๋งค์ฐ ์งง์ ํธ๋์ญ์ ์ ์ํํ๊ณ ์์ต๋๋ค. ๋๋ต์ ์ผ๋ก ๋งํ๋ฉด, ์ฐ๋ฆฌ๋ ํฌ๊ณ ๊ฐ๋ ฅํ ํธ๋ญ์ ๋์ ๊ตํต์ผ๋ก ๋ชฐ๊ณ ์ค์ฟ ํฐ๋ฅผ ํ ํผ์ ๋ฐฐ๋ฌ์์ด ๊ธํ ์ถ์ํ๋ ๊ฒ์ ์ง์ผ๋ณด์์ต๋๋ค. ์ฌ๊ธฐ์ ์ฒ๋ฆฌ๋์ ์ค์ํ์ง ์๊ณ ๋๊ธฐ ์๊ฐ๋ง ์ค์ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ๊ฒฉ์ XNUMX์ด ์๋ฌด๋ฆฌ ๋ง์ด ์์ด๋ ์ง์ฐ ์๊ฐ ์ธก๋ฉด์์ ๋ก์ปฌ SSD๋ฅผ ๋ฅ๊ฐํ ์ ์๋ ๋คํธ์ํฌ ์คํ ๋ฆฌ์ง๋ ์์ต๋๋ค.
(๋๊ธ์์ ๋ด๊ฐ ๊ฑฐ์ง๋ง์ ํ ๊ฒ์ผ๋ก ๋ฐํ์ก์ต๋๋ค. ๋ ๊ณณ ๋ชจ๋์์ ๋ด๊ตฌ์ฑ์ด ์ง์ฐ๋์์ต๋๋ค. ๋ด๊ตฌ์ฑ์ด ์ง์ฐ๋์ง ์์ผ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๋ฐํ์ก์ต๋๋ค.
๋ฐ์คํฌํ - 39์ด, 15K tr/์ด, 0.065ms/io ์๋ณต
PROD - 360์ด, 1600tr/์ด, 0.6ms
๋๋ฌด ๋น ๋ฅด๋ค๋ ๊ฑธ ๋์น์ฑ์ด์ผ ํ๋๋ฐ)
๊ทธ๋ฌ๋ ์ด ๊ฒฝ์ฐ์๋ ์ฌ์ํ ์๋ฅผ ๋ค์ด ๋ฆฌ๋ง ์ ํ ํจ์์ ์ฌ์ํ 3์ ๋ค๋ฃจ๊ณ ์์ต๋๋ค. ๊ฐ๋ฐ์๊ฐ ๊ฐ์ ธ์จ ์์์๋ ๋ฌ๋์ต๋๋ค. ๋๋ ๊ทธ๋ค์ด ์ณ๋ค๊ณ ํ์ ํ๊ณ ๋น์ฆ๋์ค ๋ก์ง๊ณผ ๊ด๋ จ๋ ๋ชจ๋ ์ธ๋ถ ์ฌํญ์ ์์ ์์ ์ ๊ฑฐํ๊ธฐ ์์ํ์ต๋๋ค. ์ด๋ ์์ ์์ ๋๋ ๊ทธ๋ค์ ์ฝ๋๋ฅผ ์์ ํ ๋ฒ๋ฆฌ๊ณ ๋ด ์์ ์ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ค๋ ๊ฒ์ ๊นจ๋ฌ์์ต๋๋ค. ์ด๋ ๋์ผํ ๋ฌธ์ ๋ฅผ ๋ณด์ฌ ์ฃผ๋ฉฐ ํ๋ก๋์ ์์๋ 4-XNUMX๋ฐฐ ๋๋ฆฌ๊ฒ ์คํ๋ฉ๋๋ค.
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, ๋ชจ๋ ๊ฒ์ด ์ถฉ๋ถํ์ต๋๋ค. ๋น ๋ฅธ ์๋ฒ์ ๋๋ฆฐ ์๋ฒ ๋ชจ๋์์ ํ ์คํธํ๋ ๋์ ํ๋์ vCPU์์ CPU = 100์ด์์ต๋๋ค. Pi ์๋ฅผ ๊ณ์ฐํ๊ธฐ ์ํด ํ ์คํธ๋ฅผ ํ์ต๋๋ค. ํ ์คํธ ๊ฒฐ๊ณผ๋ ๋ชจ๋ ์๋ฒ์์ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ฃผ์์ต๋๋ค. ํ๋ง๋ฒ์ ๋์๊ฐ ์ ์ ๊ฐํด์ก์ต๋๋ค.
DEV ํ์ ๋์ฐฉํ์๋ง์ ์๋ฒ๋ฅผ ๊ฐ์ง๊ณ ๋๊ธฐ ์์ํ์ต๋๋ค. ํธ์คํธ ๊ฐ vMotion์ ์๋ฒ๋ฅผ "์น๋ฃ"ํ ์ ์์ ๋ฟ๋ง ์๋๋ผ "๋น ๋ฅธ" ์๋ฒ๋ฅผ "๋๋ฆฐ" ์๋ฒ๋ก ์ ํํ ์๋ ์๋ค๋ ์ฌ์ค์ด ๋ฐํ์ก์ต๋๋ค. ๋ฐ๋ก ์ด ๊ฒ ๊ฐ์ต๋๋ค. ์ผ๋ถ ํธ์คํธ์๋ ๋ฌธ์ ๊ฐ ์์ต๋๋ค... ํ์ง๋ง... ์๋๋๋ค. ์ผ๋ถ ๊ฐ์ ๋จธ์ ์ ํธ์คํธ A์์๋ ๋๋ฆฌ์ง๋ง ํธ์คํธ B์์๋ ๋น ๋ฅด๊ฒ ์๋ํ์ต๋๋ค. ๋ฐ๋๋ก ๋ ๋ค๋ฅธ ๊ฐ์ ๋จธ์ ์ A์์๋ ๋น ๋ฅด๊ฒ ์๋ํ๊ณ B์์๋ ์๋๊ฐ ๋๋ ค์ก์ต๋๋ค! "๋น ๋ฅธ" ๋จธ์ ๊ณผ "๋๋ฆฐ" ๋จธ์ ๋ชจ๋ ํธ์คํธ์์ ํ์ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์์ต๋๋ค!
๊ทธ ์๊ฐ๋ถํฐ ๊ณต๊ธฐ ์ค์๋ ๋๋ ทํ ์ ํฉ ๋์๊ฐ ๋ฌ์ต๋๋ค. ๊ฒฐ๊ตญ ๋ฌธ์ ๋ ๊ฐ์ ๋จธ์ (์: Windows ํจ์น)์ผ๋ก ์ธํ ๊ฒ์ด ์๋๋๋ค. ๊ฒฐ๊ตญ 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~XNUMX๋ฐฐ(!!!) ์ ๋๋ค. ์ด๊ฒ์ ์ด๋ฏธ ์์ ์น๋ฆฌ์์ต๋๋ค. ์ด์จ๋ Microsoft์ VMware ์ง์ ์ฌ์ด์ ๊ฐํ ์๋ก์๊ฒ ํ์ด์ ๋๋ฆด ์ํ์ ์์์ต๋๋ค.
๊ทธ๋ฐ ๋ค์ ํด๊ฐ, ์ค์ํ ๋ฌธ์ , ๋ฐ์ด๋ฌ์ค ์ฑ ํ์คํ ๋ฆฌ ๋ฐ ์์ ๋์ ๊ธ๊ฒฉํ ์ฆ๊ฐ ๋ฑ ์งํ์ด ์ค๋จ๋์์ต๋๋ค. ๋๋ ์ข ์ข ๋๋ฃ๋ค์๊ฒ ๋ง๋ฒ ๊ฐ์ ๋ฌธ์ ์ ๋ํด ์ธ๊ธํ์ง๋ง ๋๋ก๋ ๊ทธ๋ค์ด ๋ด ๋ง์ ํญ์ ๋ฏฟ์ง ์๋ ๊ฒ ๊ฐ์์ต๋๋ค. VMware๊ฐ ์ฝ๋ ์๋๋ฅผ 10~20๋ฐฐ ๋ฆ์ถ๋ค๋ ์ง์ ์ ๋๋ฌด ๋์ฐํ์ต๋๋ค.
๋๋ ๋๋ฅผ ๋๋ฆฌ๊ฒ ๋ง๋๋ ๊ฒ์ด ๋ฌด์์ธ์ง ์ค์ค๋ก ์์๋ด๋ ค๊ณ ๋ ธ๋ ฅํ์ต๋๋ค. ๋๋ก๋ ํด๊ฒฐ์ฑ ์ ์ฐพ์ ๊ฒ ๊ฐ์์ต๋๋ค. ํซ ํ๋ฌ๊ทธ๋ฅผ ์ผ๊ณ ๋๊ณ , ๋ฉ๋ชจ๋ฆฌ ์์ด๋ ํ๋ก์ธ์ ์๋ฅผ ๋ณ๊ฒฝํ๋ฉด ์ข ์ข ์ปดํจํฐ๊ฐ "๋น ๋ฅธ" ์ปดํจํฐ๋ก ๋ฐ๋์์ต๋๋ค. ๊ทธ๋ฌ๋ ์์ํ๋ ์๋๋๋ค. ๊ทธ๋ฌ๋ ์ฌ์ค๋ก ๋ฐํ์ง ๊ฒ์ ๋๊ฐ์ ๋ฐํด๋ฅผ ๋๋๋ฆฌ๋ ๊ฒ, ์ฆ ๋ณํํ๋ ๊ฒ๋ง์ผ๋ก๋ ์ถฉ๋ถํ๋ค๋ ๊ฒ์ ๋๋ค. ๋ชจ๋ ๊ฐ์ ๋จธ์ ๋งค๊ฐ๋ณ์
๋ง์นจ๋ด ๋ฏธ๊ตญ ๋๋ฃ๋ค์ด ๊ฐ์๊ธฐ ๊ทผ๋ณธ ์์ธ์ ์ฐพ์๋์ต๋๋ค.
ํธ์คํธ์ ๋น๋๊ฐ ๋ฌ๋์ต๋๋ค!
- ์ผ๋ฐ์ ์ผ๋ก ์ด๊ฒ์ ํฐ ๋ฌธ์ ๊ฐ ์๋๋๋ค. ๊ทธ๋ฌ๋ '๋ค์ดํฐ๋ธ' ํธ์คํธ์์ '๋ค๋ฅธ' ๋น๋๋ฅผ ๊ฐ์ง ํธ์คํธ๋ก ์ด๋ํ ๋ VMware๋ GetTimePrecise ๊ฒฐ๊ณผ๋ฅผ ์กฐ์ ํด์ผ ํฉ๋๋ค.
- ์ผ๋ฐ์ ์ผ๋ก SQL ์๋ฒ์ฒ๋ผ ์ด๋น ์๋ฐฑ๋ง ๋ฒ์ฉ ์ ํํ ์๊ฐ์ ์์ฒญํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์๋ค๋ฉด ์ด๋ ๋ฌธ์ ๊ฐ ๋์ง ์์ต๋๋ค.
- ๊ทธ๋ฌ๋ SQL Server๊ฐ ํญ์ ์ด ์์ ์ ์ํํ๋ ๊ฒ์ ์๋๊ธฐ ๋๋ฌธ์ ์ด๋ ๋๋ ต์ง ์์ต๋๋ค(๊ฒฐ๋ก ์ฐธ์กฐ).
ํ์ง๋ง ์ด ๊ฐํด๊ฐ ํฐ ํ๊ฒฉ์ ์ ๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ํ ์ ํญํ์ฌ(VM ์ค์ ์์ ๋ฌด์ธ๊ฐ๋ฅผ ๋ณ๊ฒฝํ์ฌ) VMware๊ฐ ๊ตฌ์ฑ์ '๋ค์ ๊ณ์ฐ'ํ๋๋ก ๊ฐ์ ํ๊ณ ํ์ฌ ํธ์คํธ์ ์ฃผํ์๊ฐ ์์คํ ์ '๊ธฐ๋ณธ' ์ฃผํ์๊ฐ ๋์์ต๋๋ค.
๊ฒฐ์
TSC์ ๊ฐ์ํ๋ฅผ ๋นํ์ฑํํ๋ฉด ๊ฐ์ ๋จธ์ ๋ด์์ TSC๋ฅผ ์ฝ์ผ๋ฉด ๋ฌผ๋ฆฌ์ ๋จธ์ ์ TSC ๊ฐ์ด ๋ฐํ๋๊ณ , ๊ฐ์ ๋จธ์ ๋ด์์ TSC๋ฅผ ์ฐ๋ฉด ์๋ฌด๋ฐ ํจ๊ณผ๊ฐ ์์ต๋๋ค. ๊ฐ์ ๋จธ์ ์ ๋ค๋ฅธ ํธ์คํธ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๊ฑฐ๋, ์ผ์ ์ค์ง๋ ์ํ์์ ๋ค์ ์์ํ๊ฑฐ๋, ์ค๋ ์ท์ผ๋ก ๋๋๋ฆฌ๋ฉด TSC๊ฐ ์ฐ์์ ์ผ๋ก ์ ํํ๊ฒ ๋ฉ๋๋ค. TSC ๊ฐ์ํ๊ฐ ๋นํ์ฑํ๋๋ฉด ์ผ๋ถ ๊ฒ์คํธ ์ด์ ์ฒด์ ๊ฐ ๋ถํ ๋์ง ์๊ฑฐ๋ ๋ค๋ฅธ ์๊ฐ ์ ์ง ๋ฌธ์ ๊ฐ ๋ํ๋ฉ๋๋ค. ๊ณผ๊ฑฐ์๋ TSC๋ฅผ ์์ฃผ ์ฝ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ํฅ์์ํค๊ธฐ ์ํด ์ด ๊ธฐ๋ฅ์ด ๊ถ์ฅ๋๋ ๊ฒฝ์ฐ๊ฐ ์์์ต๋๋ค., ๊ทธ๋ฌ๋ ํ์ฌ ์ ํ์์๋ ๊ฐ์ TSC์ ์ฑ๋ฅ์ด ํฌ๊ฒ ํฅ์๋์์ต๋๋ค. ๋ํ ์ด ๊ธฐ๋ฅ์ ๊ฐ์ ๋จธ์ ์์ ์ ํํ ์ค์๊ฐ ์์ค๊ฐ ํ์ํ ์ธก์ ์ ์ํํ ๋ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ฆ, ๋งค๊ฐ๋ณ์๋ฅผ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
monitor_control.virtual_rdtsc = ๊ฑฐ์ง
๊ฒฐ๋ก
์๋ง๋ ์ง๋ฌธ์ด ์์ ๊ฒ์ ๋๋ค. SQL์ด GetTimePrecise๋ฅผ ์ ๊ทธ๋ ๊ฒ ์์ฃผ ํธ์ถํฉ๋๊น?
SQL Server ์์ค ์ฝ๋๋ ์์ง๋ง ๋ ผ๋ฆฌ์ ๋ฐ๋ฅด๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค. SQL์ ๊ฑฐ์ ๊ฐ ์ค๋ ๋๊ฐ ๋๋๋ก "ํฌ๊ธฐ"ํด์ผ ํ๋ ํ๋ ฅ์ ๋์์ฑ์ ๊ฐ์ถ ์ด์ ์ฒด์ ์ ๋๋ค. ์ด ์์ ์ ์ํํ๋ ๊ฐ์ฅ ์ข์ ์ฅ์๋ ์ด๋์ ๋๊น? ์์ฐ์ค๋ฌ์ด ๋๊ธฐ๊ฐ ์๋ ๊ฒฝ์ฐ - ์ ๊ธ ๋๋ IO. ์ข์ต๋๋ค. ํ์ง๋ง ๊ณ์ฐ ๋ฃจํ๋ฅผ ํ์ ์ํค๋ฉด ์ด๋จ๊น์? ๊ทธ๋ ๋ค๋ฉด ๋ช ๋ฐฑํ๊ณ ๊ฑฐ์ ์ ์ผํ ์์น๋ ๋ค์ ๋ช ๋ น๋ฌธ์ ์คํํ ํ ์ธํฐํ๋ฆฌํฐ(์ค์ ๋ก๋ ์ธํฐํ๋ฆฌํฐ๊ฐ ์๋๋๋ค)์ ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก SQL Server๋ ์์ ์ปดํจํ ๋ค์ผ๋ง์ ์ฌ์ฉ๋์ง ์์ผ๋ฉฐ ์ด๋ ๋ฌธ์ ๊ฐ ๋์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ชจ๋ ์ข ๋ฅ์ ์์ ํ ์ด๋ธ(์ฆ์ ์บ์๋จ)๊ณผ ํจ๊ป ์๋ํ๋ ๋ฃจํ๋ ์ฝ๋๋ฅผ ๋งค์ฐ ๋น ๋ฅด๊ฒ ์คํ๋๋ ์ผ๋ จ์ ๋ช ๋ น๋ฌธ์ผ๋ก ๋ฐ๊ฟ๋๋ค.
๊ทธ๋ฐ๋ฐ ํจ์๋ฅผ NATIVELY COMPILED๋ก ๋ํํ๋ฉด ์๊ฐ ์์ฒญ์ด ์ค๋จ๋๊ณ ์๋๊ฐ 10๋ฐฐ ์ฆ๊ฐํฉ๋๋ค. ํ๋์ ๋ฉํฐํ์คํน์ ์ด๋ป์ต๋๊น? ๊ทธ๋ฌ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ปดํ์ผ๋ ์ฝ๋์ ๊ฒฝ์ฐ SQL์์ PREEMPTIVE MULTITASKING์ ์ํํด์ผ ํ์ต๋๋ค.
์ถ์ฒ : habr.com