在单个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%";

可设置为GB范围。缺点是,它占用了系统内存。这样做的好处是,在它被刷新到磁盘之前,可以将更多的内容压缩到其中。因此,磁盘I/O被延迟并在更大的块中完成,而不是在更频繁的小块中完成。

值越高,性能越好,这与大文件副本的性能比相同数据大小但超过100到1000个文件的性能要好得多没有什么不同。当然,这是对它的一种过度简化。事务仍然有innodb日志本身的开销需要处理。

查看日志缓冲区被认为太小的次数("缓冲区在继续之前被刷新的次数"):

SHOW GLOBAL STATUS LIKE 'innodb_log_waits';