监控数据库操作SQL Profiler + P6Spy 完全配置手册
在我们 Java 开发应用程序的过程中,难免会碰到系统的性能问题,特别在企业应用的开发过程中,都会与数据库进行打交道。当我们碰到数据库性能时,最有效的就是直接跟踪 每一个 SQL 语句的执行情况,SQL 语句的优化、索引的优化往往也是最容易取得最直接的效果的。
我们首先开始介绍 P6Spy 这个剖析工具,看它是如何无侵入性地进行数据库操作的监控与剖析。
P6Spy
P6Spy 是一个可以用来在应用程序中拦截和修改数据操作语句的开源框架。通过 P6Spy 我们可以对 SQL 语句进行拦截,相当于一个 SQL 语句的记录器,这样我们可以用它来作相关的分析,比如性能分析。P6Spy 用 Log4J 来记录 JDBC 调用的日记信息。
首先,你的应用系统应当是基于数据库的,然后你需要去获取 P6Spy 相关的文件(在下载频道中可以找到下载链接,您可以直接下载软件包)。下面介绍 P6Spy 的安装与使用的详细操作过程:
1. 下载P6Spy 的文件包;
2. 把 P6Spy 的 jar 包 p6spy.jar 放到 CLASSPATH 中,如果是 Web 应用程序则放在/WEB-INF/lib/ 目录下;
3. 把 spy.properties 放到 CLASSPATH 目录下,如果是 Web 应用程序放在 YourWebApp/WEB-INF/classess/ 目录下,注意不是 lib/ 目录
4. 修改你应用系统中的数据库驱动名称为 P6Spy 的驱动程序名称 com.p6spy.engine.spy.P6SpyDriver 其它的全部使用默认值,暂时先都不用修改;
5. 打开配置文件 spy.properties 文件,找到 realdriver,把它的值改为你的应用系统的真正的数据库驱动名称;
6. 运行你的应用程序或 Web 应用程序,可以在 spy.log 里看到 P6Spy 监测到的 SQL 详细的执行与操作的记录信息了,包含有完整的 SQL 执行参数。
这个实现原理比较简单,我们可以认为 P6Spy 就是一个代理(Proxy),它只做了一层对 JDBC 驱动的拦截,然后转发出去,这样的设计与实际的应用程序没有任何的耦合性,除了在配置中将驱动程序改成 P6Spy 的拦截驱动外,程序其他地方并不需要做任何的改变。这层拦截器除了可能会给系统带来略微的性能下降外,对程序其他方面没有任何的影响。而相对于这一点点的 性能下降,在开发环境中对于开发人员来说是无法感觉到,相比它所带来的好处,完全可以忽略不计。
SQL Profiler
SQL Profiler 是一个由 Jahia.org 提供的基于 P6Spy 引擎的快速剖析工具,用来统计 SQL 查询语句以便了解哪里是性能瓶颈,在哪里创建索引或者采取相应的办法才能提高效率,并且能根据 SQL 查询语句的情况帮你生成合适的索引脚本。
这 个小工具可以实时地显示数据库查询的情况,通过集成的 SQL 解析器,在访问大多数表与列上面建立统计分析,并生成索引脚本。当然,其它的信息也会进行收集和显示,比如:单个数据库请求的时间、一类请求的时间以及所 有请求的时间。因此,可以有效地通过视图的排序来检测数据的性能问题所在。这个工具对于大量的需要进行分析的请求是非常有用的,而不是人工一个个地去做分 析。当你需要知道比如对相同的表和列进行访问但是采用不同的查询值时,这种分组的查询可以用建立在 ANTLR 上的 SQL 解析器进行分析。
使用步骤
首先,你的应用系统同样也应当是基于数据库的,然后你需要去获取 SQL Profiler 相关的文件(在下载频道中可以找到下载链接,您可以直接下载软件包)。下面介绍 SQL Profiler 的安装与使用的详细操作过程:
1. 下载SQL Profiler 的文件包;
2. 把 p6spy.jar 及 sqlprofiler.jar 放到 CLASSPATH 中,如果是 Web 应用程序则放在 /WEB-INF/lib/ 目录下;
3. 把 spy.properties 放到 CLASSPATH 目录下,如果是 Web 应用程序就放在 /WEB-INF/classess/ 目录下,注意不是 lib/ 目录;
4. 修改你应用系统中的数据库驱动名称为 P6Spy 的驱动程序名称 com.p6spy.engine.spy.P6SpyDriver 其它的全部使用默认值,暂时不用修改;
5. 打开 spy.properties 文件,把 realdriver 的值改为你的程序的数据库驱动名称;
6. 注意要先运行 java -jar sqlprofiler.jar 来启动 SQL Profiler,并成功看到启动界面;
7. 然后再启动你的应用程序或服务器,并开始进行正常的系统请求处理操作;
8. 这样就可以在 SQL Profiler 图形化的界面上看到结果并进行分析了。
在经过分析后,我们可以直接通过 SQLProfiler 提交的保存按钮,直接导出应当进行数据库优化的建议的索引脚本,通过查看索引脚本,我们可以看到创建索引的详细 SQL 脚本,这样,我们就可以非常方便地进行数据库调优了。
注意事项:
Profiler 开始可能会出现连接不上P6Spy,可以通过 SQL Profiler 控制界面最下面的连接状态就可以知道是否有程序连接上来。
第一spy.properties的配置文件,这里建议直接修改Profiler包里面的spy.properties文件,而不是P6Spy包里面的。
其次就是需要先启动 SQLProfiler,然后再启动应用程序或者 Tomcat 等应用服务器。这是因为 SQLProfiler 默认使用的是 Log4j 的 SocketAppender,参见配置文件中 log4j.appender.SQLPROFILER_CLIENT=org.apache.log4j.net.SocketAppender
这也就是能监控的原理,所以要先启动,因你的应用程序或应用服务器中的 Web 应用之类的因连接不到 Socket 的服务器(SQLProfiler 相当于 Socket 的服务器)而发生错误。
欢迎转载,请注明出处:亲亲宝宝