记一次.NET应用性能分析 - 客户说关联权限后查询不出数据

  背景:有客户说操作员关联权限后,某个页面查询不出数据,不关联权限就可以

  现象:1、用带权限的账号登进去后,查询不出数据,F12发现报错,"An error occurred while executing the command definition. See the inner exception for details."

                  2、浏览器请求记录耗时30s

                  3、勾选权限越多耗时越长,全部勾选权限时,才报上面的错

  分析:根据现象3判定查询流程基本正常,不存在基础语法错误,根据现象2判断应该是性能问题,一般程序里连数据库的超时时间就是30s。

  进一步分析:连客户库,SQL Server Profiler 中监听到的SQL,耗时55s,不带权限关联查询时,常规耗时0-1s

  小结:性能问题,分析监听的SQL,查看查询计划,发现开销比较大的地方走的是索引扫描,而不是索引查找,因此查询效率低,进一步分析发现SQL中的部分列带函数,导致索引失效,因此耗时长

     去掉该函数后,查询时间0-1s!

  不过在应用里,并不是直接编写的sql去访问数据库,而是通过LINQ转的SQL,产品里由于数据库设计等多方面原因,导致LINQ转的SQL带RTRIM函数。原本是不太好解决的,毕竟这种框架底层自发行为,人为很难干预。在网上找了一些资料后,最终通过优化LINQ编写方式解决了(改善WHERE条件的处理)。

  总结:数据库字段不要用char!LINQ不熟悉的话慎用!

  

posted @ 2024-07-06 21:59  顾星河  阅读(53)  评论(0编辑  收藏  举报