日期:2014-05-16  浏览次数:20557 次

SQLServer数据库笔记(二)

事件探查器

初次使用,一般选择上所有事件,并且在“筛选”选项卡上,选中 “排除系统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(