Site Search :
Standard Enterprise XML Methodology Pattern Setting Tunning Other
Article Contributors
GuestBook
Javapattern Maven
XSourceGen Dev
JetSpeed Test
JLook Image
jLook Family Site


Java JDBC Performance Tip(1)-Select Speed up!
 
ÀÚ¹ÙÂÊÀÇ ¹èÄ¡ÇÁ·Î±×·¥À» ¸ÕÀú º¸±â Àü¿¡ ¿ì¼± ¿ö¹Ö¾÷À¸·Î ´ë·® µ¥ÀÌÅÍÀÇ selectÄõ¸®½Ã¿¡ ¼Óµµ¸¦ ¿Ã¸±¼ö ÀÖ´Â ¹æ¹ý¿¡ ´ëÇÏ¿© »ìÆ캻´Ù. ( 2003/04/14 ) 1277
Written by ienvyou - ÃÖÁö¿õ
1 of 1
 

À̹ø ¾ÆƼŬ¿¡¼­´Â ÀÚ¹Ù¿¡¼­ÀÇ ¹èÄ¡ÀÛ¾÷¿¡ ´ëÇÏ¿© ³íÇÏ¿© º¸ÀÚ. ÀüºÎÅÍ À̺κп¡ ´ëÇÏ¿© 
ÀÛ¼ºÀ» ÇÑ´Ù°í Á÷Á¢ Àû¾î³õ°í¼­ ÀÌÁ¦¾ß ¸¸µé¾î ³»´Â ³î»õÀÇ °ÔÀ¸¸§À» ÀÌÇØÇØÁֱ⠹ٶõ´Ù.
¿Ö³Ä~~ ¿äÁò ³Ê¹« ¹Ù»Ú±â ¶§¹®¿¡.. ^^

ÀÌ·±°Å ÀÌ¹Ì ¾Ë°í ÀÖÀ¸¸é¼­µµ È¥ÀÚ¸¸ÀÇ ±â¼úÀÎ³É ¼û±â°í ÀÖ´Â »ç¶÷µéÀÌ ÀÖÀ»±îºÁ ¿­½ÉÈ÷ ¸¸µé¾î¼­
¾ÆƼŬ·Î ¾´´Ù. È¥ÀÚ ¾Ë°í ÀÖÀ¸¸é ¹¹Çϸ®¿ä. ÀÎÅͳÝÀº Ç껧À¸·Î ÀÖ´Â °ÍÀÌ ¾Æ´Ï´Ù. Á¤º¸ÀÇ ¹Ù´ÙÀÎ
°ÍÀÌ´Ù.

Áö±Ý ½Ã°£ÀÌ ¾ø´Ù.. ¹Ù·Î ½ÃÀÛÇÑ´Ù.  

ÀÏÀü ¹æ¸í·Ï¿¡ ÀÌ·± ÀÛ¾÷À» ÇÏ´Â ºÐÀÇ ¹®ÀÇ°¡ ÀÖ¾ú´Ù. ¿ä¾àÇÏ¸é ´ÙÀ½°ú °°Àºµ¥ "´ç½ÅÀÇ ¿¬±¸¼º°ú¸¦
Àß º¸°í ÀÖ´Ù, ¿ì¸® »çÀÌÆ®´Â ¹èÄ¡ÀÛ¾÷À» Pro*C·Î ÇÏ°í front-end´ÜÀº ÀÚ¹Ù·Î ÇÑ´Ù. ÇÏ°í ½ÍÀº
¸»ÀÎÁïÀº ¹èÄ¡µµ ÀڹٷΠ¥°í ½Í´Ù. ÆÛÆ÷¸Õ½º¸¦ ³ª°Ô ÇÏ´Â ¹æ¹ýÀ» ¾Ë·Á´Þ¶ó" ¶ó´Â °ÍÀÌ ¿äÁö¿´´Ù.

