嗨,我正在尝试从DB中的数据集更新多个MYSQL表。我使用批处理更新3个表。如果我更新一行,它可以很好地工作,并在1-2秒内更新所有3个表中的记录,但如果我获取3个记录并更新,那么突然之间可能需要13-25秒。我尝试了很多东西,但不知怎么的,没能让它更快地工作
这是我在JSR223 PostProcessor 中的代码
import groovy.sql.Sql;
import groovy.sql.*
import java.sql.ResultSet;
def dburl = 'jdbc:mysql://${__P(${env}_host)}:${__P(${env}_port)}/${__P(${env}_db)}?verifyServerCertificate=false&requireSSL=false&useSSL=false&useServerPrepStmts=false&rewriteBatchedStatements=true'
def user = '${__P(${env}_username)}'
def password = '${__P(${env}_password)}'
def driver = '${__P(${env}_driver)}'
def sql = Sql.newInstance(dburl, user, password, driver)
sql.connection.autoCommit = false
if(vars.getObject("resultSet").size() != 0) {
ArrayList results = vars.getObject("resultSet");
sql.withBatch
{ stmt ->
results.each
{
rs ->
stmt.addBatch("""UPDATE Table1 SET column1 = '${rs.column1}'
WHERE column2 = ${rs.column2}""")
stmt.addBatch("""UPDATE Table2 SET column1 = '${rs.column1}'
WHERE column2 = ${rs.column2}""")
stmt.addBatch("""UPDATE Table3 SET column1 = '${rs.column1}'
WHERE column2 = ${rs.column2}""")
}
stmt.executeBatch();
}
log.info("End")
}
sql.commit()
感谢
谢谢大家。我知道DB表结构不是最好的,但这是我的内部要求,让它成为这样。
我设法通过调整几个my.ini设置来提高性能
主要是innodb_buffer_pool_size=2G我不记得以前是什么了,但在改为2G后性能大大提高。
感谢