ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 关于开发基于OWI的性能诊断监视工具的构思

关于开发基于OWI的性能诊断监视工具的构思

原创 Linux操作系统 作者:红叶DBA 时间:2011-02-28 13:45:21 0 删除 编辑

关于开发基于OWI的性能诊断监视工具的构思

想法1(动态数据):
v$session_wait是OWI收集监控信息最好的视图,该视图数据动态存储在内存,读取速度快,更新频率高,对故障的判断有很高的参考价值。
需要收集的信息有:sid、seq#、event、p1、p2、p3、wait_class#、wait_time、seconds_in_wait、state。
收集的时候使用wait_class#=条件过滤,去掉空闲等待。
对于每一个等待事件,都要收集相关的SQL语句,收集到的SQL语句单独存储(不存储相同的SQL)。
显示总等待事件数目的动态趋势图,其刷新频率为静态数据(可更改)。

想法2(静态数据):
将event、p1text、p2text、p3text、wait_class#、wait_class这些静态信息预存储在程序端,避免每次的读取。
在程序端设置对象信息(dba_segments)缓存,每30分钟或1小时更新一次,或者手动更新。
可以在程序运行过程中添加需要监控的等待事件,但是需要提供相关信息收集方式的SQL语句。
设置配置文件用于参数的配置,其中收集的频率也就等于等待事件趋势图的刷新频率。
在每个事件上追加时间戳,用于特定事件的性能判断。

想法3(数据处理):
在本地缓存每次读取的数据:
第一次读取时完全缓存在本地,不做归档;
读取记录时,比较其和前一次数据的关系:如果等待相同,则更新等待时间,不同则归档历史数据,并填充新数据。
若上一次的某个会话信息在本次没有收集到,表示会话可能已经断开连接,则归档相关会话的信息。

想法4(数据归档):
使用写入文本文件的方式归档,其命名规则按照sid和seq#进行组合,其内记录相关会话的等待事件。
如果存在重名文件,则按照sid、seq#和当前时间(主要是提供唯一名称)的组合作为文件名。
SQL语句归档在一个单独的文件中,每次有新语句的时候追加写入。

想法5(预警通知):
在等待同一事件达到一定阈值(例:次数、时间)的时候发出声音警告,并弹出相关信息窗口。
在数据库连接被断开的时候声音警告,并弹出登录窗口,显示断开时间。
在归档目录的空间不足时声音警告,并有相关的信息提示窗口。


软件设计:

信息来源:
v$session_wait:sid、seq#、event、p1、p2、p3、wait_class#、wait_time、seconds_in_wait、state;
dba_segments:owner、segment_name、segment_type、tablespace_name、header_file、header_block、blocks;
v$sql:sql_fulltext、sql_id、hash_value、sorts、loaded_versions、open_versions、fetches、executions、loads、disk_reads、buffer_gets、parse_calls、child_number、last_load_time、sql_type
v$session:sid、serial#、username、osuser、terminal、program、、sql_address、sql_hash_value、sql_id、sql_child_number、logon_time、client_identifier、还有包含v$session_wait的信息。

目录结构:
/data/archived/ 保存已经归档的数据;
/data/deleted/ 保存即将删除的数据;
/data/statics/ 保存静态程序文件;
/data/sql/ 保存SQL文本数据;
/configuration/ 保存程序配置文件;

菜单选项:
1、程序文件 --> 打开configure、打开SQL、打开会话历史、退出
2、数据查看 --> 监控数据中心、对象数据、事件数据、分类数据
3、等待分析 --> 控制中心、事件分析、会话分析、异常SQL分析、等待趋势图
4、配置 --> 参数设置、对象同步、等待同步、文件转移、登录、注销

代码相关:
1、线程类 WaitCollect.java 负责收集等待(包括SQL语句);
2、线程类 AutoSYNC.java 负责同步程序静态数据,需要传入参数:objects、event、all;
3、线程类 DataOperator.java 负责数据归档和删除;
4、类 ManualSYNC.java 负责手动的数据同步;
5、类 Config.java 负责配置的修改,并保存参数数据,静态类,程序在生命周期内只有一个配置参数;
6、类 DBRebort.java 负责数据库操作,做成静态类,程序在其生命周期内只有一个连接;
7、类 FileRebort.java 负责文件读写操作;
8、程序在运行期间,锁定相关的文件;
9、在程序启动时,检查configuration文件夹下是否存在配置文件,若有则询问是否以此配置文件启动(可在配置选项中设置不询问,不询问则要么始终以最新配置启动,要么始终以default配置启动)
10、程序启动后,立即检查data下面的相关目录,如果有文件存在,询问是否保留,若保留,则锁定文件,否则删除所有文件,然后开始新的事件收集;
11、SQL缓存采取循环链表(使用map,依据SQL的hash value去匹配SQL)的方式,可在配置中设置缓存SQL数目,超过数目的SQL语句写入到SQL文件中,设置hash表,记录每个SQL语句的使用频率,频率低的预先写入文件;
12、数据对象采用二维数组保存,一直驻留内存(设计排序算法,对此数据进行排序),只在一定时间(可以在配置文件中设置,默认30min)间隔从数据库同步,并写入对象文件;
13、等待事件的处理方式和数据对象类似;

view00.jpg

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24465008/viewspace-688103/,如需转载,请注明出处,否则将追究法律责任。

下一篇: 层次查询 小实验
请登录后发表评论 登录
全部评论

注册时间:2010-08-19

  • 博文量
    54
  • 访问量
    70925