1、配置参数

 

statDir=/mppdata/test                      //日志输出目录,windows为:d:/test
statEnable=true              //是否启用监控true/false,默认false;
statFlushFreq=10                             //状态统计信息刷盘时间,单位s;默认10s,有效范围(>0)
statSlowSqlCount=100             //打印慢sql top行数,默认100,有效范围(0-1000)
statHighFreqSqlCount=100  //打印高频sql top行数,默认100,有效范围(0-1000)
statMaxSqlCount=100000      //最多能统计的不同sql的个数,默认10万,有效范围(0-10万)

statSqlRemoveMode=latest    //执行的sql数超过statMaxSqlCount值时,sql的淘汰算法;latest:淘汰最近执行的sql;eldest淘汰最老的sql;

 

注:以上配置参数是在JDBC的URL连接串中配置,也可以在dm_svc.conf文件中配置,格式如下:

STAT_ENABLE=(1)
STAT_DIR=(/mppdata/ybl/jdbclog)         ##windows格式d:\\jdbclog
STAT_FLUSH_FREQ=(120)
STAT_SLOW_SQL_COUNT=(10)
STAT_HIGH_FREQ_SQL_COUNT=(10)
STAT_MAX_SQL_COUNT=(10000)
STAT_SQL_REMOVE_MODE=(ELDEST)

 

2、输出到监控文件使用测试

 

以100库的benchmarksql tpcc测试为例,配置props.dm:

driver=dm.jdbc.driver.DmDriver
conn=jdbc:dm://223.254.17.235:5239?statEnable=true&statDir=/mppdata/ybl/jdbclog&statFlushFreq=120&statSlowSqlCount=10&statHighFreqSqlCount=10&statMaxSqlCount=10000&statSqlRemoveMode=eldest
user=BENCHMARKSQL
password=123456789
 
warehouses=100
terminals=10
//To run specified transactions per terminal- runMins mustequal zero
runTxnsPerTerminal=0
//To run for specified minutes- runTxnsPerTerminal mustequal zero
runMins=5
//Number of total transactions per minute
limitTxnsPerMin=0
 
//The following five values must add up to 100
newOrderWeight=45
paymentWeight=43
orderStatusWeight=4
deliveryWeight=4
stockLevelWeight=4

 

benchmarksql测试执行完成后,在/mppdata/ybl/jdbclog目录下生成dm_jdbc_stat_<日期>.log的监控日志文件,文件内容为每隔2分钟刷盘一次,记录包含三部分内容:连接信息、top指定行数的高频sql信息、top指定行数的慢sql信息。生成的日志文件片段如下所示:

 

达梦数据库RECORD类型 达梦数据库 jdbc_bc

达梦数据库RECORD类型 达梦数据库 jdbc_sql_02

 

注:对比同等配置情况下,获取到的logcommit日志,并进行日志分析,得出的高频SQL和慢SQL语句与JDBC监控日志获取信息一致。

 

连接信息:

{
        ID                   连接的url
        ActiveConnCount              活动连接数
         MaxActiveConnCount达到过的最大活动连接数
        ActiveStmtCount               活动句柄数
        MaxActiveStmtCount      达到过的最大活动句柄数
        ExecuteCount                    执行次量
        ErrorCount                                   执行出错次数
        CommitCount                    提交次数
        RollbackCount                    回滚次数
}
 
sql语句信息:
{
        ID                                                   sql编号
        SQL                                                sql语句
        ExecCount                                    执行次数
        ExecTime                             执行时间总和
        ExecMax                                       最长执行时间
         Txn                                                  在事务中执行的次数(非自动提交)
        Error                                              出错次数
        Update                                          更新行数总和
        FetchRow                                     获取行数总和
        Running                                         正在执行数
        Concurrent                                   最大并发数
        ExecHisto                                     执行时间分布
        ExecRsHisto                       执行+结果集获取时间和的分布
         FetchRowHisto                           结果集获取行数分布
        UpdateHisto                       更新行数分布
}

 

         ExecHisto是一个长度为8的数组,每个元素表示执行时间在相应区间内的次数,区间如下,单位ms:

