单个 MySQL 或 MariaDB 事务中可以使用多少查询

How many queries can be used in a single MySQL or MariaDB transaction

单个 MySQL/MariaDB 事务中可以使用多少个查询?

一次交易中使用的查询数量是否有限制?目前我已经测试了一个大型 ZF1 项目,一个包含 175,000 多个查询的事务,并且它工作正常!

事务每月执行一次,但以后可以增加查询次数。

是否有查询数量限制,或者在增加事务量时是否有性能问题?

$db = Zend_Db_Table_Abstract::getDefaultAdapter();

// begin database transaction
$db->beginTransaction();

try {
    // here comes the bulk processing with insert, update and delete queries
    $this->monthlyBatchProcessing();

    // commit all changes
    $db->commit();
} catch (Exception $ex) {

    // rollback changes upon exception
    $db->rollBack();

    throw $ex;
}

请参阅 innodb_log_buffer_size 的手册页。该设置通常默认为 8M 或 16M。

查看您当前的尺码:

SHOW VARIABLES LIKE "%innodb_log_buffer_size%";

可以设置成国标范围。不利的一面是,它会占用系统内存。好处是在刷新到磁盘之前可以将更多内容挤入其中。因此磁盘 I/O 被推迟并以更大的块而不是更频繁的小块完成。

更高的值将提供更好的性能,与大文件副本的性能明显优于相同数据大小但超过 100 到 1000 个文件的性能没有区别。当然,这是一个主要的过度简化。事务仍然有 innodb 日志本身的开销来处理。

查看日志缓冲区被认为太小的次数("the number of times that buffer was flushed before proceeding"):

SHOW GLOBAL STATUS LIKE 'innodb_log_waits';