我用BDE连接Sybase数据库.系统有用来连接数据库的所有控件都在一个数据库模块中,也就有就二个控件,分别是TDatabase,TQuery控件.系统中多是调用Sybase中的存储过程来查询数据.我专用一个函数做查询操作.此函数如下:
procedure OperateDB(Qy:TQuery;StrSql:string);
begin
if Qy.active then Qy.close;
Qy.SQl.clear;
Qy.Sql.Add(StrSql);
try
Qy.open;
except
Qy.close;
end;
end;因为系统是多线程的,而我的数据库查询是单线程.
当只有二个人同是做查询时,一彻都很正常,当同时有三个人做查询时,系统慢得有点缓慢.当有4个人同时做查询时,系统变得非常慢而且没有查不到数据.
我相那是数据库的并发问题,请问如何解决??
procedure OperateDB(Qy:TQuery;StrSql:string);
begin
if Qy.active then Qy.close;
Qy.SQl.clear;
Qy.Sql.Add(StrSql);
try
Qy.open;
except
Qy.close;
end;
end;因为系统是多线程的,而我的数据库查询是单线程.
当只有二个人同是做查询时,一彻都很正常,当同时有三个人做查询时,系统慢得有点缓慢.当有4个人同时做查询时,系统变得非常慢而且没有查不到数据.
我相那是数据库的并发问题,请问如何解决??
首先感觉你说得像3层,不然怎么会有多人共享一个TDatabase,又感觉像2层,因为你说多线程。麻烦先费点力把问题说清楚,自己想问什么要说明白才行。
另外,很大的可能是你的索引建的不好,如果你的查询条件字段不是索引的话,建议修改
索引;
才两三个用户,不应该是并发问题。
再是,现在最多用户中30,将来要增加到60个,但TSession的总数又不能超过48个,那怎么设置?
我不知道你的DLL中怎么初始化连接这个TDatabase,这个可能是个问题。如果可能,最好把它改成DataSnap,他的模型要好得多。