ÃֽŠ°Ô½Ã±Û(OS/WAS)
2023.12.18 / 14:15

MySql/MariaDB¿¡¼­ ¹ß»ýÇÏ´Â Connection ²÷±è ¹®Á¦ ÇØ°áÇϱâ

XMaLL°ü¸®ÀÚ
Ãßõ ¼ö 24

MySql/MariaDB¿¡¼­ ¹ß»ýÇÏ´Â Connection ²÷±è ¹®Á¦ ÇØ°áÇϱâ

 Updated: 

MySql/MariaDB¿¡¼­ ¹ß»ýÇÏ´Â Connection ²÷±è ¹®Á¦ ÇØ°áÇϱâPermalink

CloudÀÇ Tomcat¿¡ ¼³Á¤µÇ¾î ÀÖ´ø MySQL DB Connection PoolÀ» »ç¿ëÇÏ·Á´ø ÇÁ·Î±×·¥¿¡¼­ ¡°Communication Link Failue¡±¿¡·¯°¡ ¹ß»ýÇϸ鼭 ¾à 930ÃÊ ´ë±â Çö»óÀÌ ¹ß»ýÇÑ´Ù.
ÀÌ·¯ÇÑ Çö»óÀÌ ¸ðµç PODÀÇ Tomcat¿¡¼­ ¸ðµÎ µ¹¾Æ°¡¸é¼­ ¹ß»ýÇÑ´Ù.
¸ðµç DB PoolÀÌ ¿¡·¯°¡ ¹ß»ýÇÏ´Â °ÍÀº ¾Æ´Ï¸ç ÀϺΠDB Connection ¿¬°á ½Ã Çö»óÀÌ ¹ß»ýÇÏ°í ÀÖ´Ù.
¿Ö ÀÏÁ¤ ½Ã°£ÀÌ Áö³ª¸é DB ConnectionÀÇ ¿¬°áÀÌ ²÷±â´Â °ÍÀÎÁö ±×¸®°í DB¿Í WAS ¿Ü¿¡ ´Ù¸¥ ¹®Á¦°¡ ÀÖ´Â °ÍÀÎÁö ±× ¿øÀÎÀ» ¾Ë¾Æº¸±â·Î ÇÑ´Ù.

MySQL DB Connection Pool ¿¬°á ½ÇÆÐ ¿¡·¯Permalink


APM Jennifer Active Thread¿¡ 7°³ÀÇ Æ®·£Àè¼ÇÀÌ ÀÀ´äÁö¿¬À¸·Î ÀÎÇÑ »¡°£»ö »óÅ°¡ È®ÀÎµÇ¾î »ó¼¼º¸±â·Î µé¾î°¡º¸´Ï ÀÀ´ä½Ã°£ÀÌ 600ÃÊ ÀÌ»óÀε¥ Á¾·áµÇÁö ¾Ê°í Validation Query¸¦ ¼öÇàÇÏ°í °á°ú ´ë±â ÁßÀÎ °ÍÀ¸·Î È®ÀÎÀÌ µÇ¾ú´Ù.
ÀÌÈÄ ¾à 930ÃÊ Á¤µµ°¡ Áö³ªÀÚ ÇØ´ç Æ®·£Àè¼ÇµéÀÌ Á¾·áµÇ¾î X-View¿¡ ¿¡·¯·Î Ç¥½ÃµÈ´Ù.
´Ù¸¥ PODÀÇ WAS¿¡¼­µµ µ¿ÀÏÇÑ Çö»óµéÀÌ °è¼Ó È®ÀεȴÙ.

DB Connection Pool ¿¬°á ´ë±â ¹× ½ÇÆÐ ¿¡·¯




SQLException-¿¬°á ½ÇÆÐ

¿¡·¯ ³»¿ëÀ» È®ÀÎÇÏ´Ï ´ÙÀ½°ú °°Àº ¸Þ½ÃÁö°¡ º¸ÀδÙ.


com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was 39,196,147 milliseconds ago.
The last packet sent successfully to the server was 39,196,154 milliseconds ago. is longer than the server configured value of 'wait_timeout'. 
You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem.


