【发布时间】:2016-10-24 07:36:08
【问题描述】:
在 SQLite 中,我使用 SELECT 从一个数据库中读取数据,执行一些修改并将其写入另一个数据库。
查看iotop 的输出,进程性能(仅使用一个内核)受 I/O 限制(IO>80%,CPUiotop 中看到的大部分操作都在“磁盘读取”下进行,只是偶尔会在“磁盘写入”下显示一些内容。
进程性能是否可能受SELECT/read 事务的约束?基本上我在网上看到的所有与 SQLite 性能相关的信息都是关于 INSERT/write 的。读取数据有什么需要了解和优化的吗?
一个低效的查询,即在缺少索引的字段上通过 SELECT 对 IO 的影响是否比对 CPU 的影响更大?
【问题讨论】:
-
如果您有很多写入,您可以通过将它们合并到一个事务中来进行优化。优化读取更难……
-
这个问题太宽泛了。如果您想加快特定查询的速度,请询问这些。
-
在开始之前,请考虑将正在读取的数据库放在 RAMdisk 上。
-
@MarkSetchell 那太好了,只是我怕文件太大(155GB 文件 vs 192GB 内存)...
-
你的硬件是什么?如果您从单个 S-L-O-W 5,400 RPM SATA 驱动器读取数据,您将很幸运能够获得 50-60 IO 操作/秒。 @MarkSetchell 关于 RAMdisk 的评论是运行速度更快的最简单方法的具体实现:在更快的硬件上运行它。
标签: performance io sqlite