【问题标题】:Disable BEGIN/COMMIT when using mysqli使用 mysqli 时禁用 BEGIN/COMMIT
【发布时间】:2014-09-11 07:35:09
【问题描述】:

我有一个应用程序从主机获取心跳(一个简单的 http 请求),通常主机每 x 分钟生成一个请求。这会导致大量完全独立的 php 页面运行,这些页面执行读取查询,然后(可能)向 RDS 数据库生成一个单行插入,如果它成功并不重要(错过一个节拍不是原因警报,有几个)

但是,使用 mysqli,我在 IOP 上的开销很大——它发送一个 BEGIN、我的单行插入,然后是一个 COMMIT——因此似乎使用了三个 IOP,而我只需要一个。

有没有办法完全避免交易?我可以更改 auto_commit,但它没有用,因为处理程序的每次运行都是独立的,因此没有其他插入可以与此组合。即使关闭 auto_commit 仍然会运行一个事务,但只会在连接关闭时结束它(无论如何都会在一次插入之后发生。)

或者我应该切换到原始 mysql 处理以提高效率(大量工作)?旧的 mysql php 库(已弃用)?还有什么?

【问题讨论】:

    标签: php mysql performance mysqli transactions


    【解决方案1】:

    如果您真的不需要事务,您可以为不支持事务的表使用 MyISAM 存储引擎。

    我总是用:

    SET AUTOCOMMIT=1
    

    对于我不需要在连接到数据库后使用事务的 InnoDB 数据库。

    【讨论】:

    • 我已将我的 RDS 表切换到 MyISAM,只要 mysqli 意识到并且不发送无意义的 BEGIN/COMMIT 事务,它就应该可以工作。我将监视并查看 a) 是否有效并且 b) 是否降低 IOP。自动提交不是这里的答案,因为它无论如何都会运行命令,而不是等到它们显式运行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-17
    • 1970-01-01
    • 2012-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多