Sql server 如何在sql server查询中查找操作员扫描的页数?

Sql server 如何在sql server查询中查找操作员扫描的页数?,sql-server,jdbc,sql-execution-plan,Sql Server,Jdbc,Sql Execution Plan,我需要在sql server查询计划中查找操作员扫描的页数。 我曾经 返回的每个表扫描的逻辑、物理、预读页面数, 但我需要每个接线员 此外,我无法使用JDBC驱动程序读取IO消息,并且 我要执行100多个查询,并记录每个操作员读取的页面数 是否有任何方法可以至少获取每个表的页数,JDBC驱动程序可以访问这些页数 或 是否需要设置任何类型的标志来获取XML计划本身中扫描的页数。关于IO消息,可以在JDBC中使用getWarnings检索查询执行期间生成的信息和警告消息。下面是一个准备好的语句示例

我需要在sql server查询计划中查找操作员扫描的页数。 我曾经

返回的每个表扫描的逻辑、物理、预读页面数, 但我需要每个接线员

此外,我无法使用JDBC驱动程序读取IO消息,并且 我要执行100多个查询,并记录每个操作员读取的页面数

是否有任何方法可以至少获取每个表的页数,JDBC驱动程序可以访问这些页数


是否需要设置任何类型的标志来获取XML计划本身中扫描的页数。

关于IO消息,可以在JDBC中使用
getWarnings
检索查询执行期间生成的信息和警告消息。下面是一个准备好的语句示例

try (
    Connection con = DriverManager.getConnection("jdbc:sqlserver://yourserver:1433;databaseName=AdventureWorks;user=youruserid;password=y0urp@ssw0rd;");
    PreparedStatement ps=con.prepareStatement ("SET STATISTICS IO ON;SELECT * FROM Person.Person WHERE BusinessEntityID = ?;");
    ) {
    ps.setInt(1, 1);
    ResultSet rs = ps.executeQuery();

    //consume result set(s)
    do {
        if(!rs.isClosed()) {
            while(rs.next()) {}
            rs.close();
        }
    } while(ps.getMoreResults());

    //get info and warning messages (including statistic io messages)
    SQLWarning w = ps.getWarnings();
    while(w != null) {
        System.out.println(w.getMessage());
        w = w.getNextWarning();
    }

} catch (SQLException e1) {
    throw e1;
}

您的其他问题在中得到了更好的回答。

我犯的错误是,试图在完全迭代到结果集之前获取警告消息。我想那是我犯的错误
try (
    Connection con = DriverManager.getConnection("jdbc:sqlserver://yourserver:1433;databaseName=AdventureWorks;user=youruserid;password=y0urp@ssw0rd;");
    PreparedStatement ps=con.prepareStatement ("SET STATISTICS IO ON;SELECT * FROM Person.Person WHERE BusinessEntityID = ?;");
    ) {
    ps.setInt(1, 1);
    ResultSet rs = ps.executeQuery();

    //consume result set(s)
    do {
        if(!rs.isClosed()) {
            while(rs.next()) {}
            rs.close();
        }
    } while(ps.getMoreResults());

    //get info and warning messages (including statistic io messages)
    SQLWarning w = ps.getWarnings();
    while(w != null) {
        System.out.println(w.getMessage());
        w = w.getNextWarning();
    }

} catch (SQLException e1) {
    throw e1;
}