±âÁ¸¿¡ ÀÚÁÖ º¸´ø DB Connection ¿¬°á ½ÇÆÐ ¿¡·¯´Â WAS¿Í DB »çÀÌÀÇ ¹æÈ­º® µî¿¡¼­ Idle »óÅÂÀÎ DB ConnectionÀ» ²÷¾î ¹ö¸®°í WASÀÇ DB Connection Pool¿¡¼­´Â ²÷±è »óŸ¦ ÀÎÁöÇÏÁö ¸øÇØ »õ·Î¿î DB Connection ¿¬°á ¿äû ½Ã ÀÌ¹Ì ²÷±ä PoolÀ» Á¦°øÇÏ¿© Æ®·£Àè¼Ç ó¸® ½Ã ¿¡·¯°¡ ¹ß»ýÇÏ´Â °æ¿ì°¡ °¡Àå ÈçÇÑ À¯ÇüÀÇ ¿¡·¯¿´´Ù.
ÇÏÁö¸¸ À§ ¿¡·¯ ¸Þ½ÃÁö¸¦ º¸¸é À̹ø¿¡´Â ¿¬°áÀ» ²÷¾î ¹ö¸®´Â ÁÖü°¡ ´Ù¸¥ ³×Æ®¿öÅ© Àåºñ µîÀÌ ¾Æ´Ï¶ó MySql DB¼­¹ö·Î È®ÀεȴÙ.
ÀÏÁ¤ ½Ã°£ µ¿¾È IdleÀÎ DB Connection¿¡ ´ëÇØ MySql¼­¹ö¿¡¼­ °­Á¦·Î ¿¬°áÀ» ²÷¾î ¹ö¸®´Â °ÍÀÌ´Ù.
¿¬°áÀ» ²÷¾î ¹ö¸®´Â ±âÁØÀÌ µÇ´Â ¡°wait_timeout¡±ÀÇ ¼³Á¤Àº ´ÙÀ½°ú °°´Ù.

¼³Á¤¼³¸í
wait_timeoutIdle »óÅÂÀÎ ConnectionÀ» ²÷À» ¶§±îÁö ¼­¹ö°¡ ´ë±âÇÏ´Â ½Ã°£(default 28800ÃÊ = 8½Ã°£)



wait_timeout ¼³Á¤°ª Á¶È¸ ¹× º¯°æÇϱâ

wait_timeout ¼³Á¤°ªÀÇ Á¶È¸¿Í º¯°æÀº ¾Æ·¡¿Í °°ÀÌ °¡´ÉÇÏÁö¸¸ º¯°æÀº ±ÇÀåÇÏÁö ¾Ê´Â´Ù.
DB Connection PoolÀÇ ¿¬°áÀÌ 8½Ã°£ ÀÌ»ó IdleÀÎ »óŶó¸é ¿¬°áÀ» À¯ÁöÇÏ´Â °Íº¸´Ù´Â ÇØ´ç ¿¬°áÀ» Á¤¸®ÇÏ°í ÇÊ¿ä ½Ã¿¡ ´Ù½Ã ¿¬°áÇÏ´Â °ÍÀÌ DB¿¡ ºÒÇÊ¿äÇÑ ÀÚ¿ø ³¶ºñ¸¦ ÁÙÀÏ ¼ö Àֱ⠶§¹®ÀÌ´Ù.
À̹ø ¹®Á¦ ÇØ°á ÈÄ ´Ù¸¥ »çÀÌÆ®¸¦ Áö¿øÇÏ´Â °úÁ¤¿¡¼­ ½ÇÁ¦·Î wait_timeout°ªÀ» 60ÃÊ·Î ÀÛ°Ô º¯°æÇÏ¿© DB Connection PoolÀÌ °è¼Ó À¯½ÇµÇ´Â Çö»óÀÌ ¹ß»ýÇÑ »ç·Ê°¡ ÀÖ´Ù.
µû¶ó¼­ ÇØ´ç ¼³Á¤Àº default ¼³Á¤À» À¯ÁöÇÏ´Â °ÍÀ» ±ÇÀåÇÑ´Ù.


- wait_timeout ¼³Á¤°ª Á¶È¸

DB¼­¹ö Á¢¼Ó ÈÄ ¾Æ·¡ ¸í·É¾î¸¦ ¼öÇà

show variables like '%timeout

- wait_timeout ¼³Á¤°ª º¯°æ
  ¼³Á¤°ª º¯°æ ÈÄ¿¡´Â DB¸¦ Àç½ÃÀÛ ÇÊ¿äÇÔ

1. Command Line ¸í·É¾î·Î Parameter ¼³Á¤°ª º¯°æ
  set global wait_timeout = ´ë±â½Ã°£(ÃÊ)
  set session wait_timeout = ´ë±â½Ã°£(ÃÊ)

2. my.cnf ÆÄÀÏ¿¡¼­ ¼³Á¤°ª º¯°æ(MariaDBÀÇ °æ¿ì´Â 50-server.cnf ÆÄÀÏ)
  wait_timeout = ´ë±â½Ã°£(ÃÊ)



autoReconnect ¼³Á¤

