select * from foo(100 000行)需要4秒,这是正常的吗?

时间:2010-09-24 11:35:43

标签: performance postgresql ubuntu

我在ubuntu服务器上安装了postgres 8.4,配备4 GB Ram和Intel E5504 2Ghz

我创建了一个表

create table foo
(
id serial primary key,
fname varchar(30),
lname varchar(30)
) 

10 000行的插入第一次约为4秒,而第一次约为1秒 但是选择100 000行总是需要4秒,

select * from foo

这是正常的还是我的配置错了?

可能是因为我的ubuntu遥控带有限制还是类似的东西?

2 个答案:

答案 0 :(得分:6)

您的表的100000行使用6.4 MBytes(如果它们是Unicode,则为12.4 MBytes)。这相当于64 MBits,在10 MBit / s网络中大约需要6.4秒。因此,可用的网络带宽可能会导致您遇到的4秒延迟。

答案 1 :(得分:4)

  • 尝试检查本地运行查询的时间:

    使用psql连接到本地数据库:

    psql -U username dbname
    

    打开显示时间信息:

    dbname=> \timing
    Timing is on.
    

    将输出设置为本地临时文件:

    dbname=> \o /tmp/foo.txt
    

    从表中选择所有行到临时文件:

    dbname=> select * from foo;
    Time: 104.442 ms
    

  • 检查服务器与客户端之间的TCP带宽:

    (在客户端 - 我假设Linux)暂时禁用防火墙:

    # service iptables stop
    

    (在客户端上)开始侦听端口10000:

    # nc -l 10000 > /dev/null
    

    (在服务器上)使用普通TCP发送文件到客户端:

    # time nc client_ip 10000 < /tmp/foo.txt
    real        0m0.190s
    user        0m0.004s
    sys         0m0.078s
    

    (在客户端上)启用防火墙:

    # service iptables start