zoukankan      html  css  js  c++  java
  • [转载红鱼儿]kbmmw 开发点滴:解决QueryService重复查询问题

    做一个简单的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,参见昨天写的内容。

  • 相关阅读:
    CSPS_108
    TortoiseGit配置密钥的方法
    SLF4J和Logback和Log4j和Logging的区别与联系
    slf4j log4j logback关系详解和相关用法
    dubbo服务telnet命令的使用
    基于IDEA的JavaWeb开发环境搭建
    jdk8--十大新特性
    jdk8--collect总结
    字符串的排列
    调整数组顺序使奇数位于偶数前面
  • 原文地址:https://www.cnblogs.com/xalion/p/2719519.html
Copyright © 2011-2022 走看看