我有一个程序可以读取大约一百万行并对行进行分组;客户端计算机没有压力,CPU使用率不超过5%,网卡使用率约为10%或更低。
如果在同一台客户端计算机上运行该程序的四个副本,则使用率会以相同的速率增长,运行四个程序时,我的CPU使用率约为20%,网络使用率约为40%。这让我觉得我可以使用线程从数据库中读取信息来提高性能。但如果配置更改可以做同样的事情,我不想引入这种复杂性。
客户端:Windows 7,CSDK 3.50.TC7
服务器:AIX 5.3,IBM Informix Dynamic Server版本11.50.FC3
答案 0 :(得分:1)
您可以尝试一些调整,最值得注意的是设置获取缓冲区大小。环境变量FET_BUF_SIZE可以设置为32767等值。这可以帮助您更接近饱和客户端和网络。
共享单个连接的多个线程无济于事。使用多个连接的多个线程可能会有所帮助 - 当然,它们每个都运行一个单独的查询。
如果客户端程序正在对行进行分组,我们必须问“为什么?”。通常最好让服务器(DBMS)这样做。也就是说,如果服务器是计算绑定的并且客户端PC在空闲周期中陷入困境,那么在客户端而不是服务器上执行繁琐的工作可能是有意义的。只需确保最小化要通过网络中继的数据。