惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

H
Help Net Security
博客园 - Franky
GbyAI
GbyAI
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
爱范儿
爱范儿
IT之家
IT之家
酷 壳 – CoolShell
酷 壳 – CoolShell
aimingoo的专栏
aimingoo的专栏
博客园_首页
MongoDB | Blog
MongoDB | Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Recent Announcements
Recent Announcements
Scott Helme
Scott Helme
有赞技术团队
有赞技术团队
M
MIT News - Artificial intelligence
C
CERT Recently Published Vulnerability Notes
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Jina AI
Jina AI
F
Fortinet All Blogs
N
Netflix TechBlog - Medium
L
LangChain Blog
L
LINUX DO - 最新话题
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
H
Hacker News: Front Page
MyScale Blog
MyScale Blog
P
Palo Alto Networks Blog
G
Google Developers Blog
Google DeepMind News
Google DeepMind News
AI
AI
T
Troy Hunt's Blog
Microsoft Azure Blog
Microsoft Azure Blog
阮一峰的网络日志
阮一峰的网络日志
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Vercel News
Vercel News
Microsoft Security Blog
Microsoft Security Blog
罗磊的独立博客
S
Secure Thoughts
大猫的无限游戏
大猫的无限游戏
博客园 - 叶小钗
人人都是产品经理
人人都是产品经理
Blog — PlanetScale
Blog — PlanetScale
博客园 - 司徒正美
Apple Machine Learning Research
Apple Machine Learning Research
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 三生石上(FineUI控件)
S
Security @ Cisco Blogs
Cloudbric
Cloudbric
E
Exploit-DB.com RSS Feed
Attack and Defense Labs
Attack and Defense Labs

博客园 - 盈盈的工作小纸条

如何清除svn的账号缓存信息(solaris) EMMA 覆盖率工具 强大的ldd 如何对字典中的元素进行排序 在solaris上安装iperf Robotium 数据驱动测试框架 (原创)学习NotesList(Robotium自带的例子) (原创)初试Robotium (原创)LoadRunner 中 调用dll Apache+Mysql+PHP 套件 [转]国外人气最旺的软件测试网站 sysbench介绍 Sysbench 安装 代码覆盖率测试 批量修改文件内容 Gnuplot--linux下的画图工具 - 盈盈的工作小纸条 - 博客园 SMTP协议简介 shell 命令 perl:日期转换(date->unixtime) - 盈盈的工作小纸条 - 博客园
P6Spy & Irontrack SQL 简单使用
盈盈的工作小纸条 · 2009-08-07 · via 博客园 - 盈盈的工作小纸条

1.   概述

主要介绍如何在应用程序中利用 P6SpyIronTrack SQL 工具来对数据库操作进行监控与剖析,从中发现应用系统存在的性能瓶颈,得到相关的优化建议并最终找到相应的解决办法。

当我们碰到数据库性能时,最有效的就是直接跟踪每一个 SQL 语句的执行情况,SQL 语句的优化、索引的优化往往也是最容易取得最直接的效果的。

2.   P6Spy

       首先介绍下P6Spy这个工具, 他主要是用来获取应用程序与数据库之间的操作每个SQL语句,并记录每个操作执行的时间和相应的操作语句。方便我们进行性能分析。P6Spy Log4J 来记录 JDBC 调用的日记信息。

2.1         架构原理

简单地讲,我们可以认为 P6Spy 就是一个代理(Proxy),它只做了一层对 JDBC 驱动的拦截,然后转发出去,这样的设计与实际的应用程序没有任何的耦合性,除了在配置中将驱动程序改成 P6Spy 的拦截驱动外,程序其他地方并不需要做任何的改变。这层拦截器除了可能会给系统带来略微的性能下降外,对程序其他方面没有任何的影响。

下图是对数据库进行拦截监控的处理过程:

 

2.2         使用步骤

1.         下载 p6spy-install.jar 的文件包,http://www.p6spy.com/download.html

2.         解压p6spy-install.jar,把p6spy.jar 放到 CLASSPATH 中,如果是 Web 应用程序则放在 YourWebApp/WEB-INF/lib/ 目录下;

GMD:

l         mv p6spy.jar /usr/local/gmd/AicentGmms/WEB-INF/lib/

l         Modify polaris.sh

gmd_libfile=$gmd_libpath/GMDImportedLib.jar:$gmd_libpath/gmd.jar:$gmd_libpath/p6spy.jar:$gmd_libpath/