À۳⸻ÀÇ ÇÁ·ÎÁ§Æ®¿¡¼­µµ ¹èÄ¡¸¦ Çϱä ÇßÁö¸¸ ±×¶§´Â java data¸¦ Àо¾î Visual Basic¿¡¼­ ó¸®ÇÏ´Â
¹èÄ¡ÇÁ·Î±×·¥À̾ ÀÚ¹Ùº¸´Ù´Â VB¿¡ °¡±î¿î ÇüÅ¿´°í, °í»ýµµ ¸¹ÀÌ Çß´Ù.

ÇÏÁö¸¸ À̹ø¿¡´Â ¼ø¼ö ÀÚ¹Ù¹èÄ¡¸¦ ÀÌ¿ëÇϵµ·Ï ÇÑ´Ù. ´ç¿¬È÷ transtion»óȲÇÏÀ̹ǷΠinsert, update, delete¿¡
°üÇÑ °ÍÀÓÀ» ¿°µÎ¿¡ µÎ¾î¾ß ÇÑ´Ù.

¿ì¼± ¿ö¹Ö¾÷À¸·Î select¸¦ »¡¸® ÇØ¿Ã ¼ö ÀÖ´Â ¹æ¹ýÀ» Àá±ñ º¸µµ·Ï ÇÏÀÚ.

´Ü~ ¿ì¼± ¾Ë¾ÆµÎ¾î¾ß ÇÒ °ÍÀº À̹ø ¾ÆƼŬÀº ¿À¶óŬÀ» ÀÌ¿ëÇÑ »ùÇÃÀÓÀ» ¾Ë¾ÆµÎµµ·Ï ÇÏÀÚ.

¢º Select Query speed up!

Database record select¼Óµµ¸¦ ³ôÀÏ ¼ö ÀÖ´Ù?  Èì.
¿À¶óŬ µ¥ÀÌÅͺ£À̽ºÀÇ ¸Þ¸ð¸® ±¸Á¶¿¡¼­ »ç¿ëÇÏ´Â ¿µ¿ªÀ» Oracle JDBC±îÁö ¿¬°á½ÃÄÑ º¸¸é ½±°Ô º¸ÀÌ´Â
°ÍÀÌ´Ù. º¸Åë ¿À¶óŬ°°Àº °æ¿ì Software Code Areas, P.G.A (Program Global Area), 
S.G.A (System Global Area) ·Î ³ª´­¼ö ÀÖ´Ù

°£·«ÇÏ°Ô ³ª¸¶ ¼³¸íÀ» Çغ¸ÀÚ¸é 

1) SoftWare Code Areas.
 ¿À¶óŬÀÇ ½ÇÇà ¸ðµâµéÀÌ ¸Þ¸ð¸®¿¡ ÇÒ´çµÇ´Â °ø°£ÀÌ´Ù.
 ÀÏ¹Ý À¯Àú ÇÁ·Î±×·¥ÀÌ Á¢±ÙÇÒ ¼ö ¾ø°í, Å©±â´Â  O/S ¿¡ µû¶ó ¾à°£¾¿ ´Ù¸£Áö¸¸ Virtual Memory ¿¡ À§
 Ä¡ÇÏ°Ô µÈ´Ù. 

2) S.G.A ( System Global Area )
 ¿À¶óŬ ÀνºÅϽºÀÇ ÇÑ ºÎºÐÀ¸·Î ÀνºÅϽº°¡ ±âµ¿ (Startup) ÇÒ¶§ ¸Þ¸ð¸®¿¡ ÀâÈ÷°Ô µÇ´Â ÀÛ¾÷ ¿µ¿ªÀÌ
 ´Ù.  ÀÌ ¿µ¿ªÀº ¿À¶óŬÀÌ ±âµ¿Áß¿¡ »ç¿ëµÇ´Â µ¥ÀÌŸ³ª °¢Á¾ Á¤º¸µé, ±×¸®°í ÀÏ¹Ý À¯ÀúµéÀÇ ¸ðµç SQL
 ¹®ÀåµéÀ» ÀÌ°÷¿¡¼­ ¼öÇàÇÑ´Ù.  ÁÖ·Î, Real Memory ¿¡ À§Ä¡ÇÏ°Ô µÈ´Ù.

