我在 Ubuntu 12.04 上使用 PostgreSQL 9.1。开发机器有 2GB RAM,是 Centrino Duo。
备份命令是 pg_dump,从终端运行只需不到 5 秒。
但我的恢复是这样的:
/usr/bin/psql --host localhost --port 5432 --username "postgres" --quiet "dbHRS" < "t2"
文本文件“t2”有大约 5000 行插入内容。但需要大约 2 分钟才能完成。
为什么要花这么长时间?我能做些什么来加快速度吗?
附加信息:备份如下:
/usr/bin/pg_dump --host localhost --port 5432 --username "postgres" --role "mizk" --no-password --format plain --data-only --inserts --column-inserts --verbose --file "abc" "dbHRS"
因此文件 abc 仅包含一组插入查询。仅此而已。没有存储过程,没有触发器...
我无法接受恢复速度太慢。奇怪的是,当我将文本文件的内容复制粘贴到 PG-Admin 上的查询窗口中时,恢复速度非常快。只需几秒钟。所以我认为这与 psql 命令的工作方式有关。也许我错了。
答案1
由于不知道具体做了什么,我只能泛泛地说一下:
- 读取只是从内存或磁盘读取。
- 写入必须检查约束、操作触发器,然后写入磁盘。通常在需要设置、操作提交然后清理的事务中。然后是缓存失效。
- 大多数磁盘(及其文件系统)的读取速度比写入速度快得多。
我并不惊讶恢复过程比备份过程花费的时间更长,但如果你真的认为它的时间太长了,基准你的查询并找出问题所在。
答案2
正如 Oli 提到的,写入需要更多时间。一个真实的例子是我必须为客户迁移的数据库。它非常大,运行完整转储大约需要 24 小时。
但是,导入时间大约是原来的 3 倍。对于您的测试计算机,它听起来像是一台台式机,这意味着只有一个硬盘驱动器(没有 RAID)。如果在对查询进行基准测试后仍然遇到问题,您可以查看机器中的硬盘类型。在此应用程序中,更快的转速会更好,因此如果您有 5400 RPM 驱动器,则添加专门用于 SQL 的驱动器是一种选择。如果您有 7200 RPM 驱动器,情况会好一些,但您可能仍想升级。
根据数据库的大小,他们会制造一些不太贵的小容量 SSD 驱动器。如果您将 SQL 设置为在该驱动器上运行,则应该可以提高性能。除此之外,您当前的设置很可能将操作系统和数据库放在同一个硬盘上。将它们分开应该可以提高性能。