【发布时间】:2015-09-29 15:01:37
【问题描述】:
我运行了两种查询,
1. 特意引入的查询以在大约 10 列中执行排序(排序依据)。这使用 CPU,因为排序是 CPU 密集型操作。
该场景涉及运行查询,该查询耗时 30 秒,并在 100 个不同的表上运行了大约 100 个查询。在 32 核计算机上,所有 32 个内核的 CPU 使用率约为 85%,所有 100 个查询并行运行。
2.在表上插入一百万行。
我不明白为什么这会消耗 CPU,因为这纯粹是磁盘 I/O。但是我使用 100 个同时连接/线程在单个表上插入了 100 万行,并且这些表上没有索引,现在插入不是加载数据的最快方式,但这里的重点是它在大约 10 个内核上消耗大约 32% 的 CPU 时间。这比上面的要少,但我仍然只是好奇。
我可能是错的,因为 Wal 存档已打开并且查询日志已打开 - 这是否对 CPU 有贡献。我假设没有,因为这些也是磁盘 IO。
除了 postgres 之外,这台机器上没有其他进程/应用程序正在运行/安装。
【问题讨论】:
-
反对者:想发表评论吗?
-
为什么要使用多线程插入?为了表现?你可以阅读stackoverflow.com/questions/758945/…
-
我不明白为什么你会认为将数据写入数据库表是一个纯粹的磁盘 i/o 过程。必须记录每个更改,必须修改块,必须保留更改以防操作需要回滚。这不仅仅是将数据从一个文件复制到另一个文件。
-
好吧,我的假设是纯磁盘 I/O,但我有点怀疑自己,因此提出了问题。当然,这不仅仅是复制粘贴,而是会消耗更多 CPU 的东西,它是否可以被调整/控制。
标签: database performance postgresql cpu-usage