INF: ºÐ¼® ¹× SQL Server ¿¡¼­ ±³Âø »óÅ ¹æÁö

±â¼ú ÀÚ·á: 169960 - ÀÌ ¹®¼­°¡ Àû¿ëµÇ´Â Á¦Ç° º¸±â.
¸ðµÎ È®´ë | ¸ðµÎ Ãà¼Ò

ÀÌ ÆäÀÌÁö¿¡¼­

¿ä¾à

Microsoft SQL Server Àá±ÝÀ» »ç¿ëÇÏ¿© Æ®·£Àè¼Ç ¹«°á¼º ¹× µ¥ÀÌÅͺ£À̽º Àϰü¼ºÀ» À¯ÁöÇÕ´Ï´Ù. SQL Server ¹öÀü 6.5 ¼±ÅÃÀûÀ¸·Î »ðÀÔ ÀÛ¾÷À» Çà ¼öÁØ Àá±ÝÀ» »ç¿ëÇÏ°í ´Ù¸¥ ÀÛ¾÷¿¡ ´ëÇØ ÆäÀÌÁö ¼öÁØ Àá±ÝÀ» »ç¿ëÇÕ´Ï´Ù. ¸ðµç °ü°èÇü µ¥ÀÌÅͺ£À̽º ½Ã½ºÅÛ°ú ¸¶Âù°¡Áö·Î, Àá±Ý ±³Âø »óÅ ¼ö »ç¿ëÀÚ °£¿¡ ¹ß»ýÇÒ ¼ö ÀÖ½À´Ï´Ù.

¿¹¸¦ µé¾î, User1 (¶Ç´Â Connection1) Àá±ÝÀ» °æ¿ì¸¦ °¡Á¤ÇØ º¸°Ú½À´Ï´Ù µ¥ÀÌÅÍ Ç׸ñ "A" ¹× "B" µ¥ÀÌÅÍ Ç׸ñÀ» Àá±×·Á°íÇÕ´Ï´Ù User2°¡ µ¥ÀÌÅÍ Ç׸ñ "B" Àá±ÝÀ» °¡Áö¸ç ÀÌÁ¦ µ¥ÀÌÅÍ Ç׸ñ "A" Àá±×·Á°í ÀÌ SQL Server ½Ã³ª¸®¿À¿¡¼­´Â User1 ¶Ç´Â User2°¡ ±³Âø »óŰ¡ ¹ß»ýÇÏ¿© ¼ö ÀÖÀ¸¸ç ´Ù¸¥ »ç¿ëÀÚ°¡ ¿äûÇÑ Àá±ÝÀÌ ºÎ¿©µË´Ï´Ù.

SQL Server¿¡¼­ SET DEADLOCK_PRIORITY ±³Âø »óŰ¡ ¹ß»ýÇÏ¿© Èĺ¸ ¾î¶² ¿¬°áÀÌ µË´Ï´Ù ÀÀ¿ë ÇÁ·Î±×·¥ °³¹ßÀÚ°¡ °áÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. °³¹ßÀÚ´Â ±³Âø »óÅ ¿ì¼± ¼øÀ§¸¦ ÁöÁ¤ÇÏ´Â °æ¿ì, SQL Server ±³Âø »óŰ¡ ¹ß»ýÇÏ¿©¸¦ Àá±Ý ¼øÈ¯ üÀο¡¼­ ¿Ï·áµÈ ÇÁ·Î¼¼½º¸¦ ¼±ÅÃÇÏ¿© ¼±ÅÃÇÏ´Â ¿¹Á¦ÀÔ´Ï´Ù.

µ¥ÀÌÅͺ£À̽º ÀÀ¿ë ÇÁ·Î±×·¥ ½Ã½ºÅÛÀ» µ¿ÀÛÇÒ ¼ö ÀÖ½À´Ï´Ù °ü°èÇü µ¥ÀÌÅͺ£À̽º °£¿¡ ´Ù¸¥ ÄÄÇ»ÅÍ·Î À̽ÄÇÒ ¶§ °ü°èÇü µ¥ÀÌÅͺ£À̽º ½Ã½ºÅÛ ±¸Çö¿¡ µû¶ó ´Ù¸£°Ô ±â¹ÝÀ¸·Î. ÇàÅ º¯°æ ³»¿ëÀ» º¼ ¼ö ÀÖ´Â ¿µ¿ª Áß Çϳª°¡ Àá±×´Â °ÍÀÔ´Ï´Ù. ÀÌ ¹®¼­¿¡¼­´Â SQL Server ¹× À̸¦ ¹æÁöÇϱâ À§ÇØ »ç¿ëÇÒ ¼ö ÀÖ´Â ±â¼úÀ» ±³Âø »óŸ¦ ºÐ¼®ÇÏ´Â ¹æ¹ýÀ» ¼³¸íÇÕ´Ï´Ù.

Ãß°¡ Á¤º¸

ÀÌ ¹®¼­¿¡¼­´Â ÃßÀû Ç÷¡±× T1204 Ãâ·ÂÀ» »ç¿ëÇÏ¿© ±³Âø »óŸ¦ ºÐ¼®ÇÒ °­Á¶ÇÕ´Ï´Ù. ÃßÀû Ç÷¡±× T1204 ¼³Á¤µÇ¾î ÀÖÀ¸¸é ¹ß»ýÇÒ ¶§ SQL Server ±³Âø »óÅ¿¡ ´ëÇÑ Á¤º¸¸¦ ÀμâÇÕ´Ï´Ù. ÀÌ ÃßÀû Ç÷¡±×¸¦ »ç¿ëÇÏ¿© SQL Server ½ÃÀÛÇÏ·Á¸é ¸í·É ÇÁ·ÒÇÁÆ®¿¡¼­ ´ÙÀ½ ¸í·ÉÀ» »ç¿ëÇÕ´Ï´Ù.
   sqlservr -c -T1204
				

¿À·ù ·Î±×·Î ÃßÀû °á°ú¸¦ º¸³À´Ï´Ù ÃßÀû Ç÷¡±× T3605, ¼³Á¤ÇÏÁö ¾ÊÀ¸¸é ÃßÀû °á°ú°¡ ÄÜ¼Ö Ã¢¿¡ º¸³À´Ï´Ù.

µÎ °³ÀÇ ¿¬°áÀ» ¹Ý´ë ¼ø¼­·Î Å×À̺íÀ» ¾÷µ¥ÀÌÆ®ÇÒ ¶§ ±³Âø »óŰ¡ ¹ß»ýÇÒ ¼ö ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î, ´Ù¸¥ ¿¬°á Å×ÀÌºí¿¡ ù ¹øÂ° "example2" ¹× "example1" Æ®·£Àè¼Ç ³»¿¡¼­ µ¥ÀÌÅ͸¦ »ðÀÔÇÏ´Â µ¿¾È ÇÑ ¿¬°á Å×ÀÌºí¿¡ ù ¹øÂ° "example1" ¹× "example2" ·Î »ðÀÔÇÕ´Ï´Ù. ±³Âø »óŸ¦ ¹æÁöÇÏ´Â ¹æ¹ýÀ» ¼³¸íÇϱâ À§ÇØ ¿¹Á¦ ½Ã³ª¸®¿À¿¡ À¯¿ëÇÕ´Ï´Ù.

