OneProxy :: For Oracle版本中间件初体验,透明SQL Spy助你快速了解应用

经过一年多的研究和开发,OneProxy for Oracle也取得了一定的进展,平民软件提倡边学边用和边用边学。现阶段的OneProxy for Oracle已支持OCI/JDBC 11g R2和Oracle 11g版本,但不支持Windows版本的Oracle服务器(这个不得不说Oracle的通信协议有些变态),而Oracle 11g应当都普及了吧!从功能上讲,现在是流量转发加上SQL、事务等的监控,虽然Oracle后端的SQL监控功能已经很丰富了,但OneProxy可以做基于客户端IP(应用程序)的Top SQL、可以抓取到会话和事务状态,可以呈现出和Oracle后端SQL监控不同的有用信息。

目前的使用方式非常简单,只需要用“backend”选项来指定后端Oracle服务器的IP地址和端口即可,如下所示:

D:\>oneproxy-for-oracle.exe backend=192.168.1.136:1521
OneProxy for Oracle(1.4.0.0929 Release), Build: 2016/09/29
(@) Copyright 2016 by OneXSoft, all rights reserved

...: Create the thread pool(size=8)...
...: Thread pool created
...: Startup paramters: backend=(192.168.1.136:1521) port=8221 monitor-port=8080 
...: Proxy started on port 8221. PID=6748

接下来就可以通过8221端口来连接Oracle了,则不是1521了,因此可以起到网络隔离作用。可以使用SQLcl工具来测试一下(需要将JDBC驱动替换为11.2.0.x版本),如下所示:

C:\sqlcl>bin\sql -S system/oracle@127.0.0.1:8221/ANYSQL

select * from t_mysql;

        ID       COL2
---------- ----------
         1         10
         2         10
         3          3
         4          2
         5          2
         6          6
         7          7
         8          8
         9          9

在执行如下几个SQL语句后:

select t1.col2, t2.col3 
     from t_mysql t1, t_mysql2 t2 
     where t1.id = t2.id(+);
select * from t_mysql;
select * from tab;

可以通过浏览器来访问OneProxy for Oracle所在机器的8080端口,查看SQL的执行信息。可以很方便地看到各个不同表的访问情况,如下图所示:

oneproxy_for_oracle_tabstats

2008年刚加入支付宝,就需要将一个用户下的800多个表做垂直拆分,非常需要这样的报表。对于高速发展的公司,求助于文档、代码和员工的Owner精神是不靠谱的,面临文档欠缺,员工换岗或离职频烦,找不到真正懂系统细节的人,当时也只能让年轻的DBA去人工分析Top 50 SQL来得到这样的报表,从而快速对整个系统大致的印象。在OneProxy里可以秒看全局的表使用情况,也可以秒看某个IP地址对表的访问情况,这个需求当时就很坑了,只能联合研发人员写Perl脚本去分析一大堆SQL Map文件,如果重新再来一次,坚决不用那么累,也不用那么多人力投入了!也可以显示SQL的统计信息,同样可以只查看某个客户端执行过的SQL语句,如下所示:

oneproxy_for_oracle_sqlstats

上面的信息都容易获得,为了减少拆分难度,需要分析哪些表会一起出现在事务中,当时真是伤了脑子。现在有了OneProxy for Oracle之后,就比较简单了,可以直接得到报表,同样可以看全局的,也可以只看某个IP地址过来的多表关联使用或多表事务使用的情况。如下所示:oneproxy_for_oracle_tablemap

其中“qry:”开头表示这两个表出现在同一个查询语句里了,而“trx:”开头表示这两个表出现在同一个事务中,这两种情况都是垂直拆分中必须考虑的情况,再结合前面第一个报表中的访问统计,就可以很容易得出可行的垂直拆分方案,并且评估出准确的工作量,因为OneProxy还能记录一个事务中具体的SQL语句,可以迅速确认事务拆分的工作量。还有一个客户端IP的访问统计,这里就不一一展示了。

由于OneProxy for Oracle采用了高性能的网络框架,加上平民软件工程师的精心优化,这些有用的报表可以做到秒级刷新,相当于部份应用指标的实时监控了,现在想想当年要是有OneProxy for Oracle可用,生活会多美好,头发会少掉多少根。欢迎广大DBA和架构试用OneProxy for Oracle!