¿¡·¯ ¸Þ½ÃÁö¿¡´Â ¿¬°á ²÷±è Çö»óÀ» ÇÇÇϱâ À§ÇØ DB Connection URL¿¡ ´ÙÀ½ ¡°autoReconnect=true¡±¼³Á¤À» Ãß°¡ÇÒ °ÍÀ» ±ÇÀåÇÏ°í ÀÖ´Ù.
±×·¸´Ù¸é ÇØ´ç ¼³Á¤À» Ãß°¡ÇÏ¸é ¿¬°á ²÷±è Çö»óÀ» ÇØ°áÇÒ ¼ö ÀÖ´Â °ÍÀϱî?
¿ì¼± ÇØ´ç ¼³Á¤¿¡ ´ëÇØ »ó¼¼ÇÑ ¼³¸íÀ» È®ÀÎÇØ º¸ÀÚ.
¾Æ·¡ ¼³¸íÀ» È®ÀÎÇØ º¸¸é ÇØ´ç ¼³Á¤À» »ç¿ëÇÏ´Â °ÍÀ» ÃßõÇÏÁö ¾Ê°í ÀÖ´Ù.
±× ÀÌÀ¯´Â ´ÙÀ½°ú °°´Ù.
autoReconnect ¼³Á¤Àº DB Connection¿¡ ¹®Á¦°¡ ÀÖÀ¸¸é ´Ü¼øÈ÷ ÀçÁ¢¼ÓÇÒ ¼ö ÀÖµµ·Ï ÇØÁÖÁö¸¸ ¹®Á¦´Â ¼öÇà ÁßÀÌ´ø Æ®·£Àè¼Ç¿¡ ´ëÇؼ­´Â ÀÏ°ü¼º º¸ÀåÀ» ÇØÁÖÁö ¾Ê´Â´Ù.
µû¶ó¼­ µ¥ÀÌÅÍ ÀÏ°ü¼ºÀ» º¸ÀåÇÒ ¼ö ¾øÀ¸¹Ç·Î ¼öÇà ÁßÀÌ´ø ¾ÖÇø®ÄÉÀ̼ǿ¡ ´ëÇÑ Æ®·£Àè¼Ç¿¡ ´ëÇÑ Á÷Á¢ ¿¹¿Ü 󸮸¦ ÇÒ ¼ö ¾ø´Ù¸é »ç¿ëÇÏÁö ¾Ê±â¸¦ ±ÇÀåÇÑ´Ù°í ¸í½ÃÇÏ°í ÀÖ´Ù.


¼³Á¤¼³¸í
autoReconnectShould the driver try to re-establish stale and/or dead connections? If enabled the driver will throw an exception for a queries issued on a stale or dead connection, which belong to the current transaction, but will attempt reconnect before the next query issued on the connection in a new transaction. The use of this feature is not recommended, because it has side effects related to session state and data consistency when applications don¡¯t handle SQLExceptions properly, and is only designed to be used when you are unable to configure your application to handle SQLExceptions resulting from dead and stale connections properly. Alternatively, investigate setting the MySQL server variable ¡°wait_timeout¡± to some high value rather than the default of 8 hours.



DBCP ¼³Á¤À¸·Î ¹®Á¦ ÇØ°áÇϱâPermalink


À§ÀÇ MySql ¼­¹ö ¼³Á¤°ú Connection ¼³Á¤À¸·Î´Â ±Ùº»ÀûÀÎ ¹®Á¦ÇØ°áÀÌ ¾î·Æ°Å³ª Side Effect°¡ ¹ß»ýÇÒ °¡´É¼ºÀÌ ÀÖ¾ú´Ù.
µû¶ó¼­ ÇöÀç »ç¿ë ÁßÀÎ DBCP Connection PoolÀÇ ¼³Á¤À» ÃÖÀûÈ­ ÇÏ¿© ÇØ´ç ¹®Á¦¸¦ ÇØ°áÇØ º¸±â·Î ÇÑ´Ù.
Idle »óÅÂÀÎ DB Connection PoolÀÌ MySql¼­¹ö¿¡¼­ °­Á¦·Î Á¤¸®µÇÁö ¾Êµµ·Ï Çϱâ À§Çؼ­´Â DBCPÀÇ testWhileIdle¿Í validationQuery ¼³Á¤À» È°¿ëÇϱâ·Î ÇÑ´Ù.

testWhileIdle¿Í validationQuery ¼³Á¤ È°¿ëÇϱâPermalink


testWhileIdle¿Í validationQueryÀÇ ±ÇÀåµÇ´Â ¼³Á¤Àº ¾Æ·¡¿Í °°´Ù.

¼³Á¤¼³¸í
testWhileIdletrue (default false)
validationQueryselect 1
timeBetweenEvictionRunsMillis3600000(1½Ã°£). validationQuery¸¦ ¼öÇàÇÒ ÁÖ±â. Evictor ½º·¹µå°¡ µ¿ÀÛÇÏ´Â °£°Ý. (default -1. Evictor ½º·¹µåÀÇ ½ÇÇàÀÌ ºñÈ°¼ºÈ­µÊ)


