我正在尝试使用XtraBackup在生产数据库上构建托管备份方案。
根据我们的DBA,XtraBackup不会锁定数据库,但会发出一系列SHOW TABLE STATUS
命令,然后在文件系统级别上运行。
然而,正如XtraBackup运行我的日志开始爆炸时出现连接池错误:
Error getting database connection:[http-nio-8080-exec-5] Timeout: Pool empty. Unable to fetch a connection in 10 seconds, none available[size:100; busy:100; idle:0; lastwait:10000].
有一些建议说关闭innodb-stats-on-metadata
可能会有所帮助,所以我们正在尝试这样做。
同时我想确认我的连接池设置是否正常:
<Resource name="jdbc/mydatabase_master"
auth="Container"
type="javax.sql.DataSource"
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
testWhileIdle="true"
testOnBorrow="true"
testOnReturn="false"
validationQuery="SELECT 1"
validationInterval="30000"
timeBetweenEvictionRunsMillis="30000"
maxActive="100"
minIdle="10"
maxWait="10000"
initialSize="10"
removeAbandonedTimeout="60"
removeAbandoned="true"
minEvictableIdleTimeMillis="30000"
jdbcInterceptors="org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;
org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer"
username="db_user"
password="mypassword"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://my.ip:3306/my_database"
/>
对于除备份之外的所有内容,此配置非常有效。在大多数流量下,连接池大小在initialSize
附近徘徊。似乎设置maxActive
更高只会在池中生成挂起的新连接。
其他任何东西似乎都可以根据XtraBackup进行调整?
答案 0 :(得分:0)
在询问之后,看起来问题是XtraBackup在数据库服务器上的压力。虽然XtraBackup并没有在所有InnoDB数据库上使用锁定,但它仍然给系统带来了压力。从文档
&#34;虽然innobackupex不会阻止数据库的操作,但任何操作都是如此 备份可以为正在备份的系统添加负载。在那些做的系统上 没有太多的备用I / O容量,它可能有助于节流 innobackupex读取和写入InnoDB数据的速率。你可以做 这与--throttle选项。&#34;
我们最终只是碰到了maxActive,而不是选择此时的限制。当XtraBackup最初运行时,查询足以减慢数据库速度,导致线程池最大化。添加更高级别的maxActive连接允许XtraBackup在不增加连接池的情况下运行。
似乎将innodb-stats-on-metadata
转为OFF有助于加快SHOW TABLE STATUS
查询速度,进一步降低数据库的压力。
某种特殊情况,但希望如果他们处于相同的情况,这将有助于任何人。