ÀÌ ¿¹Á¦¿¡¼­´Â Å×À̺íÀ» ¸¸µå´Â µ¥ »ç¿ëÇÏ´Â SQL ¹®À» ´ÙÀ½°ú °°½À´Ï´Ù.
   create table example1 (column1 int, column2 char(20), column3 char(50))
   go
   create table example2 (column1 int, column2 char(20), column3 char(50))
   go
   declare @lvar int
   select @lvar = 0
   while @lvar < 500
   begin
   insert into example1 values (@lvar, 'AAA', 'CCC')
   insert into example2 values (@lvar, 'AAA', 'CCC')
   select @lvar = @lvar + 1
   end
   go
   create unique clustered index ex1ind1 on example1 (column1, column2)
   with fill factor = 90, PAD_INDEX
   go
   create unique clustered index ex2ind1 on example2 (column1, column2)
   with fill factor = 90, PAD_INDEX
   go
				

´ëÇâ ¼ø¼­·Î ¿¹Á¦ 1: Å×ÀÌºí »ðÀÔ

ÀÌ ¿¹Á¦¿¡¼­´Â µÎ °³ÀÇ Å×À̺íÀ» ¹Ý´ë ¼ø¼­·Î »ðÀÔµÈ ¹× ±³Âø »óŰ¡ ¹ß»ýÇß½À´Ï´Ù. ¹Ý´ë ¼ø¼­·Î Å×ÀÌºí¿¡ ´ëÇÑ ¾÷µ¥ÀÌÆ®³ª »èÁ¦°¡ ´õ ¸¹Àº ¿¬°áÀ» ¼öÇàÇÏ´Â ±³Âø »óÅ´ µÎ ¶§¿¡µµ ¹ß»ýÇÒ ¼ö ÀÖ½À´Ï´Ù.
   Connection1 > BEGIN TRANSACTION
   Connection2 > BEGIN TRANSACTION
   Connection1 > INSERT INTO example1 VALUES (100, 'AAAA', 'CCC')
   Connection2 > INSERT INTO example2 VALUES (200, 'AAAB', 'CCC')
   Connection2 > INSERT INTO example1 VALUES (200, 'AAAB', 'CCC')
				

ÀÌ ½ÃÁ¡¿¡¼­ Connection1 ÇàÀÌ ÀÌ¹Ì »ðÀÔµÈ ¹× Àá±ÝÀÌ ÀÖ½À´Ï´Ù °°Àº ÆäÀÌÁö¿¡ Connection2 »ðÀÔ Çà ¼ö Àֱ⠶§¹®¿¡ Connection1 Connection2¸¦ Â÷´ÜÇÒ ¼ö ÀÖ½À´Ï´Ù.
   Connection1 > INSERT INTO example2 VALUES (100, 'AAAA', 'CCC')
				

ÀÌ ½ÃÁ¡¿¡¼­ Connection2 Connection1, Connection2 ÇàÀÌ ÀÌ¹Ì »ðÀÔµÈ ¹× Àá±ÝÀ» º¸À¯ÇÏ´Â °°Àº ÆäÀÌÁö¿¡ Connection1 »ðÀÔ Çà ¼öµµ ÀÖÀ¸¹Ç·Î Â÷´ÜÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ·Î ÀÎÇØ ±³Âø »óŰ¡ ¹ß»ýÇÕ´Ï´Ù.

ÃßÀû Ç÷¡±× 1204 ¶§ ±³Âø »óŰ¡ ¹ß»ýÇÑ Ãâ·Â ´ÙÀ½°ú °°½À´Ï´Ù.
97/04/20 11:51:57.88 spid13   *** DEADLOCK DETECTED with spid 14 ***
   spid 13 requesting EX_PAGE (waittype 0x8005), blocked by:
     EX_PAGE: spid 14, dbid 6, page 0x188, table example2, indid 0x1
     pcurcmd INSERT(0xc3), input buffer: INSERT INTO example2 VALUES (100,
     'AAAA', 'CCC')
   spid 14 waiting for EX_PAGE (waittype 0x8005), blocked by:
     EX_PAGE: spid 13, dbid 6, page 0x180, table example1, indid 0x1
     pcurcmd INSERT(0xc3), input buffer: INSERT INTO example1 VALUES (200,
   'AAAB', 'CCC')
   VICTIM: spid 13, pstat 0x0000 , cputime 30
				

±³Âø »óÅ ÃßÀû ¸Þ½ÃÁöÀÇ °¢ ÁÙ¿¡ »ç¿ëÀÚ°¡ ¾Ë ¼ö ±³Âø »óŸ¦ ÀÚ¼¼È÷. Connection1 spid 13 ÀÖ°í Connection2 spid 14 sp_who ½Ã½ºÅÛ ÀúÀå ÇÁ·Î½ÃÀú¸¦ »ç¿ëÇÏ¿© ¿¬°áÀÌ ¿¬°áµÈ spid È®ÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù.
   >> 97/04/20 11:51:57.88 spid13   *** DEADLOCK DETECTED with spid 14 ***
   The deadlock was detected between spid 13 and spid 14.
   >> spid 13 requesting EX_PAGE (waittype 0x8005), blocked by:
   >>   EX_PAGE: spid 14, dbid 6, page 0x188, table example2, indid 0x1
   >>   pcurcmd INSERT(0xc3), input buffer: INSERT INTO example2 VALUES
   (100, 'AAAA', 'CCC')
				

Spid 13 EX_PAGE Àá±ÝÀ» ¿äûÇÏ´Â ¹× Å×À̺í example2 0x188 ÆäÀÌÁö¿¡ ´ëÇÑ EX_PAGE Àá±ÝÀ» dbid 6 ÀÌ¹Ì spid 14, ÀÇÇØ Â÷´ÜµÇ¾ú½À´Ï´Ù. Ŭ·¯½ºÅÍµÈ À妽º°¡ ¼ÓÇÑ ÆäÀÌÁö¿¡¼­ Àá±ÝÀÌ ÀÖ½À´Ï´Ù.
      Indid Value         Description
-------------------------------------
         0                Data page if there is no clustered index, or the
                          leaf page of a clustered index if there is one
         1                Non-leaf page of the clustered index page
       255                Text/image page
    Any other value       Non-clustered secondary index
				

ÇöÀç ¸í·É 13 spid¿¡ ÀÇÇØ ½ÇÇàµÈ INSERT ÀÖ°í ÀÔ·ÂµÈ ¹öÆÛ ÀϺΰ¡ ÃßÀûÀ» Á¦°øÇÕ´Ï´Ù.
   >> spid 14 waiting for EX_PAGE (waittype 0x8005), blocked by:
   >>   EX_PAGE: spid 13, dbid 6, page 0x180, table example1, indid 0x1
   >>   pcurcmd INSERT(0xc3), input buffer: INSERT INTO example1 VALUES
   (200, 'AAAB', 'CCC')
				

Spid 14 EX_PAGE Àá±ÝÀ» ±â´Ù¸®´Â ¹× EX_PAGE Àá±ÝÀÌ °°Àº ÆäÀÌÁö¿¡ ÀÌ¹Ì spid 13, ÀÇÇØ Â÷´ÜµÇ¾ú½À´Ï´Ù.
   >> VICTIM: spid 13, pstat 0x0000 , cputime 30
   SQL Server has chosen spid 13 as the deadlock victim.
				

´Ù¾çÇÑ Àá±Ý ÃßÀû¿¡¼­ Àǹ̿¡ ´ëÇÑ ¼³¸í°ú ´ÙÀ½°ú °°½À´Ï´Ù.

