2011-05-27 127 views
1

我在我的本地机器上运行Ubuntu 10.09和PostgreSQL 9.0在ext4fs上截断数据库中的所有表时遇到问题。如何提高Postgresql'truncate'性能?

用56个表格截断空数据库需要大约7秒,而我的所有同事都有大约1秒的性能。

我用一个命令截断所有表。表格完全覆盖了外键。

有没有人知道这个问题?

+0

如何在一个命令中通过表或所有表截断数据库表?你的桌子多久有外键? – 2011-05-27 14:12:57

+0

你的同事和你使用完全相同的数据库吗? – Mr47 2011-05-27 14:30:22

+0

您是使用TRUNCATE TABLE命令还是运行DELETE语句?您是否在运行TRUNCATE的这些表上运行任何活动查询? – Kuberchaun 2011-05-27 14:33:59

回答

3

我猜测你的同事在他们的磁盘上启用了写缓存或者在Postgres配置中禁用了fsync

+0

或包裹在交易中。如果在单个事务之外,在7秒内有56个表〜每秒钟= 8个fsync,这对于一个正在死亡的硬盘(或非常繁忙的硬盘)似乎是可信的。 – Sean 2011-05-27 23:31:49

+0

谢谢!关闭'fsync'改进了我开发机器上的'truncate'性能8倍! – 907th 2014-08-18 11:29:09

+0

@第九百零七但不要试图用'运行生产数据库的fsync = off' - 你迟早会失去你的数据! – Tometzky 2014-08-28 14:50:35