'JDBC 드라이버에서 날리는 쿼리'에 해당되는 글 1

  1. 2010.07.09 JDBC 드라이버에서 날리는 쿼리 확인 - SQL Server

JDBC 드라이버에서 날리는 쿼리 확인 - SQL Server

JDBC 프로그램에서 쿼리를 날렸을 때 DBCC INPUTBUFFER spid 의 결과

- Profiler를 이용하면 쿼리와 매개변수까지 확인 가능함.

- sqljdbc.jar - 569KB (583,286 바이트) 사용, SQL Server 2005

DriverManager.getConnection()
Language Event    0     set transaction isolation level  read committed  set implicit_transactions off

Connection#setAutoCommit(false)
Language Event    0    set implicit_transactions on

Statement#executeQuery()
Language Event    0    SELECT top 2 * FROM TB_SAMPLE

PreparedStatement#executeQuery()
Language Event    0     set transaction isolation level  read committed  set implicit_transactions off //실행시킨 쿼리문을 확인할 수 없음, getConnection() 호출시 남아 있던 문장

CallableStatement#executeQuery()
//상동

SYSPROCESSES에서 program_name을 확인할 수 없음.

- jtds-1.2.2 사용, SQL Server 2005
DriverManager.getConnection()
Language Event    0    SELECT @@MAX_PRECISION  SET TRANSACTION ISOLATION LEVEL READ COMMITTED  SET IMPLICIT_TRANSACTIONS OFF  SET QUOTED_IDENTIFIER ON  SET TEXTSIZE 2147483647

Connection#setAutoCommit(false)
Language Event    0    SET IMPLICIT_TRANSACTIONS ON

Statement#executeQuery()
Language Event    0    SELECT top 2 * FROM TB_SAMPLE

PreparedStatement#executeQuery()
Language Event    0    (@P0 nvarchar(4000))SELECT top 2 * FROM TB_SAMPLE WHERE key =  @P0

CallableStatement#executeQuery()
RPC Event    0    DB123.dbo.pr_test;1

SYSPROCESSES에서 program_name이 jTDS로 확인됨.

- 연결된 서버를 통한 4파트 쿼리나 Openquery도 위와 동일함.
모두 Language Event 이다.

- auto commit이 false면 opentran 1, 그러나 락은 안보임

- sqljdbc.jar - 569KB (583,286 바이트) 사용, SQL Server 2000
커넥션 붙는 부분 위와 동일

CallableStatement, PreparedStatement#executeQuery()
RPC Event    0    sp_prepexec;1

- jtds-1.2.2 사용, SQL Server 2000
CallableStatement#executeQuery()
RPC Event    0    PR_test;1

PreparedStatement#executeQuery()
RPC Event    0    sp_execute;1

- 2005에서 실행된 쿼리를 볼 때 이 쿼리를 이용한다.

- 연결된 서버
처음 접속한 서버(2005)는 일반적인 커넥션과 동일하고, 연결된 원격의 서버(2000)에서 확인해보면 다음과 같은 특징을 가진다.

sp_who
spid ecid status      loginame    hostname        blk  dbname
58    0     dormant    test_user    DBS2005          0     NULL

sysprocesses에서 hostname이 DBS2005 이고 program_name이 Microsoft SQL Server 이다.

dbcc inputbuffer (58)
RPC Event    0    sp_reset_connection;1