|
|
|
¹ßÃé: ¸ðµ¨2·Î ´Ù½Ã ¹è¿ì´Â JSP, 7Àå, p252 |
ÀÏÁ¤ÇÑ ÇüÅÂÀÇ ¹Ýº¹ÀûÀÎ µ¥ÀÌÅ͸¦ ÀÔ·ÂÇÒ ¶§, DBMS¸¶´Ù ±¸Á¶ÀûÀÎ Â÷À̰¡ ÀÖ¾î¼ °á°ú°¡ Á¦°¢°¢ÀÌÁö¸¸ ¿À¶óŬÀÇ °æ¿ì PreparedStatement¿Í batch°ü·Ã ¸Þ¼ÒµåÀÇ Á¶ÇÕÀº ¾ÆÁÖ È¯»óÀûÀÎ °á°ú¸¦ °¡Á®¿Â´Ù. BMT(BenchMark Test)¸¦ ÀÌ¿ëÇØ¼ ¾Ë¾Æº¸¾Ò´Ù.
jdk1.3 ¹öÀüºÎÅÍ Ãß°¡µÈ °ÍÀÌ Àִµ¥, Statement¸¦ ÀϰýÀûÀ¸·Î ó¸®ÇÒ ¼ö ÀÖµµ·Ï ÇÑ °ÍÀÌ´Ù. addBatch() ¸Þ¼Òµå¿Í executeBatch() ¶ó´Â ¸Þ¼Òµå¸¦ »ç¿ëÇØ¼ À§ ¼Ò½º¸¦ ´ÙÀ½°ú °°ÀÌ ¹Ù²ãº¸¾Ò´Ù.
|
|
|
¡¦ ÀÌÀü »ý·« ¡¦
%>start:<%=System.currentTimeMillis()-sTime%><hr><%
// ¹Ýº¹ 15000ȸ
for(int i=0; i<15000; i++) {
// Äõ¸®¸¦ ¸¸µé¾î¼ ½ÇÇàÇÑ´Ù.
queryBuf.setLength(0);
queryBuf.append("INSERT INTO TEST_TABLE (SEQ, SUBJECT) VALUES ( " )
.append(i).append(", 'ÀÌ ÇàÀº ")
.append(i).append(" ¹øÂ° ÀԷµǾú½À´Ï´Ù.' ) ");
// ¹èÄ¡¿¡ Ãß°¡ÇÑ´Ù.
stmt.addBatch(queryBuf.toString());
} // end for
%>before batch job :<%=System.currentTimeMillis()-sTime%><%
// ÀúÀåµÈ Äõ¸®¸¦ ÇѲ¨¹ø¿¡ ½ÇÇà½ÃŲ´Ù.
stmt.executeBatch();
%><hr>end:<%=System.currentTimeMillis()-sTime%><%
// Statement¸¦ ´Ý´Â´Ù.
stmt.close();
¡¦ ÀÌÇÏ »ý·« ¡¦ |
»ý·«µÈ ºÎºÐÀº jdbc07.jsp ¼Ò½º¿Í µ¿ÀÏÇÏ´Ù. º¯°æµÈ ºÎºÐÀº ¹Ýº¹¹® ¾È¿¡¼ »ý¼ºµÈ Äõ¸®¸¦ executeUpdate(String) ¸Þ¼Òµå¸¦ ¼öÇàÇÏ´Â ´ë½Å¿¡ stmt ÀνºÅϽº¿¡ Ãß°¡ÇØÁÖ´Â addBatch(½ºÆ®¸µ) ¸Þ¼Òµå¸¦ ½ÇÇàÇÏ°í ¹Ýº¹ÀÌ ¿Ï·áµÇ¸é executeBatch() ¸Þ¼Òµå¸¦ ¼öÇàÇØ¼ ÇѲ¨¹ø¿¡ ¸ô¾ÆÁÖ´Â ÀÛ¾÷À» ÇÑ´Ù.
PreparedStatement¿¡¼ ¹èÄ¡ÀÛ¾÷À» ÇÏ·Á´Â °æ¿ì ´ÙÀ½°ú °°ÀÌ ¼Ò½º°¡ ¹Ù²î°Ô µÈ´Ù.
|
|
|
¡¦ ÀÌÀü »ý·« ¡¦
// ¹Ýº¹ 15000ȸ
for(int i=0; i<15000; i++) {
// Äõ¸®¸¦ ½ÇÇàÇÑ´Ù.
pstmt.setInt(1, i);
pstmt.setInt(2, i);
// ¹èÄ¡¿¡ Ãß°¡ÇÑ´Ù.
pstmt.addBatch();
} // end for
%>before batch job :<%=System.currentTimeMillis()-sTime%><%
// ÀúÀåµÈ Äõ¸®¸¦ ÇѲ¨¹ø¿¡ ½ÇÇà½ÃŲ´Ù.
pstmt.executeBatch();
%><hr>end:<%=System.currentTimeMillis()-sTime%><%
¡¦ ÀÌÇÏ »ý·« ¡¦ |
»ý·«µÈ ºÎºÐÀº jdbc08.jsp ¼Ò½º¿Í µ¿ÀÏÇÏ´Ù. ¸¶Âù°¡Áö·Î ¹Ýº¹¹® ¾È¿¡¼´Â addBatch() ¸Þ¼Òµå¸¦ ÅëÇØ¼ pstmt ÀνºÅϽº¿¡ Ãß°¡ÇÏ´Â ÀÛ¾÷À» ¼öÇàÇϰí, ¹Ýº¹ÀÌ ³¡³ª¸é Çѹø¿¡ ¹Ð¾îÁÖ´Â executeBatch() ¸Þ¼Òµå¸¦ ¼öÇàÇÑ´Ù. ½ÇÇà°á°ú´Â ¾ÆÁÖ ³î¶ó¿ü´Ù.
|

