rivers
侠客




会员UID:45578
注册时间:2003-3-2 15:54
最后登录:2005-7-2 18:05
帖子总数: 18
精华帖子: 0
积分:13

在线状态:...离线...

[会员资料] [站内短信] [Blog]

发表于: 2003-3-2 18:26   

DB2 7.2 EEE版本,6CPU,6GRAM

在C++程序中一次提交方式向单节点的表中插入6000条数据,每秒钟只能插入约500条;向双节点的表插入速度更慢。正常的速度应该能达到多少?怎样才能改进?

另外,如果多个应用程序都需要同时向这张表中插入大量(几千条)数据,如何调整MAXLOCKS和LOCKLIST等参数才能减少因为锁竞争而失败呢?

谢谢!
  返回页首 1楼
 -能简单才不简单 | 域名/空间/邮箱,CU网友优惠价 | Linux/Unix自由软件下载基地 | 加入IT专业人才库,让机遇让到你
 
ddmmdd   帅哥
光明使者



会员UID:9082
注册时间:2002-5-21 16:48
最后登录:2006-8-9 14:39
帖子总数: 839
精华帖子: 1
积分:147

来自:北京
在线状态:...离线...

[会员资料] [站内短信] [Blog]

发表于: 2003-3-3 09:33   

参数只能调大,但参数调整无法解决真正的性能问题。关键是:
1.你有几个这样的应用程序这样作?
2.你是否能将表更合理的使用你的硬盘?
3.你的表是否大量的工作是insert ,只有很少的update,delete?
4.你的表的子段的设置是否最优?



__________________________________

人活着难道就是为了等死吗?
  返回页首 2楼
 外企手机软件工程师就业班 | IBM p5 550+服务器加倍提升效率 | 最新最全的IT培训课程信息 | Linux时代全新改版,更多Linux新鲜资讯
 
iwin21cn
骑士




会员UID:36541
注册时间:2002-12-27 11:35
最后登录:2003-7-22 15:44
帖子总数: 79
精华帖子: 1
积分:21

在线状态:...离线...

[会员资料] [站内短信] [Blog]

发表于: 2003-3-3 09:40   

在这个时候,合理利用IO是最重要的!如果你的表单独放在一个表空间中且处在一个单独的硬盘上,应该不会这么慢!
  返回页首 3楼
 500M虚拟主机=255元 | Linux/Unix软件下载中心 | IT专业人才招聘求职 | AIX20年技术专题,AIX技术资源 | Linux/Unix专业图书一网打尽
 
rivers
侠客




会员UID:45578
注册时间:2003-3-2 15:54
最后登录:2005-7-2 18:05
帖子总数: 18
精华帖子: 0
积分:13

在线状态:...离线...

[会员资料] [站内短信] [Blog]

发表于: 2003-3-3 10:17   

谢谢。
昨天又做了测试,如果写死Insert 语句,插入6000条一模一样的数据,速度很快,2、3秒就完成.而插入真实数据时就很慢。这是什么道理?表上并没有加任何索引或分区列。
  返回页首 4楼
 500M虚拟主机=255元 | Linux/Unix软件下载中心 | IT专业人才招聘求职 | AIX20年技术专题,AIX技术资源 | Linux/Unix专业图书一网打尽
 
ddmmdd   帅哥
光明使者



会员UID:9082
注册时间:2002-5-21 16:48
最后登录:2006-8-9 14:39
帖子总数: 839
精华帖子: 1
积分:147

来自:北京
在线状态:...离线...

[会员资料] [站内短信] [Blog]

发表于: 2003-3-3 16:09   

用插入真实数据的程序来测试你的模拟数据试一下,
感觉是你的程序的问题,应该差一下你的程序的逻辑和使用sql 的方式。



__________________________________

人活着难道就是为了等死吗?
  返回页首 5楼
 500M虚拟主机=255元 | Linux/Unix软件下载中心 | IT专业人才招聘求职 | AIX20年技术专题,AIX技术资源 | Linux/Unix专业图书一网打尽
 
aca000
侠客




会员UID:45747
注册时间:2003-3-3 16:40
最后登录:2003-3-26 17:03
帖子总数: 25
精华帖子: 0
积分:14

在线状态:...离线...

[会员资料] [站内短信] [Blog]

发表于: 2003-3-4 11:53   

首先可以修改你的程序在一跳insert语句中插入多条记录,例如一个SQL语句插入1000条记录。
其次,在程序BIND时可以制定 insert buf参数,这样,你的应用程序中向同一个表中插入的记录将会自动被buffer传送给Server,速度将会大大提高。
另外,如果你想要启动多道进程同时插入数据,可以考虑多道进程分别连接道不同的数据库分区,并对数据进行区分后分别发送到不同的分区,这样速度会更快。如果要使用这种方式,可以使用DB2 API:sqlugtpi, sqlugrpn.
最后,适当地调整数据库参数也是有效的。
但是在EEE环境中,设置好的partitioning key往往是最重要的;而你的物理硬盘数量越多对你的性能提高越快,建议为每一个分区分配至少4-8快物理硬盘。
  返回页首 6楼
 外企手机软件工程师就业班 | IBM p5 550+服务器加倍提升效率 | 最新最全的IT培训课程信息 | Linux时代全新改版,更多Linux新鲜资讯
 
rivers
侠客




会员UID:45578
注册时间:2003-3-2 15:54
最后登录:2005-7-2 18:05
帖子总数: 18
精华帖子: 0
积分:13

在线状态:...离线...

[会员资料] [站内短信] [Blog]

发表于: 2003-3-4 22:47   

谢谢啦。我现在认为主要是程序的问题。


现在程序是这样的动态SQL,速度很慢:
for (....)
{
        ...
        ...
        sprintf(insertSqlStr,"INSERT INTO table_%s VALUES ('%s','%s'... ...)",insertToTable,insertDay,insertTime... ...);
        EXEC SQL PREPARE s1 FROM :insertSqlStr;
        EXEC SQL EXECUTE s1;
}


如果写成静态SQL,速度很快
for (....)
{
        ...
        ...
        EXEC SQL PREPARE INSERT INTO table_A VALUES (:insertDay,:insertTime... ...);
}

由于插入的表名需要根据数据来源不同而改变,虽然同一次处理的数据目标表是相同的。另外在使用insert buf参数后,速度反而下降。各位高手有什么好的建议?
  返回页首 7楼
 500M虚拟主机=255元 | Linux/Unix软件下载中心 | IT专业人才招聘求职 | AIX20年技术专题,AIX技术资源 | Linux/Unix专业图书一网打尽
 
aca000
侠客




会员UID:45747
注册时间:2003-3-3 16:40
最后登录:2003-3-26 17:03
帖子总数: 25
精华帖子: 0
积分:14

在线状态:...离线...

[会员资料] [站内短信] [Blog]

发表于: 2003-3-5 12:37   

Insert buf在EE中效果很好,但是在EEE中最好与local bypass一起使用。