2011-05-27 155 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