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

Omu*_*Omu 1 postgresql ubuntu performance

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

我创建了一个表

create table foo
(
id serial primary key,
fname varchar(30),
lname varchar(30)
) 
Run Code Online (Sandbox Code Playgroud)

插入10 000行需要大约4秒第一次和1秒后,
但选择100 000行总是需要4秒,

select * from foo
Run Code Online (Sandbox Code Playgroud)

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

可能是我的ubuntu遥控带有限或类似的东西?

小智 6

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


Tom*_*zky 5

  • 尝试检查本地运行查询需要多长时间:

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

    psql -U username dbname
    
    Run Code Online (Sandbox Code Playgroud)

    打开计时信息的显示:

    dbname=> \timing
    Timing is on.
    
    Run Code Online (Sandbox Code Playgroud)

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

    dbname=> \o /tmp/foo.txt
    
    Run Code Online (Sandbox Code Playgroud)

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

    dbname=> select * from foo;
    Time: 104.442 ms
    
    Run Code Online (Sandbox Code Playgroud)

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

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

    # service iptables stop
    
    Run Code Online (Sandbox Code Playgroud)

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

    # nc -l 10000 > /dev/null
    
    Run Code Online (Sandbox Code Playgroud)

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

    # time nc client_ip 10000 < /tmp/foo.txt
    real        0m0.190s
    user        0m0.004s
    sys         0m0.078s
    
    Run Code Online (Sandbox Code Playgroud)

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

    # service iptables start
    
    Run Code Online (Sandbox Code Playgroud)