我在Ubuntu 12.04上構建了一個大型的postgres 9.1數據庫,其中一個表格可以容納大約8000萬行左右的數據。每當我運行一條SELECT語句時:關於postgresql的SELECT性能問題9.1
SELECT * FROM db WHERE ID=1;
執行只返回幾千行的查詢需要將近2.5分鐘。在磁盤I/O上運行一些診斷之後,我認爲這不是問題,但以下是診斷的輸出。 (我有2GB的內存)我不確定這裏有多好的輸出,但是它給出了在互聯網上其他服務器的統計數據。
time sh -c "dd if=/dev/zero of=bigfile bs=8k count=500000 && sync"
500000+0 records in
500000+0 records out
4096000000 bytes (4.1 GB) copied, 106.969 s, 38.3 MB/s
real 1m49.091s
user 0m0.248s
sys 0m9.369s
我有了很大改進的postgresql.conf,助推effective_cache到RAM中的75%,的shared_buffers至25%,CHECKPOINT_SEGMENTS至15 work_mem爲256MB,自動清理,SHMMAX的內核,等我有一些性能提高,但不超過5%。網絡不應該成爲一個問題,因爲即使在本地主機上運行它也需要很長時間。我計劃添加更多數據,並且查詢時間似乎隨着行數迅速增長。
看來我應該能夠在幾秒鐘內運行這些SELECT語句,而不是幾分鐘。關於這個瓶頸可能在哪裏的任何建議?
向我們展示查詢的執行計劃幷包含表定義('create table' ...)。另請參閱:http://wiki.postgresql.org/wiki/Slow_Query_Questions –
你對自動清理做了什麼? – kgrittn