日期:2014-05-16 浏览次数:20557 次
事件探查器
初次使用,一般选择上所有事件,并且在“筛选”选项卡上,选中 “排除系统ID”。
单击事件探查器上的“帮助”,会打开SQLServer联机帮助页面“使用SQL事件探查器进行监视”,切换到帮助目录,点击工具栏上的“定位”按钮,在选中的节点下面,有详细的事件分类信息,结合事件探查器熟悉这些内容,可以对SQLServer的执行过程有更好的理解。
在调试状态下看一下一个简单的JDBC程序的执行过程:
public static void main(String[] args) throws Exception { Class.forName("net.sourceforge.jtds.jdbc.Driver"); Connection conn = DriverManager.getConnection("jdbc:jtds:sqlserver://localhost:1433/test", "sa", ""); conn.setAutoCommit(false); Statement stmt = conn.createStatement(); stmt.execute("select * from cat insert into cat values('123', 'aaa')"); conn.commit(); stmt.close(); conn.close(); }
??
????Class.forName("");//无影响;
??? DriverManager.getConnection("");//执行过程如下:
?主要是登录事件(AuditLogin),登录时的初始设置如下(疑惑,在企业管理器中看到的默认连接选项不同?):
?jTDS在登录后执行如下设置:
?
?? ?conn.setAutoCommit(false);//执行语句:SET IMPLICIT_TRANSACTIONS ON
??? conn.createStatement();//无影响
?? ?stmt.execute("");//执行过程如下(分两部分来看):
?可以看到,无论JDBC statement.execute()或者statement.executeBatch(),在SQLServer都是按Batch处理。
SP:CacheInsert:将sql语句转换为一般形式,并将语句的编译结果放入缓存中;可以看到对于insert语句,缓存的是参数化后的语句,这样,语句参数变化后,仍然能从缓存中得到已编译的语句。
SQLTransaction 开始:隐性事务开始;
Execution Plan:执行计划是表扫描:?
?TransactionLog:对于更新语句,记录事务日志。
?? ?conn.commit();//执行过程如下:
?
?jTDS对于conn.commit()的命令是:?? IF @@trancount > 0 COMMIT TRAN
另外,对于Read committed事务隔离级别,select语句在开始执行时获取共享锁,在语句结束后,即释放该锁。更新语句,则直到事务提交或回滚时才释放锁(排他)。
??? stmt.close(