2009-07-21 171 views
13

我們有一個使用MySql運行的應用程序。我們發現MySql不適合我們的應用程序,因爲我們發現它不支持PostGIS所具有的一些GIS功能(注意:mysql只支持最小邊界矩形GIS搜索)。爲什麼PostgreSQL在Windows上這麼慢?

所以我們將DB更改爲PostgreSQL。然後我們發現在Windows上運行的Postgresql 8.2與Mysql 5.1相比要慢得多。速度較慢,我的意思是慢了大約4-5倍。

這是爲什麼?我們需要改變配置中的某些東西嗎?

我發現從其他網站的一些意見,如this

UPDATE:我們發現緩慢的原因是由於我們將插入數據庫的BLOB。我們需要能夠以10-15 MB/s的持續速率插入BLOB。我們正在爲每個插入/讀取的BLOB使用libpq的lo_read和lo_write。這是最好的方法嗎?有沒有人使用過Pgsql以高速率插入大BLOB?

編輯:我聽說PgSql剛剛被移植到Windows。這可能是其中一個原因嗎?

+1

1.最新版本爲8.4(本月發佈) - 升級,測試,報告。 2.這個「其他網站」是PostgreSQL項目的官方郵件列表存檔。但另一方面,您鏈接的帖子非常陳舊,並提到了一個非常古老且不再受支持的版本(8.0)。 – 2009-07-21 23:59:15

回答

21

由於我們移植它時所做的折衷,有些情況下Windows的PostgreSQL與其他解決方案相比會帶來額外的開銷。

例如,PostgreSQL每個連接使用一個進程,MySQL使用一個線程。在Unix上,這通常不會有明顯的性能差異,但在Windows上創建新進程非常昂貴(由於缺少fork()系統調用)。由於這個原因,使用PostgreSQL時,使用持續連接或連接池是更重要的是在Windows上更重要的

我看到的另一個問題是,Windows上的早期PostgreSQL默認會確保它的寫入正在通過寫入緩存 - 即使它具有電池支持。 AFAIK,MySQL不會這樣做,並且會極大地影響寫入性能。現在,如果你有非安全的硬件,比如便宜的硬盤,這實際上是必需的。但是如果你有一個電池供電的寫入緩存,你想把它改爲常規的fsync。 PostgreSQL的現代版本(當然是8.3)將默認爲open_datasync,這應該消除這種差異。

您還沒有提到如何調整數據庫的配置。默認情況下,PostgreSQL附帶的配置文件是非常保守的。如果你沒有改變任何東西,你肯定需要看看它。在PostgreSQL wiki上有一些調整建議。

要提供更多詳細信息,您將不得不提供更多有關運行緩慢的細節以及如何調整數據庫。我會建議給pgsql-general郵件列表發郵件。

+0

你是對的。在我改變了默認配置後,它變得更快了一點。 – sivabudh 2009-07-25 04:06:30

7

儘管PostgreSQL的Windows端口是相對較新的,但我的理解是它和其他版本一樣好。但它絕對是一個港口;幾乎所有開發人員主要或專門在Unix/Linux/BSD上工作。

你真的不應該在Windows上運行8.2。在我看來,8.3是第一個真正可以生產的Windows版本, 8.4更好。無論如何,8.2已經過時了,如果你能升級,你將會獲得一些好處。

要考慮的另一件事是調整。 PostgreSQL需要比MySQL更多的調整來實現最佳性能。您可能要考慮發佈到mailing lists之一以獲得更多基本調整幫助。

+1

PostgreSQL需要比MySQL更多的調整:實際上,它已經遭受了默認情況下非常保守的內存使用配置。我不知道是否仍然如此,但通常這是第一個嫌疑犯。 – 2009-07-23 17:17:15

0

PostgreSQL的速度已經比MySQL慢了很多(當你有一個可笑的大型數據庫時,它實際上會更快)。只是供參考,這不會導致你的問題,但要牢記這一點。