SH_INT ¹× EX_INT
Àá±Ý °ü¸®ÀÚ¿¡ ´Ù¸¥ À¯ÇüÀÇ Ç׸ñ¿¡ (ÀÌ °æ¿ì, ÆäÀÌÁö ¹× Å×ÀÌºí °£ÀÇ °ü°è¸¦ ÀνÄÇÏÁö ¾ÊÀ¸¹Ç·Î »óÀ§ ¼öÁØÀÇ Ç׸ñ (¿¹: Å×À̺í) ÇÏÀ§ ¼öÁØ Àá±Ý (¿¹¸¦ µé¾î, ÆäÀÌÁö) Àü¿¡ ¼öÇàµÇ´Â Àǵµ Àá±Ý, °¡Á®¿Ã ¼ö ÀÖ½À´Ï´Ù. ÆäÀÌÁö¿¡ EX_PAG Àá±ÝÀ» ³Ñ¾î°¡·Á¸é EX_INT Àá±ÝÀ» Å×ÀÌºí¿¡ ÂïÀº ¾Ê´Â °æ¿ì ´Ù¸¥ »ç¿ëÀÚ°¡ °°Àº Å×ÀÌºí¿¡ EX_TAB Àá±ÝÀ» ¼öÇàÇÒ ¼ö ¹× Ãæµ¹ÀÌ Á¸ÀçÇÏ´Â Àá±Ý °ü¸®ÀÚ°¡ ¾Ë ¼ö ¾ø½À´Ï´Ù. ÇöÀç SQL Server Àǵµ Àá±Ý Å×À̺íÀ» ±â¹ÝÀ¸·Î ÇÕ´Ï´Ù. µÎ Á¾·ùÀÇ Àǵµ Àá±Ý: °øÀ¯ (SH_INT) ¹× (EX_INT) ´Üµ¶ Àá±ÝÀ» ¼³Á¤ÇÕ´Ï´Ù.

EX_PAGE
INSERT ¹®À» »ç¿ë ¾È ÇÔ (IRLÀ») Çà ¼öÁØ Àá±Ý »ðÀÔ ¶Ç´Â UPDATE, DELETE ÀÎÇØ ÆäÀÌÁö¸¦ ¾÷µ¥ÀÌÆ®ÇÒ ¶§ ¼öÇàµÇ´Â ´Üµ¶ ÆäÀÌÁö Àá±ÝÀÔ´Ï´Ù.

UP_PAGE
ÀÌ ÆäÀÌÁö °øÀ¯ Àá±Ý ´ë½Å ÆäÀÌÁö¸¦ ½ºÄµÇÑ ÆäÀÌÁö¸¦ ¾÷µ¥ÀÌÆ®ÇÑ ÃÖÀûÈ­ ¾Ë°í ¶§ ¼öÇàµÇ´Â ¾÷µ¥ÀÌÆ® ÆäÀÌÁö Àá±ÝÀÌ ¶Ç´Â UPDLOCK ÈùÆ® »ç¿ëµË´Ï´Ù.

PR_EXT, NX_EXT, UPD_EXT, ¹× EX_EXT
ÀÌ·¯ÇÑ Àá±ÝÀº ÇÒ´çµÇ°Å³ª µð½ºÅ© °ø°£ ÇÒ´ç ÇØÁ¦ ¶§ ¼öÇàµË´Ï´Ù. UPD_EXT ÇÒ´ç ¶Ç´Â ÆäÀÌÁö¿¡¼­ ±âÁ¸ ÀͽºÅÙÆ® ÇÒ´ç ÇØÁ¦ ¶§ ¼öÇàµÇ´Â ¹× ´Ù¸¥ ÇÒ´ç ¶Ç´Â ÇÒ´ç ÇØÁ¦ Àüü ÀͽºÅÙÆ®¸¦ ¶§ »ç¿ëµË´Ï´Ù.

IX_PAGE ¹× LN_PAGE
ÀÌ·¯ÇÑ IRLÀ» Àá±ÝÀÌ ÀÖ½À´Ï´Ù. ÆäÀÌÁö¿¡ ´ëÇÑ Àǵµ¸¦ ¼ö-ÀÏ-Çà-Àá±Ý Àá±ÝÀ» IX_PAGE°¡ ÀÖ½À´Ï´Ù. LN_PAGE ÀÖ´Â IRLÀ» ºÐÇÒÇØ¾ß ÇÏ´Â ¼öÇàµÇ´Â °ÍÀÌ ÆäÀÌÁö ¶§ ¼öÇàµÇÁö ¾Ê½À´Ï´Ù.

RLOCK ¹× XRLOCK
ÀÌ·¯ÇÑ ´Ü±â Àá±Ý ¾ÊÀº À妽º B-Æ®¸® Åë°úÇÏ´Â ¶§ ¼öÇàµË´Ï´Ù. °¡Áö µÎ Á¾·ùÀÇ ÀÌ·¯ÇÑ Á¾·ùÀÇ Àá±Ý: °øÀ¯ (RLOCK) ¹× ´Üµ¶ (XRLOCK). ´Üµ¶ Àá±ÝÀÌ À妽º ÆäÀÌÁö¸¦ ¾÷µ¥ÀÌÆ®ÇÏ´Â µ¿¾È ¼öÇàµÇ´Â µ¿¾È °Ë»öÇÏ´Â µ¿¾È °øÀ¯ Àá±ÝÀº °¡Á®¿É´Ï´Ù.

EX_TAB
ÀÌ SQL Server ÃÖÀûÈ­ ÇÁ·Î±×·¥ÀÌ Å×ÀÌºí ½ºÄµÀ» (¿¹¸¦ µé¾î, Å×ÀÌºí¿¡ À妽º°¡ ÀÖ´Â °æ¿ì) ¾÷µ¥ÀÌÆ® Äõ¸®¸¦ ÇØ°áÇϱâ À§ÇØ °¡Àå È¿À²ÀûÀÎ ¹æ¹ýÀº °áÁ¤µË´Ï´Ù ¶§ ¹ß»ýÇÏ´Â ´Üµ¶ Å×À̺í Àá±ÝÀ¸·Î ÀÖ½À´Ï´Ù. EX_TAB Àá±ÝÀ» TABLOCKX ÈùÆ® ¶Ç´Â ÆäÀÌÁö Àá±ÝÀ» Å×À̺í Àá±ÝÀ¸·Î Å×ÀÌºí¿¡ ´ëÇØ SQL Server ¿¡½ºÄ÷¹À̼ÇÇÕ´Ï´Ù ¶§ Å×À̺íÀ» Àá±Û ¶§µµ ³ªÅ¸³³´Ï´Ù.

SH_TAB
°øÀ¯ À̰ÍÀº ÃÖÀûÈ­ ÇÁ·Î±×·¥Àº Å×À̺íÀÇ ´ëºÎºÐÀÇ ¶§ »ç¿ëµÇ´Â Å×À̺í Àá±ÝÀÌ °Ë»öµË´Ï´Ù (¶Ç´Â ÆäÀÌÁö Àá±ÝÀ» ¿¡½ºÄ÷¹À̼ÇÇÕ´Ï´Ù) ¶Ç´Â TABLOCK ÈùÆ®°¡ »ç¿ëµË´Ï´Ù.

µÎ °³ÀÇ ¿¬°áÀÌ ´ÙÀ½ ¼ø¼­·Î Å×À̺íÀ» ¾÷µ¥ÀÌÆ®Çϸé ÀÌÀü ±³Âø »óŰ¡ ¿¹Á¦¿¡¼­´Â ÇÇÇÒ ¼ö ÀÖ½À´Ï´Ù.
   Connection1 > BEGIN TRANSACTION
   Connection2 > BEGIN TRANSACTION
   Connection1 > INSERT INTO example1 VALUES (100, 'AAAA', 'CCC')
   Connection2 > INSERT INTO example1 VALUES (200, 'AAAB', 'CCC')
   Connection2 > INSERT INTO example2 VALUES (200, 'AAAB', 'CCC')
   Connection1 > INSERT INTO example2 VALUES (100, 'AAAA', 'CCC')
				

°°Àº Å×À̺íÀÇ ´Ù¸¥ ÆÄÆ®¿¡ ¿¹Á¦ 2: »ðÀÔ

Çà ÆäÀÌÁö¸¦ °øÀ¯ÇÒ ¶§ ¹Ý´ë ¼ø¼­·Î °°Àº Å×À̺íÀÇ ´Ù¸¥ ºÎºÐ¿¡ µÎ °³ÀÇ ¿¬°áÀ» »ðÀÔÇÒ ¶§ ÀÌ ±³Âø »óŰ¡ ¹ß»ýÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¸é:
   Connection1 > BEGIN TRANSACTION
   Connection2 > BEGIN TRANSACTION
   Connection1 > INSERT INTO example1 VALUES (100, 'AAAA', 'CCC')
   Connection2 > INSERT INTO example1 VALUES (400, 'AAAB', 'CCC')
   Connection1 > INSERT INTO example1 VALUES (400, 'AAAA', 'CCC')
				

ÀÌ ¿¹Á¦¿¡¼­´Â Å×À̺íÀÇ °æ¿ì Ŭ·¯½ºÅÍµÈ À妽º¸¦ example1 Å×À̺íÀÇ Ã¹ ¹øÂ° ¿­ ù ¹øÂ° ¿­¿¡ ´ëÇØ °°Àº °ª °¡Áø ÇàÀ» ¸ðµÎ °°Àº ÆäÀÌÁö¿¡ ¼ÓÇÏ´Â °æÇâÀÌ ÀÖ½À´Ï´Ù. µÑ ´Ù 400 Ŭ·¯½ºÅÍµÈ À妽º °ªÀ» °¡Áú ¼ö Àֱ⠶§¹®¿¡ ¿¹Á¦¿¡¼­´Â Connection1¿¡ ÀÇÇØ »ðÀÔµÈ Çà ¾Æ¸¶µµ Connection2¿¡ ÀÇÇØ »ðÀÔµÈ Ã¹ ¹øÂ° ÇàÀ¸·Î °°Àº ÆäÀÌÁö¿¡ ¾²·¯Áú °ÍÀÌ´Ù. ºí·Ï Connection1 Connection2°¡ µË´Ï´Ù.
   Connection2 > INSERT INTO example1 VALUES (100, 'AAAB', 'CCC')
				

ÀÌÁ¦ Connection2 ¶ÇÇÑ ±³Âø »óÅ ¼±Çà Connection1¿¡ ÀÇÇØ Â÷´ÜµÉ ¼ö ÀÖ½À´Ï´Ù. ±³Âø »óÅ ÃßÀû ´ÙÀ½°ú °°½À´Ï´Ù.
   97/04/20 12:56:01.40 spid16   *** DEADLOCK DETECTED with spid 15 ***
   spid 16 requesting EX_PAGE (waittype 0x8005), blocked by:
     EX_PAGE: spid 15, dbid 6, page 0x2c5, table example1, indid 0
     pcurcmd INSERT(0xc3), input buffer: INSERT INTO example1 VALUES (100,
   'AAAB', 'CCC')
   spid 15 waiting for EX_PAGE (waittype 0x8005), blocked by:
     EX_PAGE: spid 16, dbid 6, page 0x8bd, table example1, indid 0
     pcurcmd INSERT(0xc3), input buffer: INSERT INTO example1 VALUES (400,
   'AAAA', 'CCC')
   VICTIM: spid 16, pstat 0x0000 , cputime 130
				

ù ¹øÂ° »ðÀÔ ¼öÇàÇÑ ÈÄ ÀÌ¹Ì ÆäÀÌÁöÀÇ 0x2c5 EX_PAGE Àá±ÝÀ» º¸À¯Çϰí ÀÖ´Â spid¿¡ ÀÇÇØ 15, ÆäÀÌÁö 0x2c5 EX_PAGE Àá±Ý spid 16 ¿äûÀÌ Â÷´ÜµË´Ï´Ù. ¹× spid 15 ¶ÇÇÑ ±³Âø »óÅ ¼ö ÀÖ´Â ÆäÀÌÁö 0x8db ¾Õ¿¡ EX_PAGE Àá±Ý ±â´Ù¸®´Â 16 spid¿¡ ÀÇÇØ Â÷´ÜµÈ ÀÖ¾î¿ä.

Å×À̺í example1 IRLÀ» »ç¿ëÇÏ·Á¸é ´ÙÀ½ ¸í·ÉÀ» »ç¿ëÇÏ¿© ÀÌ ±³Âø »óŸ¦ ÇÇÇÒ ¼ö ÀÖ½À´Ï´Ù.
   sp_tableoption 'example1', 'insert row lock', true
				

¿¹Á¦ 3: »ðÀÔ IRLÀ» »ç¿ë

IRLÀ» Á¾Á¾ ´õ ³ªÀº 󸮷® °á°ú µÑ ÀÌ»óÀÇ »ç¿ëÀÚ°¡ ÀÛ¾÷À» °æ¿ì¿¡¸¸ »ðÀÔ ÀÛ¾÷À» ¼öÇàÇÒ ¶§ ÆäÀÌÁö¸¦ °øÀ¯ÇÒ ¼ö ÀÖ½À´Ï´Ù. ±×·¯³ª IRLÀ» »ç¿ëÇϸé Ç×»ó ±³Âø »óŸ¦ ÁÙÀÏ ¼ö ÀÖ½À´Ï´ÙÁö ¾Ê½À´Ï´Ù. °æ¿ì¿¡ µû¶ó¼­´Â IRLÀ» ±³Âø »óŰ¡ ¹ß»ýÇÒ ¼ö ÀÖ½À´Ï´Ù.
   Connection1 > BEGIN TRANSACTION
   Connection2 > BEGIN TRANSACTION
   Connection1 > INSERT INTO example1 VALUES (100, 'AAAA', 'CCC')
   Connection2 > INSERT INTO example1 VALUES (105, 'AAAB', 'CCC')
				

IRLÀ» »ç¿ëÇÒ ¼ö ÀÖ´Â µÎ °³ÀÇ »õ·Î¿î ÇàÀ» Æ÷ÇÔÇÏ´Â ÆäÀÌÁö¿¡¼­ µÎ ¿¬°áÀ» IX_PAGE Àá±ÝÀ» º¸°üÇÕ´Ï´Ù. IRLÀ» »ç¿ëÇÒ °æ¿ì Connection1 EX_PAGE Àá±ÝÀ» ¾òÀº °ÍÀÔ´Ï´Ù ¹× Connection2 Áï½Ã Â÷´ÜµÈ °ÍÀÔ´Ï´Ù.
   Connection2 > UPDATE example1 SET column3 = 'CCCB' where column1 = 105
   and column2 = 'AAAB'
				

ÀÌ ½ÃÁ¡¿¡¼­ Connection2 Connection1ÀÇ IX_PAGE Àá±ÝÀÌ È£È¯µÇÁö UPDATE ¹® ÇÏ·Á¸é ´Üµ¶ ÆäÀÌÁö Àá±ÝÀ» ÇÕ´Ï´Ù. µû¶ó¼­ Connection2°¡ ´ë±âÇÕ´Ï´Ù.
   Connection1 > UPDATE example1 SET column3 = 'CCCA' where column1 = 100
   and column2 = 'AAAA'
				

ÀÌÁ¦ Connection1 ±³Âø »óÅ ¼±Çà Connection2¿¡ ÀÇÇØ Â÷´ÜµÉ ¼ö ÀÖ½À´Ï´Ù. ±³Âø »óÅ ÃßÀû ´ÙÀ½°ú °°½À´Ï´Ù.
   97/04/20 15:13:50.07 spid17   *** DEADLOCK DETECTED with spid 18 ***
   spid 17 requesting UP_PAGE (waittype 0x8007), blocked by:
     IX_PAGE: spid 18, dbid 6, page 0x2c5, table example1, indid 0
     pcurcmd UPDATE(0xc5), input buffer: UPDATE example1 SET column3 =
   'CCCA' where column1 = 100 and column2 = 'AAAA'
   spid 18 waiting for UP_PAGE (waittype 0x8007), blocked by:
     IX_PAGE: spid 17, dbid 6, page 0x2c5, table example1, indid 0
     pcurcmd UPDATE(0xc5), input buffer: UPDATE example1 SET column3 =
   'CCCB' where column1 = 105 and column2 = 'AAAB'
   VICTIM: spid 17, pstat 0x0000 , cputime 20
				

Spid 17 (¿¬°á Çϳª¸¦) ¸ÕÀú ´Üµ¶ ÆäÀÌÁö Àá±ÝÀ» ¾ò´Â µ¥¿¡ ´ëÇÑ UP_PAGE Àá±ÝÀ» ±â´Ù¸®´Â ÁßÀÔ´Ï´Ù. ÆäÀÌÁö 0x2c5 IX_PAGE Àá±ÝÀ» º¸À¯ÇÑ spid 18, ÀÇÇØ Â÷´ÜµÇÁö ¾Ê½À´Ï´Ù. Spid 18 °°Àº ÆäÀÌÁö¿¡ UP_PAGE Àá±ÝÀ» ±â´Ù¸®´Â ¹× IX_PAGE Àá±ÝÀ» º¸À¯ÇÑ spid 17¿¡ ÀÇÇØ Â÷´ÜµÈ. ¹Ý¸é UP_LOCK ¾ÊÀº IX_PAGE Àá±ÝÀ» °øÀ¯ÇÒ, Àֱ⠶§¹®¿¡ ±³Âø »óŰ¡ ¹ß»ýÇÕ´Ï´Ù. ù ¹øÂ° »ðÀÔ ½Ã ¸ðµÎ °°Àº ÆäÀÌÁö¿¡ ÀÖ´Â spids IX_PAGE Àá±ÝÀÌ ÀÖ¾î¿ä ¹× UP_PAGE Àá±ÝÀ» ´Üµ¶ Àֱ⠶§¹®¿¡ ¾î¶² ºÒ°¡´ÉÇÕ´Ï´Ù UP_PAGE Àá±ÝÀ¸·Î Àá±ÝÀ» ¾÷±×·¹À̵带 ½ÃµµÇÑ ³ªÁß¿¡ ÀÚ½ÅÀÌ.

±³Âø »óŸ¦ ¹æÁöÇÏ´Â ÇÑ °¡Áö ¹æ¹ýÀº Å×ÀÌºí¿¡ Á÷Á¢ »ðÀÔ°ú °°Àº Æ®·£Àè¼Ç¿¡¼­ ÇàÀ» ¾÷µ¥ÀÌÆ®ÇÏ´Â ´ë½Å ¾÷µ¥ÀÌÆ®µÈ °ªÀ» »ðÀÔÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ °æ¿ì ±³Âø »óŰ¡ ¹ß»ýÇÏÁö ¾Êµµ·Ï IRLÀ» »ç¿ëÇÏÁö ¾ÊÀ¸·Á¸é ´ÙÀ½ ¸í·ÉÀ» »ç¿ëÇÏ¿© µµ¿ÍÁÝ´Ï´Ù.
   sp_tableoption 'example1', 'insert row lock', false
				

¿¹Á¦ 4: »ðÀÔ °°Àº ÆäÀÌÁöÀÇ Çà ¼ö

¶ÇÇÑ µÎ spids ÀÛ¾÷ ÁßÀÎ ÇàÀ» ¼­·Î µ¿ÀÏÇÑ ÆäÀÌÁö¿¡ ¼ÓÇÏ´Â °æ¿ì ±³Âø »óŰ¡ ¹ß»ýÇÒ ¼ö ÀÖ½À´Ï´Ù.
   Connection1 > BEGIN TRANSACTION
   Connection2 > BEGIN TRANSACTION
   Connection1 > INSERT INTO example1 VALUES (100, 'AAAA', 'CCC')
   Connection2 > INSERT INTO example1 VALUES (400, 'AAAB', 'CCC')
   Connection1 > UPDATE example1 SET column3 = 'CCCA' where column1 = 405
   and column2 = 'AAAA'
				

ÀÌ ½ÃÁ¡¿¡¼­ Connection1 Connection2¿¡ ÀÇÇØ Â÷´ÜµÉ ¼ö ÀÖ½À´Ï´Ù. Connection1 Connection2 ÀÌ¹Ì ÇàÀÌ »ðÀÔµÈ À§Ä¡¸¦ ÆäÀÌÁöÀÇ ÇàÀ» ¾÷µ¥ÀÌÆ®ÇÒ ¿øÇÕ´Ï´Ù ¶§¹®¿¡ ÀÌ·¯ÇÑ »óȲÀÌ ¹ß»ýÇÒ ¼ö ÀÖ½À´Ï´Ù.
   Connection2 > UPDATE example1 SET column3 = 'CCCB' where column1 = 105
   and column2 = 'AAAB'
				

ÀÌ ½ÃÁ¡¿¡¼­ Connection2 ¶ÇÇÑ ±³Âø »óŰ¡ ¹ß»ýÇÒ Connection1¿¡ ÀÇÇØ Â÷´ÜµÉ ¼ö ÀÖ½À´Ï´Ù. Connection2 Connection1 Çà »ðÀԵǾî ÀÖ´Â ÆäÀÌÁö ÇàÀ» ¾÷µ¥ÀÌÆ®ÇÒ ¶§ ÀÌ·¯ÇÑ »óȲÀÌ ¹ß»ýÇÒ ¼ö ÀÖ½À´Ï´Ù. ±³Âø »óÅ ÃßÀû ´ÙÀ½°ú °°½À´Ï´Ù.
   97/04/20 15:48:21.18 spid20   *** DEADLOCK DETECTED with spid 19 ***
   spid 20 requesting UP_PAGE (waittype 0x8007), blocked by:
     EX_PAGE: spid 19, dbid 6, page 0x2c4, table example1, indid 0
     pcurcmd UPDATE(0xc5), input buffer: UPDATE example1 SET column3 =
   'CCCB' where column1 = 105 and column2 = 'AAAB'
   spid 19 waiting for UP_PAGE (waittype 0x8007), blocked by:
     EX_PAGE: spid 20, dbid 6, page 0xc48, table example1, indid 0
     pcurcmd UPDATE(0xc5), input buffer: UPDATE example1 SET column3 =
   'CCCA' where column1 = 405 and column2 = 'AAAA'
   VICTIM: spid 20, pstat 0x0000 , cputime 60
				

´Ù¸¥ ÆäÀÌÁö À§¿¡ ÀÖ´Â ÇàÀ» ºÐ»ê½ÃÄÑ ÀÌ ±³Âø »óŸ¦ ÇÇÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ·¸°Ô Å« ä¿ì±â ºñÀ² °¡Áø ÀÌ Å×À̺íÀÇ Å¬·¯½ºÅÍµÈ À妽º¸¦ ´Ù½Ã ¸¸µé¾î¾ß ÇÏ´Â ÇÑ ¹æ¹ýÀÔ´Ï´Ù. ä¿ì±â ºñÀ²À» 50 % ·Î Ŭ·¯½ºÅÍµÈ À妽º¸¦ ¸¸µå´Â ¹®Àº ´ÙÀ½°ú °°½À´Ï´Ù.
   create unique clustered index ex1ind1 on example1 (column1, column2)
   with fill factor = 50, PAD_INDEX
				

ÀÌ ¹®Àº ÆäÀÌÁö Àý¹ÝÀ» ºó PAD_INDEX ¿É¼ÇÀ» ¶§¹®¿¡ Ŭ·¯½ºÅÍµÈ À妽ºÀÇ ¸®ÇÁ ¼öÁØÀÌ ¾Æ´Ñ ¼öÁØÀ» Æ÷ÇÔÇÏ¿© µÎ°í Ŭ·¯½ºÅÍµÈ À妽º¸¦ ¸¸µì´Ï´Ù. Å×À̺íÀÇ ½ÇÁ¦ Å©±â¸¦ µÎ ¹è·Î Â÷ÁöÇÏ°í ¾î¶² ÀÖ¾ú´ø Àý¹ÝÀ» ÆäÀÌÁö ´ç ÇàÀÇ ¼ö´Â ÀÖ½À´Ï´Ù.

Å×ÀÌºí¿¡ ä¿ì±â ºñÀ² À¯Áö, À妽º ÀÛ¼º ½Ã°£ µ¿¾È ÁöÁ¤µÈ ä¿ì±â ºñÀ²À» °¡Áø re-organized Å×À̺íÀÔ´Ï´Ù. ½Ã°£ÀÌ Áö³²¿¡ µû¶ó ÆäÀÌÁö ´ç Çà À妽º¸¦ ¸¸µå´Â µ¿¾È ÁöÁ¤µÈ ä¿ì±â ºñÀ²¿¡ ¿¡¼­ º¯°æµË´Ï´Ù. ÀÌ ¶§ ¿øÇϴ ä¿ì±â ºñÀ² »ç¿ëÇÏ¿© Ŭ·¯½ºÅÍµÈ À妽º¸¦ ´Ù½Ã ¸¸µå´Â °ÍÀÌ ÁÁÀ» ¼ö ÀÖ½À´Ï´Ù.

ÀÌÀü ±³Âø »óÅ »óȲÀ» ÇÇÇϱâ À§ÇØ ´Ù¸¥ ¼Ö·ç¼ÇÀ» °ÍÀÔ´Ï´Ù (¿¹¸¦ µé¾î, dummy1 char(255)). ´õ¹Ì ¿­ÀÌ Æ÷ÇÔµÈ Å×À̺íÀ» ÆÐµåÇÕ´Ï´Ù ÇàÀÇ Å©±â¸¦ ´Ã¸®°í (Àû°Ô´Â ÇÑ ÆäÀÌÁö ´ç Çà) ÆäÀÌÁö ´ç ´õ ÀûÀº ÇàÀ» À̾îÁý´Ï´Ù. ÀÌ À¯ÇüÀÇ ¾ÈÂÊ ½Ã°£´ëº°·Î °ü¸®µÇ¹Ç·Î ¾ÈÂÊ ¿©¹é (´Ù¸¥ ÀÌÀ¯·Î Ŭ·¯½ºÅÍµÈ À妽º¸¦ ´Ù½Ã ¸¸µé·Á¸é ¿øÇÏ´Â ¼öµµ ÀÖÁö¸¸ À¯ÁöÇϱâ À§ÇØ Å¬·¯½ºÅÍµÈ À妽º¸¦ ´Ù½Ã ¸¸µé Çʿ䰡 ¾ø½À´Ï´Ù. ÀÌ ±â¹ýÀÇ ´ÜÁ¡Àº ÀúÀå °ø°£À» ´õ¹Ì Çʵ带 ºÒÇÊ¿äÇÏ°Ô »ç¿ëµÈ °ÍÀÔ´Ï´Ù.

¿¹Á¦ 5: Çà ¾ÈÂÊ ¿©¹é

ÀûÀº ¼öÀÇ ÇàÀ» ÆäÀÌÁö ´ç Çà ¾ÈÂÊ ¿©¹éÀ» À̾îÁý´Ï´Ù (µû¶ó¼­ ÀûÀº ±³Âø »óÅÂ), ÀÖÁö¸¸ ±³Âø »óŸ¦ ¿ÏÀüÈ÷ Á¦°ÅÇÏ´Â °ÍÀÔ´Ï´Ù.

ÀÌ ¿¹Á¦¿¡¼­´Â Å×ÀÌºí¿¡ example1 ÆäÀÌÁö ´ç ÇÑ ÇàÀ» Â÷ÁöÇÒ Ã¤¿öÁý´Ï´Ù. ÀÌ ¿¹Á¦¿¡¼­´Â Å×À̺íÀ» ¸¸µå´Â µ¥ »ç¿ëµÈ ¹®Àº ´ÙÀ½°ú °°½À´Ï´Ù.
   create table example1 (column1 int, column2 char(20), column3 char(50),
   dummy_column4 char (255), dummy_column5 char (255), dummy_column6 char
   (255))
   go
   create unique index ex1ind5 on example1 (column3, column2, column1,
   dummy_column4, dummy_column5, dummy_column6) with fill factor = 85
   go
   Connection1 > BEGIN TRANSACTION
   Connection2 > BEGIN TRANSACTION
   Connection1 > INSERT INTO example1 VALUES (100, 'AAAA', 'CCC', ' ', ' ',
   ' ', ' ')
   Connection2 > INSERT INTO example1 VALUES (400, 'AAAB', 'CCC', ' ', ' ',
   ' ', ' ')
   Connection1 > UPDATE example1 SET column3 = 'CCCA' where column1 = 401
   and column2 = 'AAAA'
				

ÀÌ ½ÃÁ¡¿¡¼­ Connection1 ÇàÀ» ¾÷µ¥ÀÌÆ®ÇÏ´Â µ¿¾È Connection2¿¡ ÀÇÇØ Â÷´ÜµË´Ï´Ù. SQL Server ÆäÀÌÁö üÀÎÀ» Æ÷ÀÎÅ͸¦ À¯Áö °ü¸®ÇØ¾ß ÇÏ´Â ¶§¹®¿¡ ÀÌÀü ÆäÀÌÁö, ´ÙÀ½ ÆäÀÌÁö ¹× ¾÷µ¥ÀÌÆ® ÁßÀÎ ÆäÀÌÁö¸¦ Àá±Þ´Ï´Ù. Connection2 ÀÌÀü ÆäÀÌÁö¿¡¼­ Àá±ÝÀÌ ¶§¹®¿¡ Connection1 Connection2 Æ®·£Àè¼ÇÀÌ Ä¿¹ÔµÉ ¶§±îÁö ±â´Ù·Á¾ß ÇÕ´Ï´Ù.
   Connection2 > UPDATE example1 SET column3 = 'CCCB' where column1 = 101
   and column2 = 'AAAB'
				

Connection1¿¡ ÀÇÇØ ÇöÀç Àá°Ü ÀÌÀü ÆäÀÌÁö Àá±Ý ÇÕ´Ï´Ù ÀÌ ½ÃÁ¡¿¡¼­ Connection2 Connection1¿¡ ÀÇÇØ Â÷´ÜµÇ¾ú½À´Ï´Ù. ±³Âø »óŰ¡ ¹ß»ýÇÕ´Ï´Ù. ±³Âø »óÅ ÃßÀû ´ÙÀ½°ú °°½À´Ï´Ù.
   spid 20 requesting UP_PAGE (waittype 0x8007), blocked by:
     EX_PAGE: spid 19, dbid 6, page 0x12b5, table example1, indid 0
     pcurcmd UPDATE(0xc5), input buffer: UPDATE example1 SET column3 =
   'CCCB' where column1 = 101 and column2 = 'AAAB'
   spid 19 waiting for UP_PAGE (waittype 0x8007), blocked by:
     EX_PAGE: spid 20, dbid 6, page 0x1531, table example1, indid 0
     pcurcmd UPDATE(0xc5), input buffer: UPDATE example1 SET column3 =
   'CCCA' where column1 = 401 and column2 = 'AAAA'
   VICTIM: spid 20, pstat 0x0000 , cputime 300
				

´õ¹Ì ÇàÀ» ¾÷µ¥ÀÌÆ® ¶Ç´Â »èÁ¦µÈ »ðÀԵǴ ÀÖ´Â Çà »çÀÌ¿¡ »ðÀÔÇÏ¿© ÀÌ ±³Âø »óŸ¦ ÇÇÇÒ ¼ö ÀÖ½À´Ï´Ù. Connection1 (»ðÀÔ, ¾÷µ¥ÀÌÆ® ¶Ç´Â »èÁ¦) Çà pk ÀÛµ¿ÇÏ´Â °æ¿ì ¿¹¸¦ µé¾î, 1 Çà pk Connection2 ÀÛµ¿ÇÏ´Â = ¹× = 5, ÀÌ·¯ÇÑ µÎ Çà »çÀÌ¿¡ ÇàÀ» »ðÀÔ (pk Æ÷ÇÔÇÏ´Â ÇàÀ» °°Àº = 3) ±³Âø »óŸ¦ ¹æÁöÇÕ´Ï´Ù. ÀÌ ¸Þ¼­µå´Â Å×À̺íÀÇ Å©±â¸¦ Áõ°¡ÇÏÁö¸¸ Áß¿äÇÑ ÀÀ¿ë ÇÁ·Î±×·¥¿¡ ÇØ´ç Å¥¿¡ Å×ÀÌºí °¡Àå ÁÁÀº ¹æ¹ýÀÏ ¼ö ÀÖ½À´Ï´Ù.

¿¹Á¦ 6: Ŭ·¯½ºÅ͵ÇÁö ¾ÊÀº À妽º

ÀϺÎÀÇ °æ¿ì, Ŭ·¯½ºÅ͵ÇÁö ¾ÊÀº À妽º°¡ º¸Á¶ ±³Âø »óŰ¡ ¹ß»ýÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ ¿¹Á¦¿¡¼­´Â º¸Á¶ À妽º À¯Áö °ü¸® ±³Âø »óŰ¡ µµÀԵǾú½À´Ï´Ù.

ÀÌ ¿¹Á¦¿¡¼­´Â º¸Á¶ À妽º¸¦ ¸¸µå´Â µ¥ »ç¿ëµÈ ¹®Àº ´ÙÀ½°ú °°½À´Ï´Ù.
   create index ex1ind2 on example1 (column3) with fill factor = 90,
   PAD_INDEX
   Connection1 > BEGIN TRANSACTION
   Connection2 > BEGIN TRANSACTION
   Connection1 > INSERT INTO example1 VALUES (100, 'AAAA', 'CCBA', ' ', '
   ', ' ', ' ')
   Connection2 > INSERT INTO example1 VALUES (300, 'AAAB', 'CCCZ', ' ', '
   ', ' ', ' ')
   Connection2 > UPDATE example1 SET column3 = 'CCBA' where column1 = 105
				

ÀÌ ½ÃÁ¡¿¡¼­ Connection1 º¸Á¶ Ŭ·¯½ºÅ͵ÇÁö ¾ÊÀº À妽º ÆäÀÌÁö¿¡¼­ Connection2 ¾÷µ¥ÀÌÆ®ÇØ¾ß ÇÏ´Â Àá±ÝÀÌ ¼ö ¼ö Àֱ⠶§¹®¿¡ Connection2 Connection1¿¡ ÀÇÇØ Â÷´ÜµÉ ¼ö ÀÖ½À´Ï´Ù.
   Connection1 > UPDATE example1 SET column3 = 'CCCZ' where column1 = 305
				

ÀÌ ½ÃÁ¡¿¡¼­ Connection1 ±³Âø »óŰ¡ ¹ß»ýÇÏ´Â Connection2¿¡ ÀÇÇØ Â÷´ÜµÉ ¼ö ÀÖ½À´Ï´Ù. Connection1 Connection2 ÀÌ¹Ì »ðÀÔµÈ ¹× ÇØ´ç ÆäÀÌÁö¿¡ Àá±ÝÀÌ Å¬·¯½ºÅ͵ÇÁö ¾ÊÀº º¸Á¶ À妽º ¾÷µ¥ÀÌÆ® Àá±ÝÀ» ±â´Ù¸®´Â °æ¿ì ÀÌ ÀÌ·± »óȲÀÌ ¹ß»ýÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ ±³Âø »óÅ ¿¹¸¦ µé¾î ±³Âø »óÅ ÃßÀû ´ÙÀ½°ú °°½À´Ï´Ù.
   97/04/20 19:05:38.75 spid11   *** DEADLOCK DETECTED with spid 12 ***
   spid 11 requesting EX_PAGE (waittype 0x8005), blocked by:
     EX_PAGE: spid 12, dbid 6, page 0x112f, table example1, indid 0x2
     pcurcmd UPDATE(0xc5), input buffer: UPDATE example1 SET column3 =
   'CCCZ' where column1 = 305
   spid 12 waiting for EX_PAGE (waittype 0x8005), blocked by:
     EX_PAGE: spid 11, dbid 6, page 0x1108, table example1, indid 0x2
     pcurcmd UPDATE(0xc5), input buffer: UPDATE example1 SET column3 =
   'CCBA' where column1 = 105
   VICTIM: spid 11, pstat 0x0000 , cputime 50
				

º¸Á¶ À妽º¸¦ »èÁ¦Çϸé ÀÌ ±³Âø »óŸ¦ ÇÇÇÒ ¼ö ÀÖ½À´Ï´Ù. Ŭ·¯½ºÅ͵ÇÁö ¾ÊÀº º¸Á¶ À妽º¸¦ Á¦°ÅÇÏ¿© °æ¿ì¿¡¸¸ ¶Ç´Â ÀÀ¿ë ÇÁ·Î±×·¥À» ¼öÁ¤ÇÏ¿© ÀÌ·¯ÇÑ »óȲÀ» ÇÇÇÒ ¼ö ÀÖ½À´Ï´Ù ÇÑ ÆäÀÌÁö¿¡ ÇÑ ÇàÀ» Æ÷ÇÔÇϹǷΠÀ妽º ä¿ï ¼ö ¾ø½À´Ï´Ù.

±³Âø »óÅ ±³Âø »óÅ ÃßÀû ¼öµµ ÀÖ´Â ±³Âø »óÅ ¹× Ãæµ¹ÇÏ´Â Àá±ÝÀÌ °ü·ÃµÈ spids ³ª¿­µÇ¾î ÀÖÀ¸¸ç ÀÌ °æ¿ì µÎ °³ ÀÌ»óÀÇ ¿¬°áÀ» »ç¿ëÇÒ °æ¿ì ¹ß»ýÇÒ ¼ö ÀÖ½À´Ï´Ù. À妽º¸¦ Åë°úÇÏ´Â µ¿¾È ¾òÀº RLOCK ¹× XRLOCK Àá±ÝÀ» ±³Âø »óŰ¡ ¹ß»ýÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀͽºÅÙÆ® Àá±Ý PR_EXT, NX_EXT, UPD_EXT ¹× EX_EXT ÀÎÇØ ±³Âø »óŰ¡ ¹ß»ýÇÒ ¼öµµ ÀÖ½À´Ï´Ù.

±³Âø »óŸ¦ ºÐ¼®ÇÏ´Â ¹æ¹ý¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº ´ÙÀ½ ÃßÀû Ç÷¡±×¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.

t1200
¹ß»ýÇÒ ¶§ ±³Âø »óÅ ¶Ç´Â °ü·ÃµÈ ¿©ºÎ¸¦ ¸ðµç Àá±Ý ¿äû/¸±¸®½º Á¤º¸¸¦ ÀμâÇÕ´Ï´Ù. ÀÌ ¼º´É Ãø¸é¿¡¼­ ºñ¿ëÀÌ ¸¹ÀÌ ÀÖÁö¸¸ ºÐ¼®¿¡ À¯¿ëÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.

t1206
¸ðµç ±³Âø »óÅ Âü¿© spids º¸À¯ÇÑ Àá±Ý ÀμâÇÕ´Ï´Ù.

t1208
È£½ºÆ® À̸§ ¹× Ŭ¶óÀÌ¾ðÆ®°¡ Á¦°øÇÏ´Â ÇÁ·Î±×·¥ À̸§À» ÀμâÇÕ´Ï´Ù. ÀÌ Å¬¶óÀÌ¾ðÆ®°¡ °¢ ¿¬°á¿¡ ´ëÇØ °íÀ¯ÇÑ °ªÀ» ÁöÁ¤ÇÏ´Â °¡Á¤ÇÒ °æ¿ì Ŭ¶óÀÌ¾ðÆ®°¡ ±³Âø »óÅ¿¡ °ü·ÃµÈ ½Äº°ÇÒ ¼ö ÀÖ½À´Ï´Ù.

¼Ó¼º

±â¼ú ÀÚ·á: 169960 - ¸¶Áö¸· °ËÅä: 2003³â 10¿ù 16ÀÏ ¸ñ¿äÀÏ - ¼öÁ¤: 3.0
º» ¹®¼­ÀÇ Á¤º¸´Â ´ÙÀ½ÀÇ Á¦Ç°¿¡ Àû¿ëµË´Ï´Ù.
  • Microsoft SQL Server 6.5 Standard Edition
Ű¿öµå:?
kbmt kbhowto kbusage KB169960 KbMtko
±â°è ¹ø¿ªµÈ ¹®¼­
Áß¿ä: º» ¹®¼­´Â Àü¹® ¹ø¿ª°¡°¡ ¹ø¿ªÇÑ °ÍÀÌ ¾Æ´Ï¶ó Microsoft ±â°è ¹ø¿ª ¼ÒÇÁÆ®¿þ¾î·Î ¹ø¿ªÇÑ °ÍÀÔ´Ï´Ù. Microsoft´Â ¹ø¿ª°¡°¡ ¹ø¿ªÇÑ ¹®¼­ ¹× ±â°è ¹ø¿ªµÈ ¹®¼­¸¦ ¸ðµÎ Á¦°øÇϹǷΠMicrosoft ±â¼ú ÀÚ·á¿¡ ÀÖ´Â ¸ðµç ¹®¼­¸¦ Çѱ۷ΠÁ¢ÇÒ ¼ö ÀÖ½À´Ï´Ù. ±×·¯³ª ±â°è ¹ø¿ª ¹®¼­°¡ Ç×»ó ¿Ïº®ÇÑ °ÍÀº ¾Æ´Õ´Ï´Ù. µû¶ó¼­ ±â°è ¹ø¿ª ¹®¼­¿¡´Â ¸¶Ä¡ ¿Ü±¹ÀÎÀÌ Çѱ¹¾î·Î ¸»ÇÒ ¶§ ½Ç¼ö¸¦ ÇÏ´Â °Íó·³ ¾îÈÖ, ±¸¹® ¶Ç´Â ¹®¹ý¿¡ ¿À·ù°¡ ÀÖÀ» ¼ö ÀÖ½À´Ï´Ù. Microsoft´Â ³»¿ë»óÀÇ ¿À¿ª ¶Ç´Â Microsoft °í°´ÀÌ ÀÌ·¯ÇÑ ¿À¿ªÀ» »ç¿ëÇÔÀ¸·Î½á ¹ß»ýÇÏ´Â ºÎ Á¤È®¼º, ¿À·ù ¶Ç´Â ¼ÕÇØ¿¡ ´ëÇØ Ã¥ÀÓÀ» ÁöÁö ¾Ê½À´Ï´Ù. Microsoft´Â ÀÌ·¯ÇÑ ¹®Á¦¸¦ ÇØ°áÇϱâ À§ÇØ ±â°è ¹ø¿ª ¼ÒÇÁÆ®¿þ¾î¸¦ ÀÚÁÖ ¾÷µ¥ÀÌÆ®Çϰí ÀÖ½À´Ï´Ù.
´õ ÀÌ»ó Áö¿øµÇÁö ¾Ê´Â Á¦Ç°ÀÇ KB ³»¿ë¿¡ ´ëÇÑ °íÁö »çÇ×
ÀÌ ¹®¼­¿¡¼­´Â Microsoft¿¡¼­ ´õ ÀÌ»ó Áö¿øÇÏÁö ¾Ê´Â Á¦Ç°¿¡ ´ëÇØ ¼³¸íÇÕ´Ï´Ù. µû¶ó¼­ ÀÌ ¹®¼­´Â "ÀÖ´Â ±×´ë·Î" Á¦°øµÇ¸ç ¾÷µ¥ÀÌÆ®µÇÁö ¾Ê½À´Ï´Ù.

Çǵå¹é º¸³»±â