[转载红鱼儿]kbmmw 开发点滴:解决QueryService重复查询问题-阿里云开发者社区

开发者社区> 数据库> 正文

[转载红鱼儿]kbmmw 开发点滴:解决QueryService重复查询问题

简介: 做一个简单的QueryService,在跟踪过程中发现,客户端一个查询,会被触发两次。怎么会这样,这严重影响服务器性能。 客户端的代码非常简单,就是执行一个SQL,通过QueryService返回结果:   kbmMWClientQuery2.

做一个简单的QueryService,在跟踪过程中发现,客户端一个查询,会被触发两次。怎么会这样,这严重影响服务器性能。

客户端的代码非常简单,就是执行一个SQL,通过QueryService返回结果:

  kbmMWClientQuery2.Close;
  kbmMWClientQuery2.Open;

于是利用服务器端的QueryService的事件OnQueryStatement进一步检查SQL的执行情况,把SQL写到Memo中:

procedure TkbmMWQueryService3.kbmMWQueryServiceQueryStatement(Sender: TObject;
  Place: TkbmMWQueryOperationType; var NamedQueryName, Statement: string);
begin
  Form1.Memo1.Lines.Add(Format('Named Query:%s | Statement:%s',[NamedQueryName,Statement]));
end;

解决QueryService重复查询问题

用dbMonitor检查也是重复的:

解决QueryService重复查询问题

发生这个问题,是因为在服务器端的Query,需要先从数据库中查询出表的结构及查询使用的参数,然后再查询数据记录。

解决该问题的方法:

1:利用Cache制,对Metadata进行缓存,用以取代每次查询都要从数据库中先查询出结构;在服务器端及客户端都可以利用Cache.

kbmMWClientQuery2.Cached:=True;

kbmMWClientQuery2.CacheFlags:=[mwcfDontAge,mwcfDontGarbageCollect,mwcfDefsOnly];

2:设置Query的AutoFieldOnOpen:=mwafoWithData;
关于如果使用kbmMW的Cache,参见昨天写的内容。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
数据库
使用钉钉扫一扫加入圈子
+ 订阅

分享数据库前沿,解构实战干货,推动数据库技术变革

其他文章