MySQL中的“START TRANSACTION”导致连接超时

罗纳克·帕特尔

我有一个调用的功能clone,我必须将数百万条记录从一个项目复制到另一个项目(多个表)。为此,我使用MySQL.

DROP PROCEDURE IF EXISTS `clone_new`;
DELIMITER $$

CREATE PROCEDURE `clone_new`(
BEGIN
    DECLARE EXIT HANDLER FOR SQLEXCEPTION
  BEGIN
    SHOW ERRORS;
  ROLLBACK;
END;
START TRANSACTION;

INSERT INTO XXX SELECT * FROM XXXX ....
.....
.....

COMMIT;
    END $$

DELIMITER ;

这里的问题是没有START TRANSACTION;插入发生得非常慢,但是由于START TRANSACTION; MySQL在该事务完成之前对该表放置了一个锁。Connection Timeout对其他客户造成了影响。

START TRANSACTION; 如果发生任何错误,则需要进行回滚。

我该怎么做才能在不影响其他用户的情况下获得性能?

注意:我们正在使用innodb表格。

罗纳克·帕特尔

我通过改变解决这一问题Isolation Level,从REPEATABLE READREAD COMMITTED

我找到了这个文档。

REPEATABLE READ事务期间获得的每个锁在事务期间都被持有。

完成READ COMMITTED后释放与扫描不匹配的锁STATEMENT

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章