# 테스트 환경
- Oracle Linux 7.2 (WebLogic 12.2.1.4), Oracle Linux 7.7 (Oracle DB 19c)
현재 WebLogic에 JNDI Lookup을 통해 DB에 insert하는 페이지를 배포한 후, 모든 값이 다 insert 되면 화면에 "All inserted" 가 나타나게 설정
for문을 돌려서 10000개의 insert SQL query를 날리는 것과, insertBatch를 이용하여 query를 날렸을때, InsertBatch가 더 소요시간이 짧다는 것을 test하기 위한 글이다.
============================================================================
유의미한 소요 시간 차이를 보기 위해 10000개를 insert해볼 예정.
테스트를 위해 connection pool을 10000개로 늘렸다.
============================================================================
# DB_test.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.sql.DriverManager"%> <%@ page import="java.sql.*"%> <%@ page import="java.sql.Connection,java.sql.*,javax.naming.InitialContext"%> <%@ page import="javax.naming.NamingException,javax.sql.DataSource"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> </head> <body> <% InitialContext ctx = new InitialContext(); DataSource ds = (DataSource) ctx.lookup("test"); Connection conn = ds.getConnection(); Statement stmt = conn.createStatement(); stmt.executeUpdate("delete test"); for (int i = 0; i < 10000; i++) { int a = i; String b = Integer.toString(i); stmt.execute("insert into test(num , name) values(" + a + ", " + b + ")"); conn.commit(); } out.println("All inserted"); stmt.close(); conn.close(); %> </body> </html> |
# DB_batch.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.sql.DriverManager"%> <%@ page import="java.sql.*"%> <%@ page import="java.sql.Connection,java.sql.*,javax.naming.InitialContext"%> <%@ page import="javax.naming.NamingException,javax.sql.DataSource"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> </head> <body> <% InitialContext ctx = new InitialContext(); DataSource ds = (DataSource) ctx.lookup("test"); Connection conn = ds.getConnection(); Statement stmt = conn.createStatement(); String sql = "insert into test(num , name) values(?, ?)"; PreparedStatement ps = null; ps = conn.prepareStatement(sql); stmt.executeUpdate("delete test"); for (int i = 0; i < 10000; i++) { int num = i; String name = "Bat_" + Integer.toString(i); ps.setInt(1, num); ps.setString(2,name); ps.addBatch(); //addBatch에 담기 ps.clearParameters(); //parameter clear ps.executeBatch(); //batch 실행 ps.clearBatch(); // batch 초기화 conn.commit(); } stmt.executeUpdate("commit"); out.println("All inserted"); stmt.close(); conn.close(); %> </body> </html> |
============================================================================
###### 테스트 결과 ######
DB_test.jsp를 호출했을 경우, All inserted 문구가 호출되기까지 약 13초가 소요됐다.
SQuirreL SQL client를 통해 해당 값들이 잘 들어온 것을 확인할 수 있다.
한편 InsertBatch를 이용한 DB_batch.jsp를 호출할 경우
소요시간이 약 8초로, InsertBatch를 이용하면 소요시간이 적게 나타나는 것을 확인할 수 있다.
'DB' 카테고리의 다른 글
Oracle DB 메모리 구조 (0) | 2023.10.25 |
---|---|
Vector DB (0) | 2023.06.13 |
WebLogic DataSource (0) | 2022.05.25 |
WebLogic ~ MSSQL 연동 (0) | 2022.05.11 |
SQuirreL SQL Client 연동 (0) | 2022.05.03 |