3.         spy.properties 放到 CLASSPATH 目录下,如果是 Web 应用程序放在 YourWebApp/WEB-INF/classess/ 目录下,注意不是 lib/ 目录

GMD:

l         mv spy.properties /usr/local/gmd/AicentGmms/WEB-INF/lib/

l         Modify polaris.sh

gmd_libfile=$gmd_libpath/GMDImportedLib.jar:$gmd_libpath/gmd.jar:$gmd_libpath/p6spy.jar:$gmd_libpath/

4.         修改你应用系统中的数据库驱动名称为 P6Spy 的驱动程序名称 com.p6spy.engine.spy.P6SpyDriver 其它的全部使用默认值,暂时先都不用修改;

GMD:

l         Modify GmmsConfig.properties

DS_gmms_Driver=com.p6spy.engine.spy.P6SpyDriver

5.         打开配置文件 spy.properties 文件,找到 realdriver,把它的值改为你的应用系统的真正的数据库驱动名称;同时制定log路径

GMD:

l         realdriver=com.mysql.jdbc.Driver

l         logfile= /usr/local/gmd/bin/spy.log

note: 如果在你的应用程序启动后,却在 spy.log 文件中发现了如下的提示信息,

<你的程序的数据库驱动名称> is a real driver in spy.properties, but it has been loaded before p6spy.  p6spy will not wrap these connections.  Either prevent the driver from loading, or try setting'deregisterdrivers' to true in spy.properties

那就是驱动程序加载先后的问题了。请把 spy.properties 配置文件里deregisterdrivers=false 改为 deregisterdrivers=true,重新运行即可。这是因为有些应用系统中会先于 P6Spy 加载了真正的数据库的驱动程序,导致 P6Spy 无法监控到,设置 deregisterdrivers true,是显式地把真正的数据库的驱动程序进行反注册掉,而采用 P6Spy 的驱动程序。

6.         运行你的应用程序或 Web 应用程序,可以在 spy.log 里看到 P6Spy 监测到的 SQL 详细的执行与操作的记录信息了,包含有完整的 SQL 执行参数。

2.3         LOG格式

current time|execution time|category|statement SQL String|effective SQL string

例子:

1249546798335|5560|1|statement||DELETE FROM messagestore

Delete语句花了5560ms的时间执行完

2.4         配置文件

配置项名称

默认值

配置项意义及相关注意事项

module.log

com.p6spy.engine.logging. P6LogFactory

用来拦截和记录任务应用程序的 JDBC 语句。若无配置或注释掉则无此功能。

module.outage

com.p6spy.engine.outage. P6OutageFactory

检测和记录执行时间比较长的 SQL 语句。若无配置或注释掉则无此功能。

realdriver

真正的应用系统使用的数据库驱动程序名称。

realdriver2

真正的应用系统使用的第二种备用数据库驱动程序名称。

realdriver3

真正的应用系统使用的第三种备用数据库驱动程序名称。

deregisterdrivers

false

显示地把真正的数据库的驱动程序进行反注册掉。取值 true| false

executionthreshold

P6Log 模块执行时间设置,整数值 (以毫秒为单位),只有当超过这个时间才进行记录 Log

outagedetection

false

P6Outage 模块是否记录较长时间运行的语句。取值 true| false

outagedetectioninterval

P6Outage 模块执行时间设置,整数值 (以秒为单位)),只有当超过这个时间才进行记录 Log

filter

false

是否过滤 Log,取值 true| false

include

过滤 Log 时所包含的表名列表,以逗号分隔。

exclude

过滤 Log 时所排除的表名列表,以逗号分隔。

sqlexpression

过滤 Log 时的 SQL 表达式名称

autoflush

true

是否自动刷新。取值 true| false

dateformat

Display as timestamp

设置logcurrent time的格式,也就是用 Java SimpleDateFormat 程序。

We can set: hh:mm:ss,SSS

includecategories

显示指定过滤 Log 时包含的分类列表,取值为 errorinfobatchdebugstatementcommitrollbackresult 的各种组合。

excludecategories

显示指定过滤 Log 时排队的分类列表,取值同上。

stringmatcher

使用正则表达式来过滤 Log,取值为 com.p6spy.engine.common.GnuRegexMatcher com.p6spy.engine.common.JakartaRegexMatcher

stacktrace

false

打印堆栈跟踪信息。取值 true| false

stacktraceclass

如果 stacktrace=true,则可以指定具体的类名来进行过滤。

reloadproperties

false

监测属性配置文件是否进行重新加载。取值 true| false

reloadpropertiesinterval

60

