我在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