打造更强的Java支持
2010-05-14 15:00:40 来源:WEB开发网DB2 UDB v.8.2 提供了一组新的 SQL 函数来获取 DB2 服务器性能信息(在 DB2 UDB v.8.2 的 SQL 参考中有相关文档)。清单 3 展示了如何收集关于 SQL 查询在 DB2 UDB 服务器的执行时间的信息。该特性使开发人员可以在开发期间确立查询性能的基准,而不必使用 DB2 管理工具或第三方的性能工具。
清单 3. 收集 SQL 查询在 DB2 服务器上的执行时间
with t1 as (select * from table (snapshot_appl_info('SAMPLE',-1)) as snap_appl_info where tpmon_client_app = 'Payroll Module' ) select elapsed_exec_time_ms from table (snapshot_appl ('SAMPLE',-1)) as snap_appl where (select agent_id from t1) = snap_appl.agent_id ELAPSED_EXEC_TIME_MS -------------------- 77
新的 SQL 管理函数便于跟踪 Java 应用程序的执行细节。clientApplicationInformation 属性用于帮助确定用于获得 DB2 UDB 服务器上执行时间的应用程序模块。清单 3 获得标识为 Payroll Module 的应用程序的 agent_id,该应用程序连接到 SAMPLE 数据库。最后一条 SQL 语句的执行时间是 77 毫秒。
现在,让我们修改这段程序,使之获得在应用程序中的耗时和在 DB2 UDB 服务器上的执行时间(见清单 4)。下面是一个示例输出:
Query elapsed time from application: 30 milliseconds.
Total query execution time on DB2 server: 22 milliseconds.
清单 4. 获得应用程序中的耗时以及 DB2 UDB 服务器上的执行时间
// Access the query execution time on DB2 UDB v.8.2 server
query =
"with t1 as " +
"(select * from table (snapshot_appl_info('SAMPLE',-1)) as "+
"snap_appl_info where tpmon_client_app = 'Payroll Module') " +
"select integer(elapsed_exec_time_ms)
from table (snapshot_appl ('SAMPLE',-1)) as snap_appl " +
"where (select agent_id from t1) = snap_appl.agent_id";
resultSet = st.executeQuery (query);
while (resultSet.next()){
System.out.println("Total Query execution time on DB2 Stinger: " +
resultSet.getInt(1) + " milliseconds.");
}
resultSet.close();
这些新的 SQL 函数使 Java 开发人员可以清楚地知道,对于任何查询,网络传输和查询执行各自所占的比重有多大。请注意,要执行快照 SQL 函数,用户必须有 DB2 实例上的 SYSCTRL (或更高)权限。
如果在 JDBC 驱动程序处理期间发生错误,则 DB2 Universal JDBC Driver 会提供基本的 SQL 异常信息以及 DB2 服务器错误细节。现在,让我们修改应用程序,使之包括打印特定于 DB2 的 DB2Diagnosable 对象的细节。我们还将通过将 currentSchema 设置为一个不存在的数据库对象来引入一个 SQL 错误:
prop1.put("currentSchema","FRED"); // Set unqualified references
图 5 展示了 DB2 SQLCA 数据结构。对于使用嵌入式 C 的程序员,这种数据结构可能非常面熟。消息标志指出无效的数据库对象引用(在这个例子中是 FRED.STAFF)。
图 5. DB2 Universal JDBC Driver 错误处理
更多精彩
赞助商链接