3) P.G.A ( Program Global Areas ) 
 À¯Àú°¡ ¿äûÇÑ  SQL ¹®ÀåÀ» ó¸®Çϱâ À§Çؼ­ °¢ ¼¼¼Ç¸¶´Ù ¼±¾ðµÈ º¯¼ö °ªµéÀ» Àӽ÷ΠÀúÀåÇÏ´Â ¿µ¿ª
 À¸·Î, DisConnect Çϸé, ÀÚµ¿À¸·Î Release µÈ´Ù

ÀÚ, ±×·¯¸é ¿ì¸®°¡ »ç¿ëÇÏ´Â JDBCÀÇ ¿¬°á¿µ¿ªÀº ¾î¶»°Ô µÉ°ÍÀΰ¡? 

À§ÀÇ ¼³¸í¿¡¼­ ó·³ SGA¸¦ »ç¿ëÇÒ °Í °°´Ù. SGA´Â Data Buffer Cache¸¦ °¡Áö°í ÀÖ°Ô µÇ´Â µ¥ ÀÌ°ÍÀº 
SQL ¹®ÀåÀ» ½ÇÇàÇÒ¶§ ÇÊ¿äÇÑ µ¥ÀÌŸ¸¦ µð½ºÅ©¿¡¼­ SGA ¿µ¿ªÀ¸·Î ÀÐ¾î µéÀÌ´Â °÷ÀÌ´Ù. 
¿©±â¿¡´Â º¯°æµÈ µ¥ÀÌÅͻӸ¸ ¾Æ´Ï¶ó º¯°æµÇÁö ¾Ê´Â µ¥ÀÌÅ͵µ °¡Áö°í Àִµ¥, ÀÌ´Â ¼öÇà¼Óµµ Çâ»óÀ»
À§ÇØ µð½ºÅ© ÀÔÃâ·Â º¸´Ù´Â ¸Þ¸ð¸® Access¸¦ ÇÏ°Ô Çϱâ À§ÇÔÀÌ´Ù.
ÀÌ ¿µ¿ªÀÌ Å©¸é ±×¸¸Å­ ¸¹Àº µ¥ÀÌŸ¸¦ SGA ¿µ¿ª¿¡ ¿Ã·Á³õÀ» ¼ö ÀÖÀ¸¹Ç·Î ¸Þ¸ð¸®¿¡¼­ ¹Ù·Î ÀÐÀ» ¼ö 
ÀÖ´Â Hit À²ÀÌ ³ô¾ÆÁø´Ù. ±×·¯³ª, ÀÌ ¿µ¿ªÀÌ ³Ê¹« ÀÛÀ¸¸é ½º¿ÍÇÎ(Swapping) ÀÌ ¸¹ÀÌ ¹ß»ýµÇ¹Ç·Î 
½Ã½ºÅÛÀÇ ¼º´É¿¡ ¿µÇâÀ» ÁØ´Ù. Á¶È¸ ¼Óµµ¸¦ ³ôÀ̱â À§Çؼ± ÀÌ ¿µ¿ªÀ» ÃæºÐÈ÷ Å©°Ô ÇØ¾ß Çϴµ¥
ÀÌ°÷À» °É°í ³Ñ¾îÁú ¼ö ÀÖ´Â Java API°¡ ResultSet Ŭ·¡½ºÀÇ setFetchSize(int rows) ¸Þ¼ÒµåÀÌ´Ù.
Áï JDBC Driver°¡ ResultSetÀ» ÅëÇؼ­ °¡Á®¿Ã µ¥ÀÌÅÍÀÇ fetchÅ©±â¸¦ °áÁ¤ÇÏ°Ô ÇÏ´Â °ÍÀÌ´Ù.