Âü°í) initialSize¿Í maxActive, maxIdle, minIdle Ç׸ñÀº µ¿ÀÏÇÑ °ªÀ¸·Î ¼³Á¤ÇÏ´Â °ÍÀ» ±ÇÀåÇÑ´Ù.



À§ ¼³Á¤À» Àû¿ëÇϸé 1½Ã°£ ¸¶´Ù validationQuery(selcet 1)À» ¼öÇàÇϵµ·Ï ÇÔÀ¸·Î½á DB Connection PoolÀÇ Idle »óÅ ÀüȯÀ» »çÀü¿¡ ¹æÁöÇØ MySql¼­¹ö¿¡¼­ ConnectionÀ» °­Á¦·Î ²÷Áö ¾Êµµ·Ï ÇÑ´Ù.
´Ü, DB Connection PoolÀÇ °¹¼ö°¡ ¸¹Àº °æ¿ì ¸ðµç Connection¿¡ ´ëÇØ Idle »óÅ °ËÁõ ¹× ValidationQuery¸¦ ¼öÇàÇÒ ¼ö ÀÖµµ·Ï timeBetweenEvictionRunsMillis¸¦ Á» ´õ ª°Ô ¼³Á¤ÇÏ´Â °ÍÀ» ±ÇÀåÇÑ´Ù.
¶ÇÇÑ ¼³Á¤µÈ PoolÀÇ °¹¼ö°¡ »ç¿ë·® ´ëºñ Áö³ªÄ¡°Ô Å©´Ù¸é °¹¼ö¸¦ ÁÙÀÌ´Â °Íµµ °ËÅäÇØ º¸¾Æ¾ß ÇÑ´Ù.


DB Connection Pool ¹®Á¦¸¦ ÇØ°áÇÏ°í¡¦Permalink


DB Connection PoolÀ» »ç¿ëÇÏ´Â ÀÌÀ¯´Â DB Á¢¼Ó ½Ã ¹ß»ýÇÏ´Â Áö¿¬À» ÃÖ¼ÒÈ­Çؼ­ ¼º´ÉÀ» °³¼±Çϱâ À§ÇÑ ¸ñÀûÀ» °¡Áö°í ÀÖ´Ù.
±× ¸¸Å­ WASÀÇ ¼º´É¿¡¼­ Áß¿äÇÑ ¿ä¼ÒÀ̱⵵ ÇÏÁö¸¸ ÃÖÀûÈ­µÇÁö ¾ÊÀº ¼³Á¤À» »ç¿ëÇÒ °æ¿ì¿¡´Â ¿ÀÈ÷·Á ¼º´ÉÀ» ÀúÇϽÃÅ°°Å³ª Àå¾Ö±îÁö À¯¹ßÇÏ´Â °æ¿ì¸¦ Á¾Á¾ º¼ ¼ö ÀÖ´Ù.
ÀÌó·³ ¹ß»ýÇÏ´Â ¹®Á¦´Â ´ëºÎºÐ ¼³Á¤¸¸ Àß Á¶Á¤ÇÏ¸é ½±°Ô ÇØ°áµÉ ¼ö ÀÖ´Â °æ¿ì°¡ ´ëºÎºÐÀÌ´Ù.
½Ã½ºÅÛ¿¡ ÃÖÀûÈ­µÈ ¼³Á¤À» Á¶À²ÇÏ´Â ÀÛ¾÷Àº ¸¹Àº ½ÃÇàÂø¿À¿Í °æÇèÀÌ ¿ä±¸µÇ´Â ÀÏÀÌ´Ù.
Àü¹®ÀûÀÎ Æ©´× °æÇè ¾øÀÌ ¹«Åδë°í ¼³Á¤À» º¯°æÇÏ´Ùº¸¸é ¼­·Î »ó¼âµÇ´Â ¼³Á¤À» Çϱ⵵ ÇÏ°í ´©°¡ ¿Ö, ¹«¾ù ¶§¹®¿¡ ¼³Á¤À» º¯°æÇß´ÂÁöµµ ¸ð¸¦ ¶§°¡ ÀÖ´Ù.
¿Ö ¹®Á¦°¡ ¹ß»ýÇÏ°í ÀÖ´ÂÁö¸¦ Á¡Á¡ ´õ ¾Ë±â ¾î·Á¿ï ¼öµµ ÀÖ´Ù.
µû¶ó¼­ ¼º´É ÃÖÀûÈ­°¡ ÇÊ¿äÇÏ´Ù¸é ¼º´É Àü¹®°¡ ±×·ì SWAT ÆÄÆ®¿¡ ¿äûÇϱ⸦ ÃßõÇÑ´Ù.