从零写一个兼容MySQL/Oracle的Proxy中件间(四):性能测试和改进

续: 从零写一个兼容MySQL/Oracle的Proxy中件间(一)《初识Oracle的通信协议》 从零写一个兼容MySQL/Oracle的Proxy中件间(二):SQL捕获和改写 从零写一个兼容MySQL/Oracle的Proxy中件间(三):MySQL协议捕获和转发

1.过去的三个文章我们实现了以下功能]

在没更新的这几天里我又偷偷完成了配置变更等小功能。现在中件间其实已经在理论上可以发布使用了

在投入使用前,在测试环境对这个半成品的中件间做了些基准测试。

在测试环境上生成了5张表,每张表200万行数据,对其进行直连和proxy模式压测。

以下是测试报告: dboop数据库proxy测试报告

结论是:加了Proxy,性能下降了14% ,在情理之中,一般的SQL中间层因为多了层中转,响应时间会降低20ms左右。tps/qps在不做连接池的情况下会下降10%。

分析性能下降的原因:

因为在proxy存把经过的网络包都拆开来分析其中的内容,且把SQL语句存在日志里,这些步骤是比较费资源和时间的。

为了提升Proxy性能,降低中间层的性能影响,我们加了个配置参数

cat /data/proxy/conf/proxy3308.cnf
[basic]
logfile = /data/proxy/log/3308.log
daemon = true

[proxy]
proxytype = mysql
bind = 0.0.0.0:3308
server = 127.0.0.2:3308
isssl = false
iscatchquery = false  #增加是否“拆包” false时,Proxy进入高性能模式
iscatchlogin = false
maxsquerylsize = 16384

iscatchquery=false时,Proxy进入高性能模式

if Iscatchquery {
    #只有iscatchquery为true时才解析包。
    switch ProxyType {
    case "mysql":
      log.Printf("mysql:sqlPipeMySQL\n")
      sqlPipeMySQL(srcCon, dstCon)
    case "oracle":
      log.Printf("oracle:sqlPipeOracle\n")
      sqlPipeOracle(srcCon, dstCon)
    }
  } else {
    sqlPipeAuto(srcCon, dstCon)
  }

修改配置,让proxy处于高性能模式,继续压测,结果如下: dboop数据库proxy测试报告

结论:在低并发时性能有所下降,在高并发时SQL响应时间会减少,性能超过了直连数据库。(为了确认这个结果,做了7,8次类似的压测,结果一致)

在高性能模式下,Proxy和直连数据库相比性能下降不明显,在SQL日志捕获模式下,Proxy和直连数据库有14%的性能损失。

>> Home

51ak

2022/01/18

Categories: mysql oracle proxy 数据库代理 Tags: 原创 精品

《数据库工作笔记》公众号
扫描上面的二维码,关注我的《数据库工作笔记》公众号