2

我正在使用Linq To Entities(L2E)将我所有的存储过程映射到数据库中,以便轻松转换为对象。我的数据不是很敏感(所以我正在考虑隔离级别“READ UNCOMMITED”处处)。我有几个数百万行的表。我有一个网站和一堆使用实体框架创建的相同数据模型的脚本。我将所有表(每个表最多3个)建立索引,以便我使用的每个过滤器都直接被索引捕获。我的剧本主要由数据库被Linq锁定(或缓慢)到实体和存储过程

1)从DB(让你的〜5秒) 2)制作API(1-3秒) 3)数据库

相加的结果我有READ_COMMITTED_SNAPSHOT和ALLOW_SNAPSHOT_ISOLATION设置为ON 。

使用此策略我的查询大多数是固定的,而且速度非常快(通常)。我的脚本中仍然有一些查询可能会运行20秒,但不会经常这样调用。

问题是,整个数据库突然变慢,我的所有查询都会慢慢返回(可能超过10秒)。使用Sql Profiler我试图找到问题。

正如前面提到的,我正在考虑NOLOCKS使用“READ UNCOMMITED”...现在我正在经历每个可能的数据库调用,并添加索引和/或缓存表,以使呼叫更快。

我也考虑过删除L2E并使用“老方法”来确定这不是问题。我的数据上下文是否在查看我的表?它看起来确实如此。我已经试验了将生存在API调用中的上下文用于最小化创建的上下文,但是现在我为每个调用创建了一个新的上下文,因为我认为它正在查看数据库。

问题是,我无法控制,每一个电话都是快速的,对于所有的永恒,否则整个系统会变慢。

当我重新启动sql server并重建索引时,它的速度非常快,在一段时间内再次变慢。任何指针将不胜感激。

回答

0

您是否考虑检查服务器上是否存在重大等待。

回顾下页sys.dm_os_wait_stats (Transact-SQL),看看是否能得到任何洞察为什么服务器速度慢....

+0

其实,我2个星期前关闭一切不是必须的,我现在每天晚上重新索引问题没有了。我将尝试逐一重新激活脚本,看看我是否回到了问题,然后检查您的提示。谢谢。 – Fischer 2011-03-30 06:52:43