【问题标题】:How many queries can be used in a single MySQL or MariaDB transaction在单个 MySQL 或 MariaDB 事务中可以使用多少个查询
【发布时间】:2016-06-24 12:38:40
【问题描述】:

单个 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;
}

【问题讨论】:

  • 你的意思是 175,000+ 更新和插入。在过去的 18 年中,我从未见过一个项目在单个事务中具有如此多的查询。一定还有其他问题。
  • @BerndBuffen - 是的! 175,000 多个查询,包括插入、更新和删除。那么会有什么问题呢?
  • 您知道可以在查询中删除/更新或插入多行吗?对不起,我开发了很多大项目,我真的没有看到这么多的交易,我真的很抱歉

标签: php mysql zend-framework php-5.5


【解决方案1】:

请参阅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';

【讨论】:

  • 但是您的建议只是提高了时间/性能。即使使用默认值,事务中可以回滚的查询数量也没有限制。
猜你喜欢
  • 2018-08-30
  • 2012-08-30
  • 2011-06-01
  • 2012-08-26
  • 2021-02-28
  • 2017-08-31
  • 1970-01-01
  • 2017-10-05
  • 1970-01-01
相关资源
最近更新 更多