属性配置文件重新加载的时间间隔,以秒为单位。

useprefix

false

是否加上前缀,设置为 true,会加上 p6spy: 作为前缀。取值 true| false

appender

com.p6spy.engine.logging. appender.FileLogger

指定 Log appender,与 Log4J 有点同义,取值:com.p6spy.engine.logging.appender.Log4jLoggercom.p6spy.engine.logging.appender.StdoutLogger com.p6spy.engine.logging.appender.FileLogger

logfile

spy.log

指定 Log 的文件名,任何适于操作系统的文件。

append

true

指定是否每次是增加 Log,设置为 false 则每次都会先进行清空。取值 true| false

log4j.appender.STDOUT

org.apache.log4j.ConsoleAppender

appender log4j 时采用的配置,配置如同 Log4J 的相关配置。

log4j.appender.STDOUT.layout

org.apache.log4j.PatternLayout

同上

log4j.appender.STDOUT. layout.ConversionPattern

p6spy - %m%n

同上

log4j.logger.p6spy

INFO,STDOUT

Log 级别的设置,取值同 Log4J 的配置

realdatasource

设置数据源 DataSource 的配置名称。

realdatasourceclass

设置数据源 DataSource 的类的全称。

realdatasourceproperties

设置数据源 DataSource 的属性,以分号分隔。

jndicontextfactory

设置 JNDI 数据源的 NamingContextFactory

jndicontextproviderurl

设置 JNDI 数据源的提供者的 URL

jndicontextcustom

设置 JNDI 数据源的一些定制信息,以分号分隔。

3.   Irontrack SQL

一个专注于JDBC性能的监控和测试的开源项目,通过对JDBC 的包装来拦截应用序对数据库的请求,完成性能监控。IronTrack SQL 的好处在于不需要修改任何代码或者在数据库端安装任何程序,只需要在测试时把依赖的 JDBC 替换就可以了。

3.1         使用步骤

1.         下载IronTrack SQL的文件包进行安装:

2.         irontracksql.jar, p6spy.jar log4j-1.2.8.jar 放到 CLASSPATH 中,如果是 Web 应用程序则放在 YourWebApp/WEB-INF/lib/ 目录下;

GMD:

l                       mv p6spy.jar irontracksql.jar log4j-1.2.8.jar /usr/local/gmd/AicentGmms/WEB-INF/lib/

l                       Modify polaris.sh

gmd_libfile=$gmd_libpath/GMDImportedLib.jar:$gmd_libpath/gmd.jar:$gmd_libpath/p6spy.jar:$gmd_libpath/irontracksql.jar:$gmd_libpath/log4j-1.2.8.jar:$gmd_libpath/

3.         spy.properties 放到 CLASSPATH 目录下,如果是 Web 应用程序就放在 YourWebApp/WEB-INF/classess/ 目录下,注意不是 lib/ 目录;

GMD:

l                       mv spy.properties /usr/local/gmd/AicentGmms/WEB-INF/lib/

l                       Modify polaris.sh

gmd_libfile=$gmd_libpath/GMDImportedLib.jar:$gmd_libpath/gmd.jar:$gmd_libpath/p6spy.jar:$gmd_libpath/

4.         修改你程序的数据库驱动名称为 P6Spy 的驱动程序名称com.p6spy.engine.spy.P6SpyDriver 其它的都不用更改;

GMD:

l                       Modify GmmsConfig.properties

DS_gmms_Driver=com.p6spy.engine.spy.P6SpyDriver

5.         打开配置文件 spy.properties 文件,找到 realdriver,把它的值改为你的应用系统的真正的数据库驱动名称;

6.         打开配置文件 spy.properties 文件,设置监听端口号 monitorport=2000

7.         IronTrack SQL的文件包放在本机(或任何一台你用来启动IronTrack SQL的机子),在本机java -jar irontracksql.jar 来启动 IronTrack SQL

8.         再启动你的应用程序或服务器;

9.         可以在 IronTrack SQL 图形化的界面上看到结果并进行分析了。

3.2         Irontrack SQL GUI 使用

3.2.1   连接配置


3.2.2   连接


连接成功


3.2.3   实时观察分析数据

l         SQL Moniotr View


我们可以根据SQLCountAvg Time Max Time 进行排序

l         Graphing view


l         清除数据

在分析的过程中,我们可以根据需要点击“Purge”按钮,它可以清除目前所监测到的内容,然后重新进行记录监测信息,很方便地进行重新

3.2.4   导入导出数据

l         导出数据


l         导出成功


l         导入数据