database - 数据库中的 CPU 利用率实际上意味着什么?

标签 database performance postgresql cpu-usage

我运行了两种查询,

1.特意引入了一个查询,用于在大约 10 列中执行排序(order by)。这会使用 CPU,因为排序是 CPU 密集型操作。

该场景涉及运行查询,该查询花费了 30 秒,并在 100 个不同的表上使用同时连接运行了大约 100 个查询。32 核计算机上的 CPU 使用率在所有 32 个核上约为 85%,并且所有 100 个查询都是并行运行的。

2.在表中插入一百万行。

我不明白为什么这会消耗CPU,因为这纯粹是磁盘I/O。但是我使用100个并发连接/线程在单个表上插入了100万行,并且这些表上没有索引,现在插入不是加载数据最快的方法,但这里的重点是它在大约 10 个核心上消耗了大约 32% 的 CPU 时间。这比上面的要少得多,但我仍然只是好奇。

我可能是错的,因为 Wal 归档已打开并且查询日志已打开 - 这是否对 CPU 有影响。我假设不会,因为这些也是磁盘 IO。

除了 postgres 之外,该计算机上没有运行/安装其他进程/应用程序。

最佳答案

许多不同的事情:

  • 用于查询规划的 CPU 时间以及用于查询执行的执行器中的逻辑
  • 将元组的文本表示形式转换为其磁盘上的格式。解析日期等等。
  • 日志输出
  • 处理事务日志
  • 插入要写入的页面时写入shared_buffers,扫描shard_buffers以获取要写出的页面
  • 用于锁管理的进程间通信
  • 在检查唯一性、在索引中插入新键等时扫描内存中缓存的索引副本
  • ...

如果您确实想了解有趣的细节,请启动 perf 并启用堆栈跟踪,以查看 CPU 时间花费在哪里。

关于database - 数据库中的 CPU 利用率实际上意味着什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32847425/

相关文章:

delphi - 如何使用 Delphi(BDE 组件)优化更新 Postgres?

mysql - 转换查询 : right joins to left joins

mysql - 如何在不丢失数据的情况下重命名MySQL中的数据库?

java - 对集合框架的动态类型转换效果

performance - 高流量 Web 应用程序的最佳扩展方法?

xml - 试图从 psql 查询中保存 xml 文件?

postgresql - 你如何在 postgresql 中执行 mysqldump?

MYSQL - 根据条件更新新列的值

Android - 在 SQLite 数据库中保存位置

java - joda-time DateTime.with*() 的性能问题