0-1;
         1-10;
         10-100;
         100-1000;
         1000-10000;
         10000-100000;
         100000-1000000;
         1000000以上;

 

         ExecRsHisto区间与ExecHisto相同;

 

         FetchRowHisto是一个长度为6的数组,每个元素表示结果集获取行数在相应区间内的次数,区间如下:

0-1;
         1-10;
         10-100;
         100-1000;
         1000-10000;
         10000以上;

 

         UpdateHisto区间与FetchRowHisto相同;

 

3. WEB应用集成监控测试

 

图形化界面查看监控结果需要在已有的Web应用中配置:

1.连接串配置属性:

statEnable=true              //是否启用监控true/false,默认false;
statFlushFreq=10            //状态统计信息页面刷新频率,单位s;默认10s,有效范围(>0)
statMaxSqlCount=100000      //最多能统计的不同sql的个数,默认10万,有效范围(0-10万)
statSqlRemoveMode=latest    //执行的sql数超过statMaxSqlCount值时,sql的淘汰算法;latest:淘汰最近执行的sql;eldest淘汰最老的sql;

以上连接串配置属性也可以在dm_svc.conf中配置:

STAT_ENABLE=(1)
STAT_DIR=(d:\\jdbclog)   #若不配置此项就不会输出日志文件,只在web页面显示监控结果
STAT_FLUSH_FREQ=(10)
STAT_SLOW_SQL_COUNT=(10)
STAT_HIGH_FREQ_SQL_COUNT=(10)
STAT_MAX_SQL_COUNT=(10000)
STAT_SQL_REMOVE_MODE=(ELDEST)
 
2.在web应用中配置servlet,如下:
    <servlet>
       <servlet-name>DmJdbcStatServlet</servlet-name>
       <servlet-class>dm.jdbc.stat.support.StatViewServlet  </servlet-class>
    </servlet>
    <servlet-mapping>
       <servlet-name>DmJdbcStatServlet</servlet-name>
       <url-pattern>/dmjdbc/*</url-pattern>
    </servlet-mapping>

3.启动web应用

4.用浏览器访问页面“<应用服务器地址>/dmjdbc/”即可进入监控页面。

注:这里使用2016年DM7自带的web示例项目进行配置,查看web页面监控结果如下:

首页----显示JDBC驱动基本信息:

 

达梦数据库RECORD类型 达梦数据库 jdbc_sql_03

 

数据源----显示JDBC连接数据的信息

 

达梦数据库RECORD类型 达梦数据库 jdbc_达梦数据库RECORD类型_04

 

SQL监控-------显示具体监控信息

 

达梦数据库RECORD类型 达梦数据库 jdbc_sql_05

 

点击具体的SQL语句,会显示该SQL的详细监控信息:

 

达梦数据库RECORD类型 达梦数据库 jdbc_sql_06

达梦数据库RECORD类型 达梦数据库 jdbc_SQL_07

 

4、性能影响测试对比

 

在100库benchmarksql tpcc环境下,配置100并发,执行五分钟的测试,分别在无任何日志监控、仅有JDBC监控、同步SQL日志监控、异步SQL日志监控情况下,测试结果:

分类

无日志监控

JDBC监控

同步SQL日志

异步SQL日志

tpmC (NewOrders)

20016.04

19105.81

3602.17

19591.1

tpmTOTAL

44471.57

42471.43

7999.54

43433.74

Active-Warehouse

100

100

100

100

Terminals-Per-Warehouse

100

100

100

100

测试总运行时间

5分钟

5分钟

5分钟

5分钟

性能下降比率

 

下降5%

下降80%

下降3%

 

从以上结果得出,使用JDBC监控日志对性能无影响,但是在开启同步SQL日志情况比不开启日志性能下降很明显。其他几种日志监控情况相差不大。

注:

1、同步SQL日志监控,即在dm.ini中开启

SVR_LOG                        =  1

2、异步SQL日志监控,即在dm.ini中开启

SVR_LOG                        =  1

SVR_LOG_ASYNC_FLUSH=1

在sqllog.ini中开启:

ASYNC_FLUSH  = 1