ÆÛÆ÷¸Õ½º¿¡¼­ Ç×»ó ³ª¿À´Â À̾߱âÀÌÁö¸¸ ÀÌ·¯ÇÑ °ªµéÀº ³Ê¹« Ä¿µµ ¾ÈµÇ°í ³Ê¹« À۾Ƶµ ¾ÈµÈ´Ù´Â°ÍÀÌ´Ù.
µ¥ÀÌÅͺ£À̽º¸¶´Ù ÃÖÀûÀÇ ¼º´ÉÀ» ³ªÅ¸³»´Â °ªÀ¸·Î ¼¼ÆõǾîÁ®¾ß ÇÔÀº ¹°·ÐÀÌ´Ù.
¶ÇÇÑ 0 <= rows <= Statement.getMaxRows() ÀÓÀº ´ç¿¬ÇÏ°Ú´Ù.

ÀûÀº ¾çÀÇ µ¥ÀÌÅͺ£À̽ºÀÇ select Äõ¸®½Ã¿¡ À§ÀÇ fetch size¿¡ ´ëÇÑ °áÁ¤Àº º° Â÷ÀÌÁ¡À» µå·¯³»Áö ¾ÊÁö¸¸
´ë·®ÀÇ µ¥ÀÌÅ͸¦ Á¶È¸ÇÏ´Â ResultSetÀÇ  °æ¿ì ±× Â÷ÀÌ´Â Á¡Á¡ ±Ø¸íÇÏ°Ô ³ªÅ¸³ª´Â °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù.

°£´ÜÇÑ ¿¹Á¦¸¦ º¸°Ú´Ù.
ÀÌ ¿¹Á¦¿¡¼­ »ç¿ëµÇ´Â abt140À̶õ Å×À̺íÀº ÇöÀç 6,511,102°ÇÀÇ µ¥ÀÌÅ͸¦ °¡Áö°í ÀÖ´Ù.
fetch size¸¦ ÁöÁ¤ÇÏ°í ¾ÈÇÏ°í ÀÇ °æ¿ì¸¦ ÅëÇÏ¿© °á°ú°ªÀ» º¸µµ·Ï ÇÏ°Ú´Ù.

import java.sql.*;
import java.io.*;

class FetchSizeTest {
    public static void main(String[] args) throws Exception {
        Class.forName("oracle.jdbc.driver.OracleDriver");
        String url ="jdbc:oracle:thin:@192.168.0.137:1521:abn";
        Connection conn = DriverManager.getConnection(url,"abs","abs");
        String query = " select * from abt140";
        PreparedStatement stmt = conn.prepareStatement(query);
        long start = System.currentTimeMillis();
        ResultSet rs = stmt.executeQuery();
        rs.setFetchSize(10000);
        while(rs.next()) {
            new String("xx");
        }
        System.out.println("Time elapsed : " + (System.currentTimeMillis() - start));
        rs.close();
        stmt.close();
        conn.close(); 
    }
}
À§ ÇÁ·Î±×·¥¿¡¼­ setFetchSize¸¦ Àû¿ë½ÃÅ°±â Àü°ú ÈÄÀÇ °á°ú°ªÀº ´ÙÀ½°ú °°´Ù. Fetch Size Àû¿ë¾ÈÇÒ °æ¿ì : Time elapsed --> 423038 Fetch Size¸¦ 10000 rows·Î Àû¿ëÇÒ °æ¿ì : Time elapsed --> 101556 À§ÀÇ °æ¿ì ¼ÓµµÂ÷ÀÌ°¡ °ÅÀÇ 4¹è°¡ ³ª´Â °ÍÀ» º¼ ¼ö ÀÖÀ¸¸ç, ²À 10000°³ÀÇ record¸¦ fetch·Î ÇÏ´Â°Ô ÃÖ»óÀÇ ÆÛÆ÷¸Õ½º°¡ ¾Æ´ÔÀ» ¸í½ÉÇصÎÀÚ.
 
1
References
 
Copyright ¨Ï 2003 www.javapattern.info & www.jlook.com, an jLOOK co.,LTD