JMeter Groovy SQL 批量更新很慢
JMeter Groovy SQL Batch Update very slow
您好,我正在尝试从数据库中的数据集中更新多个 MYSQL 表。我正在使用批处理更新 3 个表,如果我更新一行它工作正常并在 1-2 秒内更新所有 3 个表中的记录但是如果我获取 3 个记录并更新然后突然它可能需要 13-25 秒。我已经尝试了很多方法,只是没能让它运行得更快
这是我在 JSR223 后处理器中的代码
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 Table 结构不是最好的,但这是我的内部要求。
我设法通过调整几个 my.ini 设置来提高性能
主要是innodb_buffer_pool_size=2G以前是什么记不得了,改成2G后性能提升很大
谢谢
您好,我正在尝试从数据库中的数据集中更新多个 MYSQL 表。我正在使用批处理更新 3 个表,如果我更新一行它工作正常并在 1-2 秒内更新所有 3 个表中的记录但是如果我获取 3 个记录并更新然后突然它可能需要 13-25 秒。我已经尝试了很多方法,只是没能让它运行得更快
这是我在 JSR223 后处理器中的代码
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 Table 结构不是最好的,但这是我的内部要求。
我设法通过调整几个 my.ini 设置来提高性能
主要是innodb_buffer_pool_size=2G以前是什么记不得了,改成2G后性能提升很大
谢谢