My Life My Dream!

守信 求实 好学 力行
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

DB SQL Monitor 会话状态及等待事件监控工具

Posted on 2016-03-24 19:29  召冠  阅读(4343)  评论(0编辑  收藏  举报

DB SQL Monitor v1.7.6

      Designed by Wang Zhaoguan

 

工具说明
------------------------------------------------------------------------------------
      从会话状态和等待事件的角度,了解数据库的运行情况,供DBA和开发人员分析优化做参考

      等待事件是基于“事实”和“数据”的,而非“推测”,结合Oracle AWR、ASH(Sqlserver DMV、Windows计数器),我们可以把性能分析变为可能的方法论。

 

依赖要求
------------------------------------------------------------------------------------
      WinXP/Vista/Win7/Win8/Win10/Windows Server(2003/2008/2012/2016)
      Microsoft .NET Framework 4.0
      SQL Server 2005 或更高版本 ServerAdmin 或 SysAdmin 角色,例如sa账户
      Oracle 10g 或更高版本 Select Any Dictionary 和 Alter System 权限,例如system

 

注意事项
------------------------------------------------------------------------------------
      1、连接Oracle数据库,不依赖于Oracle客户端,请使用EZCONNECT方式连接(即IP/SID),例如192.168.1.1/fsdb
      2、除非特殊需要,请不要选择“KILL阻塞者”(勾选此选项,工具会杀掉阻塞源头对应的会话)
      3、点击“监控”按钮后,工具会自动根据设置规则生成日志,一般不需要干扰其工作,分析工具产生的日志即可
      4、缺省配置超出10000条记录,会自动转储为Excel文件,一般不要取消“自动转储日志”(取消此选项后如果长时间没有清空或保存日志,会造成工具内存占用累增)
      5、点击窗口关闭按钮时,工具会最小化到任务栏继续运行。如果确实要关闭跟踪,请右键任务栏工具图标,选择退出。
      6、工具为Winform程序,选择跟踪时请不要注销当前windows用户,这样会强制关闭此程序。

 

下载地址

      https://files.cnblogs.com/files/zhaoguan_wang/DBSQLMonitor_v1.7.6.zip

 

工具截图

image

image

image

 

核心SQL如下:

--Oracle 
SELECT t.SID, t.SERIAL#, t.STATUS, t.EVENT, t.BLOCKING_SESSION, t.BLOCKING_SESSION_STATUS, t.USERNAME, t.MACHINE, t.PROGRAM, t.PROCESS
     , t.SECONDS_IN_WAIT, t.P1TEXT, t.P2TEXT, t.P3TEXT, t.P1, t.P2, t.P3
     , NVL(s1.SQL_ID, s2.SQL_ID) AS SQL_ID, NVL(s1.SQL_TEXT, s2.SQL_TEXT) AS SQL_TEXT
FROM V$SESSION t
    LEFT JOIN V$SQL s1 ON t.SQL_ID = s1.SQL_ID AND t.SQL_CHILD_NUMBER = s1.CHILD_NUMBER
    LEFT JOIN V$SQL s2 ON t.PREV_SQL_ID = s2.SQL_ID AND t.PREV_CHILD_NUMBER = s2.CHILD_NUMBER
WHERE t.TYPE = 'USER' AND t.SID != USERENV('SID')

--Sqlserver
select t.spid, t.kpid, t.blocked, t.status, t.lastwaittype, t.waitresource, t.waittime/1000 AS waittime, t.last_batch
     , DB_NAME(t.dbid) DbName, t.loginame, t.program_name, t.hostname, t.hostprocess, t.cmd, dc.text
from master.sys.sysprocesses t 
    outer apply master.sys.dm_exec_sql_text(t.sql_handle) dc
where t.spid >= 50 and t.spid != @@SPID

 

更新日志

------------------------------------------------------------------------------------

Updated 2017.04.05 v1.7.6
增加“停止时间”,缺省为当前日期后14天
将清空功能改为列表控件的右键操作
列表控件中选择若干行数据时,可以按Ctrl+C复制选中的内容到剪贴板
保存日志时,按照日期创建日志目录文件夹,触发转储的日志条数调整为10000

 

Updated 2017.03.23 v1.7.5
增加remarks列,Oracle数据库对应的是sql_id信息,sqlserver数据库对应的cmd
数据库连接信息界面禁用输入法,避免每次打开或修改时因当前输入为中文等需要更改输入法

 

Updated 2017.03.21 v1.7.4

修复登录时检查Oracle账户权限不准确的问题。
要求的Oracle用户权限为select any Dictionary 和 alter system


Updated 2017.02.24 v1.7.3
修复因并行执行、RAC节点间阻塞或系统任务阻塞造成工具报错的情况
1、Sequence contains more than one matching element
2、Sequence contains no matching element

Updated 2017.02.20 v1.7.0
修复另存为Excel 时,如果文本内容过长,出现超出32K限制的错误

Updated 2017.02.15 v1.6.5
修复监控阻塞信息时,输出了所有会话的列表
自动转储的最大行数更改为5000,减少工具的内存占用

Updated 2017.01.20 v1.6
增加等待事件和对应的资源参数,应用服务器、应用进程名称和进程ID
保存为Excel文件方便查看、筛选、排序

 

Created 2016.04.08 v1.5
SQL阻塞监控
阻塞时间的自定义设置,包含会话状态和SQL脚本信息
支持Oracle数据库(不依赖于Oracle客户端)
自动生成监控的文本日志

 

 

Demo扩展

====================================================================================

扩展数据库平台的实现
      实现SQLMonitor.SPI定义的服务接口
      将新的实现注册到[setting.xml]文件: 增加一个 name="XX数据库平台" type="扩展实现类的完整命名, 扩展实现类所在的程序集"

扩展多语言支持
      增加新的Resource资源
      将新的语言注册到[setting.xml]文件: 增加一个 name="xx语种区域" display="语言显示名称"

下载

      https://files.cnblogs.com/files/zhaoguan_wang/SQLMonitorV1.9.zip

 

TestSQL

      测试Oracle数据库的连通性,当前运行环境下不同连接方式的响应性能差异
      System.Data.OracleClient .NET Framework为Oracle提供的缺省ADO.NET实现
      Oracle.DataAccess.Client Oracle提供的官方ADO.NET适配(ODP.NET)
      Oracle.ManagedDataAccess Oracle提供的全托管ADO.NET适配,不依赖于Oracle的非托管客户端
      Devart.Data.Oracle 第三方开发商Devart提供的全托管提供的全托管ADO.NET适配
      测试微软缺省实现的bug,例如偶发的两条数据,转换到DataSet/DataTable或DataReader读取时,行数翻倍的情况