0

我有一个 linq 查询超时异常。在网上搜索了一下后,使用 TransactionScope 使其“nolock”得到了我的投票。但是,使用下面的代码后,我仍然得到相同的超时异常。任何帮助都是appraicated,在此先感谢。

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();
}
4

1 回答 1

1

您已经有了正确的策略和语句,TransactionOptionsIsolationLevel.ReadUncommitted 帮助NOLOCK您在 SQL 语句中使用。汉塞尔曼建议

问题在于 LINQ To SQL 生成的 SQL 语句是否在数据库上执行。请记住,Dev、Test 和 Prod 的执行方式会有所不同,具体取决于表中的行数以及查询中的数据类型。

需要检查的一些事项:

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

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

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

如果您绝对无法创建索引,请考虑对这组数据进行缓存策略。也许每隔n分钟加载这些数据Session并使其过期。

于 2010-08-24T16:16:16.430 回答