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("");//执行过程如下:


SQLServer数据库笔记(二)_第1张图片
 主要是登录事件(AuditLogin),登录时的初始设置如下(疑惑,在企业管理器中看到的默认连接选项不同?)


SQLServer数据库笔记(二)_第2张图片
SQLServer数据库笔记(二)_第3张图片
 jTDS在登录后执行如下设置:

 

    conn.setAutoCommit(false);//执行语句:SET IMPLICIT_TRANSACTIONS ON

    conn.createStatement();//无影响

    stmt.execute("");//执行过程如下(分两部分来看)


SQLServer数据库笔记(二)_第4张图片

 可以看到,无论JDBC statement.execute()或者statement.executeBatch(),在SQLServer都是按Batch处理。

SP:CacheInsert:将sql语句转换为一般形式,并将语句的编译结果放入缓存中;可以看到对于insert语句,缓存的是参数化后的语句,这样,语句参数变化后,仍然能从缓存中得到已编译的语句。

SQLTransaction 开始:隐性事务开始;

Execution Plan:执行计划是表扫描: 




SQLServer数据库笔记(二)_第5张图片
 TransactionLog:对于更新语句,记录事务日志。

    conn.commit();//执行过程如下:

 SQLServer数据库笔记(二)_第6张图片

 jTDS对于conn.commit()的命令是:   IF @@trancount > 0 COMMIT TRAN

另外,对于Read committed事务隔离级别,select语句在开始执行时获取共享锁,在语句结束后,即释放该锁。更新语句,则直到事务提交或回滚时才释放锁(排他)

    stmt.close();//无影响

    conn.close();//AuditLogout事件。

你可能感兴趣的:(sql,.net,jdbc)