1

前几天是困难时期..,

我为大学生开发了在线入学申请流程,并且非常成功。

让我来谈谈我面临的问题,

  1. 问题涉及 2 个表:Student_AdmissionDetails(包含几乎 30-35 个字段,其中大多数具有 nvarchar(70) 的数据类型),另一个是StudentCategory
  2. 从录取过程开始几天后,Student_AdmissionDetails 有大约 3,00,000 条记录,StudentCategory 有 4 条记录
  3. 我开发了一个仪表板,我想在其中显示每个类别中申请的学生人数。为了实现这一点,我有以下查询。

    Select count(*)
    from Student_AdmissionDetails
    inner join StudentCategory
    on Student_AdmissionDetails.Id=StudentCategory.Id
    where CategoryTypeName=@ParameterValue

上面的查询在单页上被触发了 3 次。并且有 250-300 名用户同时访问同一页面。除了录取表格上的内容外,还有 1300-2000 名学生同时填写表格。

我遇到的问题是,当我在 sql 服务器中运行上面的查询时,它会在 5 次中被解雇 1 次。它抛出错误,从内存访问对象时发生死锁(请原谅我不记得确切的错误)。

我从以下帖子中寻找的是:

  • 这次我有点幸运,我没有让别人对我的编码不满意,但是谁能告诉我可以做些什么来克服这种情况。处理大型数据库的最佳方法是什么
  • 我试图用 SQL 探查器解决这个问题,但由于还有 5 个应用程序正在运行类似的应用程序,我无法找出有多少用户试图访问相同的资源。

我想以下几点将有助于回答我的问题。

  • 应用服务器和数据库服务器不同
  • 数据库服务器在 Windows XP 上运行(我猜!)它有 128 GB 的 RAM
  • 当我从 SQL Server 执行查询时,执行查询平均需要 12-15 秒。

为写这么长而道歉,但我真的需要帮助来学习这个:)

4

1 回答 1

0

尝试更新您的SELECT声明添加WITH (NOLOCK). 这将使您的结果不那么精确,但对于您的仪表板来说似乎已经足够了。

此外,最好使用整数之类的东西而CategoryTypeId不是子句。CategoryTypeNameWHERE

于 2013-07-10T13:13:38.683 回答