|
|
[±×¸² 7-1] StatementÀÇ executeBatch() »ç¿ë |
|

|
|
[±×¸² 7-2] PreparedStatement ÀÇ executeBatch() »ç¿ë |
executeBatch() ó¸® ½Ã ½ÇÇà½Ã°£Àº ±Ø°ú ±ØÀ̾ú´Ù. ÀÏ´Ü StatementÀÇ ¹èÄ¡°á°ú¸¦ º¸ÀÚ. jsp¿¡¼ ¹Ýº¹¹®À» ¼öÇàÇÏ´Â ½Ã°£Àº 62¹Ð¸®ÃÊ ¹Û¿¡ ¾È°É·È°í, executeBatch()¸¦ ÅëÇØ¼ DB¿¡¼ µ¹¾Æ°¡´Â ½Ã°£À» ±â´Ù¸° °ÍÀÌ 33Ãʰ¡ ¼Ò¿äµÇ¾ú´Ù. µûÁö°í º¸¸é ³ë°¡´Ù´Â ÅèĹÀÌ ¾Æ´Ï¶ó ¿À¶óŬÀÇ ¸òÀ̶ó´Â ¾ê±â´Ù. ÀüüÀûÀ¸·Î µûÁö¸é ¹èÄ¡¸¦ ÇÏ´Â °ÍÀ̳ª ¾ÈÇÏ´Â °ÍÀ̳ª Å©°Ô Â÷À̰¡ ³ªÁö ¾Ê¾Ò´Ù.
ÇÏÁö¸¸, PreparedStatement¿¡¼ ¹èÄ¡ÀÛ¾÷Àº ¾ê±â°¡ ´Ù¸£´Ù. Å×½ºÆ®ÇÏ¸é¼ ´«ÀÌ Àǽɽº·¯¿ö¼ ¸î ¹øÀÌ°í ´Ù½Ã ÇØºÃ´Ù. Å×À̺íÀ» »èÁ¦ÇÏ´Â ±¸¹®¿¡ ÁÖ¼®À» ´Þ¾Æ ³²°ÜµÎ¾î¼ db¿¡ µé¾î°¡ È®ÀÎÀ» ÇØº¸´Ï Á¤»óÀûÀ¸·Î µ¥ÀÌÅͰ¡ µé¾î°¡ ÀÖ¾ú´Ù. 33ÃÊ °É¸®´ø ÀÏÀ» 0.59Ãʸ¸¿¡ ÇØ³½´Ù´Â °ÍÀº ȹ±âÀûÀÎ ÀÏÀÌ ¾Æ´Ò ¼ö ¾ø´Ù. 10¹è¼öÀÎ 150,000°ÇÀ» µ¹·Áµµ 10ÃÊ ÀüÈÄ·Î ¿Ï·áµÇ¾ú´Ù.
|
ÁÖÀÇ: ÀÌ Ã¥ÀÇ Å×½ºÆ®´Â ¿À¶óŬ 8.1.7¿¡ ±¹ÇÑµÈ °ÍÀ¸·Î ÇÊÀÚ°¡ mysql 3.23.53-max-nt¿¡¼ Å×½ºÆ®ÇÑ °á°ú´Â ÆÇÀÌÇÏ°Ô ´Þ¶ú´Ù. Statement¿Í PreparedStatementÀÇ Â÷À̰¡ °ÅÀÇ ¾ø¾ú°í, °ÅÀÇ µ¿ÀÏÇÑ °á°ú¸¦ °¡Á®¿Ô´Ù. DBMSÀÇ ³»ºÎ±¸Á¶»óÀÇ Â÷ÀÌ·Î ÀÎÇÑ °á°úÀ̱⠶§¹®¿¡ °¢°¢ÀÇ ¼¹ö¿¡¼µµ Å×½ºÆ®¸¦ ÇÑ ÈÄ¿¡ ºü¸¥ °æ¿ì¸¦ ã¾Æ¼ Àû¿ëÇϱ⠹ٶõ´Ù. |
¼Ò½º : ex07-01-01.zip