jdbc autoReconnect=true 參數設置導致 slow log 爆表。


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/

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM