我正在尝试用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有关而被调整呢?
发布于 2014-10-20 13:39:29
询问之后,问题似乎是XtraBackup在数据库服务器上施加的压力。虽然XtraBackup没有对所有的InnoDB数据库使用锁定,但它仍然给系统带来了压力。从文件中
“虽然innobackupex不会阻止数据库的操作,但任何备份都会给正在备份的系统增加负载。在没有足够的I/O能力的系统上,控制innobackupex读取和写入InnoDB数据的速度可能会有所帮助。您可以使用节流选项来实现这一点。”
我们最后只是跳到maxActive,而不是选择节流在此时。当XtraBackup最初运行时,查询就足以减缓数据库的速度,导致线程池达到最大值。添加更高级别的maxActive连接使XtraBackup能够运行,而无需使连接池达到最大值。
关闭innodb-stats-on-metadata似乎也有助于加速SHOW TABLE STATUS查询,从而进一步降低了DB的压力。
这是一种特殊的情况,但希望这对处于同样情况的任何人都有帮助。
https://stackoverflow.com/questions/26317727
复制相似问题