性能监控2
Performance Monitoring, Part 2
Roger Sanders 著
笑熬浆糊 译
天堂鸟自由空间原创作品
天堂鸟自由空间©2002-2005版权所有
转载请保持文档完整性
访问更多可以浏览http://hbird.vicp.net/myself.html
或http://hbird.myrice.com/myself.html
Blog: http://blog.csdn.net/mr_bean
BBS讨论: http://hbird.vicp.net
mail:[email protected]
性能监控2
Roger Sanders 著
笑熬浆糊 译
原文出处:DB2 Magazine Quarter 3, 2004 Vol. 9, Issue 3
=\"MsoHyperlink\">英文原文(由于文章翻译未经授权请在转载时保留原文链接)
事件监视器超越了性能线索快照
在此系列第篇中我指出DB2性能监视工具趋向于个有组织、有目标导向调整结果简单说他们能帮助你确定性能问题症结所在并且给你些改进思路方法
你也许还记得数据库系统监视器是由两种区别监视工具组成:个快照监视器和个或多个事件监视器在上个章节我详细介绍了快照监视器以及它是怎样用于捕获例子或数据库在既定时间点上当前状态信息在本章我将要来介绍事件监视器是如何被用于捕获那些不能被快照监视器所抓取情况下监视器数据
事件监视器
事件监视器收集监视器数据例如特定事件或者事务发生因此事件监视器提供了个当事件或者活动发生时候不能使用快照监视器监视时搜集数据库系统监视器数据思路方法
例如假设你想要捕获每当死锁周期发生时监视器数据如果你对死锁概念比较熟悉话你应该知道个被称的为死锁监听器特殊进程在后台安静运行并且在预定间隔时间内会“苏醒”用以为死锁周期扫描当前正在锁定系统如果死锁周期被发现死锁监听器将会随机选择、回滚并且终止涉及在此次周期中任意个事务结果被选择出来那个事务将会接受到是个SQL代码并且所有实际上已经获得所被释放以便于剩下事务能够继续执行像这样系列事件信息不能被快照监视器所捕获这有很大可能是死锁周期可能在快照执行很久的前就已经被破坏了然后事件监视器却可以捕获该事件重要信息它可以在死锁周期被检测到瞬间被激活
这两种监视器另外个显著区别是:快照监视器以后台进程方式驻留从个数据库连接建立就开始捕获监视器数据;相反地事件监视器必须在他们使用的前专门去建立和激活几个区别事件监视器可以共存并且每个事件监视器只有在特定类型事件或者事务发生时候才会被激活表1显示就是可以导致事件监视器被激活些事件类型以及被每个事件类型所搜集监视器数据种类
lineDrawn pixelLineWidth 0\">
\" src=\"file:///C:\\DOCUME~1\\ADMINI~1\\LOCALS~1\\Temp\\msohtml1\\01\\clip_image002.g\"> 表1 事件类型和他们对应数据
由于事件监视器是特殊数据库对象因此它必须在使用的前创建它们只能收集发生在它们被定义数据库中事件或者事务监视器数据你不能在例子级使用事件监视器来收集监视器数据
创建事件监视器
你可以直接在控制中心中创建事件监视器(从事件监视器菜单选择创建事件监视器)也可以通过执行CREATE EVENT MONITOR SQL语句来创建它它基本语法如下:
CREATE EVENT MONITOR [Name]
FOR [DATABASE |
BUFFERPOOLS |
TABLESPACES |
TABLES |
DEADLOCKS < WITH DETAIL > |
CONNECTIONS < WHERE [EventCondition] > |
STATEMENTS < WHERE [EventCondition] > |
TRANSACTIONS < WHERE
[EventCondition] > , ...]
WRITE TO [TABLE [GroupName] (TABLE
[TableName]) |
PIPE [PipeName] |
FILE [DirectoryName]]
[MANUALSTART | AUTOSTART]
介绍说明:
- =\"MsoNormal\" style=\"MARGIN: 0cm 0cm 0pt; COLOR: #424242; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; tab-stops: list 36.0pt; mso-list: l2 level1 lfo1\">Name是被分配给这个事件监视器名称
=\"MsoNormal\" style=\"MARGIN: 0cm 0cm 0pt; COLOR: #424242; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; tab-stops: list 36.0pt; mso-list: l2 level1 lfo1\">EventCondition用于确定事件监视器将会为哪个连接、语句或者事务收集数据条件
=\"MsoNormal\" style=\"MARGIN: 0cm 0cm 0pt; COLOR: #424242; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; tab-stops: list 36.0pt; mso-list: l2 level1 lfo1\">GroupName确定被定义目标表上逻辑数据群组(使用这个参数可用值可以参见表1)
=\"MsoNormal\" style=\"MARGIN: 0cm 0cm 0pt; COLOR: #424242; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; tab-stops: list 36.0pt; mso-list: l2 level1 lfo1\">TableName确定指派给所有事件监视器写入数据库表名称
=\"MsoNormal\" style=\"MARGIN: 0cm 0cm 0pt; COLOR: #424242; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; tab-stops: list 36.0pt; mso-list: l2 level1 lfo1\">PipeName确定指派给所有事件监视器写入命名管道名称
=\"MsoNormal\" style=\"MARGIN: 0cm 0cm 0pt; COLOR: #424242; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; tab-stops: list 36.0pt; mso-list: l2 level1 lfo1\">
DirectoryName确定指派个包含事件监视器个或者多个文件写入目录名称
注意:在尖括号中出现参数是可选择;出现在方括号里面参数或者选择是必须察看CREATE EVENT MONITOR SQL语句完整语法参见IBM DB2 Universal Database, Version 8 SQL Reference Volume 2文档
我们假设如果你想创建个有关捕获所有应用级计数器值并且每当应用中止和数据库时候把它们写入名为CONN_DATA数据库表中个事件监视器你可以执行下面CREATE EVENT MONITOR语句来完成它
CREATE EVENT MONITOR CONN_EVENTS
FOR CONNECTIONS
WRITE TO TABLE CONN
(TABLE CONN_DATA)
FOR CONNECTIONS
WRITE TO TABLE
(TABLE CONN_DATA)
现在我们假使你要创建个用来捕获缓冲池和表空间事件监视器数据并且要把所有收集到数据写入到个名为/export/home/bpts_data目录事件监视器你可以执行下面CREATE EVENT MONITOR语句来完成它
CREATE EVENT MONITOR BPTS_EVENTS
FOR BUFFERPOOLS, TABLESPACES
WRITE TO FILE \'/export/home/BPTS_DATA\'
FOR BUFFERPOOLS, TABLESPACES
WRITE TO FILE \'/export/home/BPTS_DATA\'
正如你所看到当你创建个事件监视器时候你必须去指定激活监视器事件类型以及所有收集到数据写入地方
个事件监视器输出可以写入到个或者多个数据库表、外部文件或个命名管道表和管道型事件监视器流事件直接记录到指定表或者命名管道中另方面文件型事件监视器流事件记录成系列具有.evt扩展名8位编码文件(例如00000000.evt, 00000001.evt等等)存储在这些文件中数据也许被处理成类似于个单独数据流存储个单独文件中虽然这些数据实际上是被分割成许多小数据块(数据流开始于00000000.evt文件第个字节结束于创建最后个文件最后个字节)
如果你指明事件监视器输出会存储在数据库表里面话那么所有目标表将会在CREATE EVENT MONITOR语句被执行时候自动被创建(如果由于些原因创建表失败那么会返回个代码同时CREATE EVENT MONITOR语句执行也就失败)然而如果你指明事件监视器输出会写入个或者多个外部文件或者个命名管道时候这个输出目录或者命名管道则必须事先存在并且当事件监视器被激活时
DB2数据库管理器例子自身必须能够对它进行写入另外如果使用是个命名管道应用监视命名管道必须要运行同时它也必须在事件监视器被激活的前将管道打开准备读取信息
开始和停止事件监视器
如果你在创建个事件监视器时候指明使用AUTOSTART选项那么监视器将会在包含它数据库开始时候自动开始(数据库开始于使用ACTIVATE DATABASE命令来激活或者第个和该数据库连接建立时候)如果你使用MANUALSTART或者不知名任何选项(在这里MANUALSTART是缺省值)它结果就是事件监视器不会收集监视器数据直至它开始活动事件监视器可以通过执行SET EVENT MONITOR SQL语句来开始(停止)它基本语法如下:
SET EVENT MONITOR [MonitorName] STATE < = > [MonitorState]
介绍说明:
- =\"MsoNormal\" style=\"MARGIN: 0cm 0cm 0pt; COLOR: #424242; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; tab-stops: list 36.0pt; mso-list: l1 level1 lfo2\">MonitorName指明需要改变状态事件监视器名称
=\"MsoNormal\" style=\"MARGIN: 0cm 0cm 0pt; COLOR: #424242; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; tab-stops: list 36.0pt; mso-list: l1 level1 lfo2\">MonitorState指明指派给需要修改状态事件监视器状态想要开始事件监视器话(换句话说也就是把它置为激活状态)你要把它值置为1相反地需要置为0
现在我们假设你想要开始名为CONN_EVENTS事件监视器它创建时候采用了MANUALSTART选项你可以这么作:
SET EVENT MONITOR CONN_EVENTS STATE 1
如果你想要得到和上面相反地结果也就是说停止CONN_EVENTS事件监视器话你可以执行这句:
SET EVENT MONITOR CONN_EVENTS STATE 0
同时你也可以通过在控制中心事件监视器菜单中选中并且选择你想要得动作来开始和停止事件监视器
事件监视器旦开始运行它就会在后台静静等待所为他设计要监视相应事件或者事务出现当这种情况出现时候事件监视器会收集合适监视器数据信息并且将它们写入到监视器输出对象中(表、目录或者命名管道)在这个时候这些步骤将由事件或者事务自身去控制;数据库管理员不需要去执行任何额外步骤去收集事件监视器数据这点和快照监视器在使用时候是区别
强制输出
在有些时候低记录执行频率事件监视器(例如被设计于监视数据库事件监视器)会把事件监视器数据存储在内存中而没有存储在事件监视器目标空间上(这时候仅仅是部分事件记录存在)如果你在此时想要去检查下事件监视器活动内部缓存Cache里面内容话可以执行FLUSH EVENT MONITOR SQL语句该语句语法是FLUSH EVENT MONITOR [MonitorName] <BUFFER>MonitorName指明你需要强制立即输出他活动内部缓存Cache到目标空间事件监视器名称
强制将CONN_EVENTS事件监视器活动内部缓存Cache内容写入到相应空间你可以执行FLUSH EVENT MONITOR CONN_EVENTS语句缺省情况下早先被写入事件监视器目标空间那些记录被记录在事件监视器日志当中并且打上了个部分记录信息标志然而如果你在执行FLUSH EVENT MONITOR过程中指明了BUFFER选项话只有出现在事件监视器活动内部缓存Cache监视器数据才会被写入到事件监视器目标空间中同时在事件监视器日志中没有部分记录被记录
当事件监控器被清除后计数器并没有复位结果会造成当事件监控器被正常触发时已经被生成没有使用FLUSH EVENT MONITOR语句事件监控器记录仍然会被生成
事件监视器数据
有些时候你想要察看事件监视器收集数据如果这些收集到数据是写入到个命名管道那么在管道末端负责接受应用通常是以在它接受到数据时候显示出监视器数据形式作为相应如果事件监视器把数据写入表或者系列文件中话你可以通过个名为事件分析器(Event Analyzer)专用工具来察看数据或者使用Event Monitor Productivity Tool
事件分析器是个GUI工具它可以通过在控制中心选中你所想得到事件监视器并且从事件监视器菜单中选择适当动作或通过执行db2eva命令来激活图1显示事件分析器在它第次激活时候典型举例
旦它被激活事件分析器允许你向下挖掘并浏览个详细事件监视器捕获信息
事件分析器只能用于查看那些被收集并且存储和数据库表中事件监视器数据如果要查看被写入到文件或者命名管道里面监视器数据你将要使用基于文本Event Monitor Productivity Tool它可以从个事件监视器数据文件或命名管道中收取数据并且将这些数据处理成个格式化报告(事件监视器文件和命名管道包含个必须要在展示的前格式化 2进制逻辑数据群流)
通过db2evmon命令可以激活Event Monitor Productivity Tool这个命令基本语法是
db2evmon -db [DatabaseAlias] -evm [MonitorName]
或者 db2evmon -path [MonitorTarget]
介绍说明:
- =\"MsoNormal\" style=\"MARGIN: 0cm 0cm 0pt; COLOR: #424242; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; tab-stops: list 36.0pt; mso-list: l0 level1 lfo3\">DatabaseAlias指明所要定义事件监视器数据库别名
=\"MsoNormal\" style=\"MARGIN: 0cm 0cm 0pt; COLOR: #424242; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; tab-stops: list 36.0pt; mso-list: l0 level1 lfo3\">MonitorName指明所分配需要显示数据事件监视器名称
=\"MsoNormal\" style=\"MARGIN: 0cm 0cm 0pt; COLOR: #424242; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; tab-stops: list 36.0pt; mso-list: l0 level1 lfo3\">MonitorTarget指明已经被指定事件监视器收集数据存储位置(目录或命名管道)
作为例子为了格式化和输出被定义在SAMPLE数据库中事件监视器CONN_EVENTS所有被收集数据你可以通过执行db2evmon -db SAMPLE -evm CONN_EVENTS命令来得到
例如假设你要使用下面语句创建CONN_EVENTS事件监视器
CREATE EVENT MONITOR CONN_EVENTS
FOR CONNECTIONS
WRITE TO FILE \'C:\\MONDATA\'
AUTOSTART
假设个应用和SAMPLE数据库已经建立起个连接(使事件监视器可以收集和记录监视数据)db2evmon -db SAMPLE -evm CONN_EVENTS命令返回输出信息文件头部分表1中样例输出类似
表1事件监视器CONN_EVENTS输出样例
Reading C:\\DBSIO\\00000000.EVT ...
-----------------------------------------------------------------------
EVENT LOG HEADER
Event Monitor name: CONN_EVENTS
Server Product ID: SQL08015
Version of event monitor data: 7
Byte order: LITTLE ENDIAN
Number of nodes in db2 instance: 1
Codepage of database: 1252
Territory code of database: 1
Server instance name: DB2
-----------------------------------------------------------------------
-----------------------------------------------------------------------
Database Name: SAMPLE
Database Path: C:\\DB2\\NODE0000\\SQL00001\\
First connection timestamp: 03-24-2004 16:53:00.020233
Event Monitor Start time: 03-24-2004 16:53:00.155733
-----------------------------------------------------------------------
3) Connection Header Event ...
Appl Handle: 16
Appl Id: *LOCAL.DB
Appl Seq number: 0001
DRDA AS Correlation Token: *LOCAL.DB
Program Name : db2evmon.exe
Authorization Id: RSANDERS
Execution Id : RSANDERS
Codepage Id: 1252
Territory code: 0
Client Process Id: 1788
Client Database Alias: SAMPLE
Client Product Id: SQL08015
Client Platform: Unknown
Client Communication Protocol: Local
Client Network Name:
Connect timestamp: 03-24-2004 16:53:00.020233
4) Connection Event
Appl Handle: 16
Appl Id: *LOCAL.DB
Appl Seq number: 0003
Record is the result of a flush: FALSE
Application Status: SQLM_UOWWAIT
Lock Statistics:
Lock Waits: 0
Total time waited _disibledevent=>
Deadlocks: 0
Lock escalations: 0
X lock escalations: 0
Lock timeouts: 0
Sort Statistics:
Sorts: 0
Total sort time (milliseconds): 0
Sort overflows: 0
Hash Statistics:
Hash Joins: 0
Hash Loops: 0
Hash Join Small Overflows: 0
Hash Join Overflows: 0
Buffer Pool Statistics:
Buffer pool logical data page reads: 12
Buffer pool physical data page reads: 4
Buffer pool data page writes: 0
Buffer pool logical index page reads: 30
Buffer pool physical index page reads: 18
Buffer pool index page writes: 0
Buffer pool read time (microseconds): 0
Buffer pool write time (microseconds): 0
Time spent waiting for a prefetch: 0 milliseconds
Unread prefetch pages: 0
Workspace Statistics:
Shared workspace high water mark: 0
Total shared workspace overflows: 0
Total shared workspace section lookups: 0
Total shared workspace section inserts: 0
Private workspace high water mark: 13746
Total private workspace overflows: 0
Total private workspace section lookups: 2
Total private workspace section inserts: 2
Direct I/O Statistics:
Sectors read directly: 14
Sectors written directly: 0
Direct read requests: 5
Direct write requests: 0
Direct read time: 0
Direct write time: 0
SQL Statement counts
Commit SQL statements: 1
Rollback SQL statements: 0
Dynamic SQL statements: 1
Static SQL stmts: 3
Failed SQL statements: 0
Select SQL statements: 2
Data Definition Language SQL statements: 0
Update/Insert/Delete SQL statements: 0
Internal counts
Internal auto rebinds: 0
Internal rows deleted: 0
Internal rows updated: 0
Internal rows inserted: 0
Internal commits: 0
Internal rollbacks: 0
Internal rollbacks due to deadlock: 0
Row counts
Rows deleted: 0
Rows inserted: 0
Rows updated: 0
Rows selected: 2
Rows read: 6
Rows written: 0
Binds/Precompiles: 0
Rejected block cursor requests: 0
Accepted block cursor requests: 0
Package Cache Statistics
Package Cache Lookups: 3
Package Cache Inserts: 2
Section Lookups: 3
Section Inserts: 2
Catalog Cache Statistics
Catalog Cache Overflows: 0
Catalog Cache High Water Mark: 0
Catalog Cache Lookups: 2
Catalog Cache Inserts: 0
CPU times
User CPU time: 0.000000 seconds
CPU time: 0.000000 seconds
Memory usage:
Memory Pool Type: Other Memory
Current size (s): 16384
High water mark (s): 98304
Maximum size allowed (s): 1071644672
Memory Pool Type: Application Heap
Current size (s): 212992
High water mark (s): 212992
Maximum size allowed (s): 1277952
Memory Pool Type: Application Control Heap
Current size (s): 16384
High water mark (s): 16384
Maximum size allowed (s): 704512
Disconnection Time: 03-24-2004 16:53:00.191692
最新评论