gpt4 book ai didi

MySQL:为什么 DELETE 比 INSERT 更占用 CPU?

转载 作者:可可西里 更新时间:2023-11-01 06:36:50 24 4
gpt4 key购买 nike

我目前正在大学学习“性能评估”类(class),我们正在做一项作业,测试 PHP 和 MySQL 数据库服务器上的 CPU 使用率。我们使用 httperf 创建自定义流量,使用 vmstat 跟踪服务器负载。我们正在运行 3000 个到 PHP 服务器的连接,用于 INSERT 和 DELETE(单独运行)。

数字显示 DELETE 操作比 INSERT 操作占用更多 CPU — 我只是想知道为什么?

我最初认为 INSERT 需要更多的 CPU 使用率,因为需要重新创建索引,需要将数据写入磁盘等。但显然我错了,我想知道是否有人可以告诉我技术原因为此。

最佳答案

至少使用 InnoDB(我希望他们在这上面有你),你有更多的操作即使没有外键。插页大致是这样的:

  1. 插入行
  2. 在二进制日志缓冲区中标记
  3. 标记提交

删除会执行以下操作:

  1. 标记行已删除(采用与插入相同的命中——页面被重写)
  2. 在二进制日志缓冲区中标记
  3. 标记为 promise
  4. 实际上去删除行,(与插入相同的命中——页面被重写)
  5. 清除线程也在二进制日志缓冲区中跟踪删除。

为此,您需要进行两倍的工作来删除而不是插入。删除需要这两次写入,因为它必须被标记为已删除,用于所有 future 版本,但只有在没有事务看到它时才能删除。因为 InnoDB 只将完整的 block 写入磁盘,所以 block 的修改惩罚是恒定的。

关于MySQL:为什么 DELETE 比 INSERT 更占用 CPU?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5033917/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com