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

raj*_*ndy 5 php mysql zend-framework php-5.5

在单个 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;
}
Run Code Online (Sandbox Code Playgroud)

Dre*_*rew 6

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

查看您当前的尺寸:

SHOW VARIABLES LIKE "%innodb_log_buffer_size%";
Run Code Online (Sandbox Code Playgroud)

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

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

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

SHOW GLOBAL STATUS LIKE 'innodb_log_waits';
Run Code Online (Sandbox Code Playgroud)

  • 但你的建议只是提高了时间/性能。即使使用默认值,事务中可回滚的查询数量也没有限制。 (2认同)