最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

用p6spy 来观察 Java 程序中执行的所有 SQL 语句

IT圈 admin 57浏览 0评论

2024年5月25日发(作者:章凝雁)

/?key=p6spy

用 p6spy 来观察 Java 程序中执行的所有 SQL 语句(一. 引子)

一个企业应用程序的性能瓶颈可能会在硬件配置、网络方面、程序代码、应用服务器

配置、数据库配置、SQL 语句。这里我把本文的关注点 SQL 无意间放在了最后,其实它

不并不意味着最后考虑的,而是过程中就要时刻留意的。

SQL 语句的优化总得把所执行语句抓出来瞧瞧,分析分析。如果直接用 JDBC 或者

是类 iBatis 的东西来访问数据库,那所执行的 SQL 语句是明确的,而现在的项目大多会

用 ORM 组件,例如 Hibernate、JPA、CMP、TopLink 都有自己特定的查询语法,最

终当然要转换成 SQL 语句的,所以会生成什么样的 SQL 语句就不甚明了,若人为的看

着专有查询语句来相象出 SQL 语句并非易事。虽然 Hibernate 设置 show_sql=true

时也能打印出生成的 SQL(带?号参数),配合详细的日志参数值也可以对上,不过挺麻烦

的。

许多数据库本身就有 SQL 语句的跟踪功能。比如 Oracle 中,可以为某个用户开启

SQL 跟踪功能,根据条件把所执行的 SQL 语句记录在服务器的日志。或者可从 v$sql、

v$sqltext、v$sqlarea 等视图中去查询所执行的 SQL 语句。

利用数据库的 SQL 功能需用特定于数据库的配置方法,好处就是不拘泥于某种编程

语言。对于 Java 程序我们介绍 p6spy 组件,它可以拦截所有执行的 SQL 语句,而不

管你使用的是什么 ORM 框架。对于 PrepareStatement 那样带参数(?) 的语句,它会帮

你代上相应的参数值。

p6spy 的主页是 ,它支持当前流行的应用服务器,如 JBos

s、Orion、Tomcat、WebLogic、WebSphere 等,在 /docum

entation/#install 介绍了 p6spy 的安装。其实不用太在意 p6spy 的安装说

明,关键是要了解了某个应用服务器本身,要搞清楚的一个问题是“谁在加载 p6spy 包,

从哪里加载”,那么配置 p6spy 就不成问题了,你甚至可以把 p6spy 用在独立的 Java

应用程序中。

p6spy 可以输出日志到文件中、控制台、或者传递给 Log4j,而且还能配搭 SQL Pr

ofiler 或 IronTrackSQL 图形化监控 SQL 语句,监测到哪些语句的执行是耗时的,逐个

优化。关于与 SQL Profiler 或 IronTrackSQL 的配合使用可参数文件的链接。

原本写这个心里的布局是,先简介 SQL 跟踪,再引入 p6spy,然后讲讲在 Tomcat

中的配置,最后就是对 p6spy 作少许修改使之更符合自己的输出要求。可是前面一说又

说便打不住了,生出了这许多累赘,那不妨顺势把介绍 p6spy 当成一个系列吧,不得已

而把此编作为引子。下面分篇介绍 Tomcat 中的 p6spy 的配置,p6spy 的定制,必要

时加上与 SQL Profiler 或 IronTrackSQL 的组合使用。

用 p6spy 来观察 Java 程序中执行的所有 SQL 语句(二. Tomcat 下的配置)

本文不打算依照官方的说明来做,我们让 Tomcat 的 Common 类加载器来加载 p

包,包含了 Tomcat 5/6 下的 p6spy 配置,数据库连接池实现用 C3P0,数据

库为 Oracle,配置在一个与应用同名的单独的 xml 文件中,Tomcat 中是在应用的 ME

TA-INF/ 文件中。步骤如下:

1. 软件准备

2024年5月25日发(作者:章凝雁)

/?key=p6spy

用 p6spy 来观察 Java 程序中执行的所有 SQL 语句(一. 引子)

一个企业应用程序的性能瓶颈可能会在硬件配置、网络方面、程序代码、应用服务器

配置、数据库配置、SQL 语句。这里我把本文的关注点 SQL 无意间放在了最后,其实它

不并不意味着最后考虑的,而是过程中就要时刻留意的。

SQL 语句的优化总得把所执行语句抓出来瞧瞧,分析分析。如果直接用 JDBC 或者

是类 iBatis 的东西来访问数据库,那所执行的 SQL 语句是明确的,而现在的项目大多会

用 ORM 组件,例如 Hibernate、JPA、CMP、TopLink 都有自己特定的查询语法,最

终当然要转换成 SQL 语句的,所以会生成什么样的 SQL 语句就不甚明了,若人为的看

着专有查询语句来相象出 SQL 语句并非易事。虽然 Hibernate 设置 show_sql=true

时也能打印出生成的 SQL(带?号参数),配合详细的日志参数值也可以对上,不过挺麻烦

的。

许多数据库本身就有 SQL 语句的跟踪功能。比如 Oracle 中,可以为某个用户开启

SQL 跟踪功能,根据条件把所执行的 SQL 语句记录在服务器的日志。或者可从 v$sql、

v$sqltext、v$sqlarea 等视图中去查询所执行的 SQL 语句。

利用数据库的 SQL 功能需用特定于数据库的配置方法,好处就是不拘泥于某种编程

语言。对于 Java 程序我们介绍 p6spy 组件,它可以拦截所有执行的 SQL 语句,而不

管你使用的是什么 ORM 框架。对于 PrepareStatement 那样带参数(?) 的语句,它会帮

你代上相应的参数值。

p6spy 的主页是 ,它支持当前流行的应用服务器,如 JBos

s、Orion、Tomcat、WebLogic、WebSphere 等,在 /docum

entation/#install 介绍了 p6spy 的安装。其实不用太在意 p6spy 的安装说

明,关键是要了解了某个应用服务器本身,要搞清楚的一个问题是“谁在加载 p6spy 包,

从哪里加载”,那么配置 p6spy 就不成问题了,你甚至可以把 p6spy 用在独立的 Java

应用程序中。

p6spy 可以输出日志到文件中、控制台、或者传递给 Log4j,而且还能配搭 SQL Pr

ofiler 或 IronTrackSQL 图形化监控 SQL 语句,监测到哪些语句的执行是耗时的,逐个

优化。关于与 SQL Profiler 或 IronTrackSQL 的配合使用可参数文件的链接。

原本写这个心里的布局是,先简介 SQL 跟踪,再引入 p6spy,然后讲讲在 Tomcat

中的配置,最后就是对 p6spy 作少许修改使之更符合自己的输出要求。可是前面一说又

说便打不住了,生出了这许多累赘,那不妨顺势把介绍 p6spy 当成一个系列吧,不得已

而把此编作为引子。下面分篇介绍 Tomcat 中的 p6spy 的配置,p6spy 的定制,必要

时加上与 SQL Profiler 或 IronTrackSQL 的组合使用。

用 p6spy 来观察 Java 程序中执行的所有 SQL 语句(二. Tomcat 下的配置)

本文不打算依照官方的说明来做,我们让 Tomcat 的 Common 类加载器来加载 p

包,包含了 Tomcat 5/6 下的 p6spy 配置,数据库连接池实现用 C3P0,数据

库为 Oracle,配置在一个与应用同名的单独的 xml 文件中,Tomcat 中是在应用的 ME

TA-INF/ 文件中。步骤如下:

1. 软件准备

发布评论

评论列表 (0)

  1. 暂无评论