jdbc autoReconnect=true 引數設定導致 slow log 爆表。

流水無情88發表於2016-11-15

1.過程

同事按照文件上配置了下面的jdbc url:

jdbc:mysql://ip:port/db?autoReconnect=true&useUnicode=true&characterEncoding=utf-8

  

結果導致了 mysql slow log 出現了滿屏的 ping 命令,

# User@Host: db[db] @  [ip]
# Query_time: 0.000017  Lock_time: 0.000000 Rows_sent: 0  Rows_examined: 0 Logical_reads: 0 Physical_reads: 0
SET timestamp=1456991083;
# administrator command: Ping;

  

$ ll -h mysqlslow20161115.log
-rw-rw---- 1 dba dba 58G Nov 15 14:17 mysqlslow20161115.log

 

最後我找到其他同事詢問他們怎麼配置的,為什麼他們的業務沒有生成這麼多日誌呢?最後對比以後發現,其他同事配置了  dbcp  框架,通過dbcp 框架來提供連線池。

 

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="${jdbc.driverClassName}" />
        <property name="url" value="${jdbc.url}" />
        <property name="username" value="${jdbc.user}" />
        <property name="password" value="${jdbc.password}" />
        <property name="maxActive" value="200" />
        <property name="maxIdle" value="30" />
        <property name="maxWait" value="500" />
        <property name="defaultAutoCommit" value="true" />
        <property name="minEvictableIdleTimeMillis" value="3600000" />
        <property name="timeBetweenEvictionRunsMillis" value="600000" />
    </bean>

其中 jdbc.url  引數和前面一個同事麼有區別(ip port db 除外)。

 

最後解決辦法:

考慮到再讓他們加框架比較費勁,就讓開發把   autoReconnect=true 取消掉了。tail -f mysqlslow.log 沒有發現新增的了。看來裸加一個 autoReconnect 還是很不靠譜的。最後推薦一篇我搜尋時候找到的一篇連線:https://www.percona.com/blog/2010/05/05/checking-for-a-live-database-connection-considered-harmful/

 

  

 

相關文章