繁体   English   中英

linq查询锁定问题(linq to sql)

[英]linq query lock issue (linq to sql)

我收到了linq查询超时异常。 在网上稍作搜索后,使用TransactionScope使其变为“ nolock”获得了我的投票。 但是,使用下面的代码后,我仍然会遇到相同的超时异常。 如有任何帮助,在此先感谢。

IEnumerable<IGrouping<string, Log>> grps = logs.GroupBy(l => l.msg_shortdesc);
using (var t = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = IsolationLevel.ReadUncommitted }))
{
  var lst = grps.ToList();
}

您具有正确的策略和TransactionOptionsIsolationLevel.ReadUncommitted语句,可帮助在SQL语句中使用NOLOCK Hanselman建议

问题在于,LINQ To SQL生成的SQL语句在数据库上是否有效。 请记住,根据表中的行数和查询中的数据类型,开发与测试与产品的性能会有所不同。

要检查的一些事情:

  • 什么是发送到服务器的SQL语句? 使用SQL事件探查器检查。 该SQL是否通过SSMS在临时查询中及时运行?

  • msg_shortdesc列上有索引吗? 如果不存在,请在此表的此表上添加一个新索引。 重新运行LINQ To SQL查询以检查其性能。

听起来您无法更改数据库的配置(索引)。 建议如果没有更改配置的能力,则将无法进行“正确”的调整以提高性能。 不幸的是,您将不断受到其他用户产生的负载随机性的影响。

如果您绝对不能建立索引,请考虑对这组数据进行缓存。 也许将此数据加载到Session并每隔n分钟使它过期。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM