5

引发

我正在运行 SQL Server Express 2008 R2。有十个用户使用存储过程对同一个表进行永久读/写。他们日夜这样做。

问题

随着数据库大小的增加,存储过程的性能越来越低。当数据库大小约为 200MB 时,存储过程调用平均需要 10 毫秒。当数据库大小约为 3GB 时,相同的调用平均需要 200 毫秒。所以我们必须每月清理一次数据库。

我们已经对一些具有积极影响的表进行了索引优化,但问题仍然存在。

最后,我不是 SQL Server 专家。你能给我一些提示来开始摆脱这个性能问题吗?

4

6 回答 6

8

SQL Server Express Edition 的限制(1GB 内存缓冲池、仅使用一个套接字 CPU、10GB 数据库大小)不太可能成为问题。应用程序设计、错误查询、过多的锁定并发和较差的索引更可能是问题所在。链接的文章(特别是第一篇)包括如何识别瓶颈的方法。

于 2012-05-23T15:00:19.623 回答
2

这很可能是一个简单的程序员错误 - 听起来你只是有:

  • 某些表上的索引不正确。这不是优化 - 糟糕的索引就像 web 用户损坏的 HTML,如果你没有索引,那么基本上你没有使用应该使用的 SQL,你应该总是有适当的索引。
  • 没有足够的硬件,例如 RAM。是的,它可以管理一个 10gb 的数据库,但是如果你的热集(一直访问的 suff)是 2gb,而你只有 1gb,它会比它需要的更频繁地访问磁盘。
  • 慢速光盘,尤其是一个快速问题,因为大多数人不费心去获得正确的光盘布局。然后他们针对缓慢的 200 IOPS 最终用户磁盘运行 SQL 数据库,其中 - 根据需要 - SQL 数据库需要许多主轴或 SSD(目前典型的 SSD 有 40.000 IOPS)。

最后就是这样 - 加上可能非常糟糕的 SQL。典型的过滤器错误:somefomula(field) LIKE value,意思是“忘记你的索引,请在检查前进行表扫描并计算 someformula(field)”。

于 2012-05-23T15:08:46.873 回答
1

首先,SQL Server Express 不是您要求的最佳版本。获取开发者版进行测试。它与企业版完全一样,但如果您不用于“生产”,则免费。

关于性能,这里涉及很多东西,您可以使用它来改进它,因为索引直到分区。我们需要更多信息来提供帮助

于 2012-05-23T15:03:58.617 回答
1

在优化 SQL 查询之前,您需要找到查询的热点。通常您可以使用 SQL Profiler 在 SQL Server 上执行此操作。对于 Express 版本,没有这样的工具。但是您可以使用一些查询来四处走动:

返回所有 renct 查询:

SELECT *
FROM sys.dm_exec_query_stats order by total_worker_time DESC;

只返回最耗时的查询:

SELECT total_worker_time, execution_count, last_worker_time, dest.TEXT
FROM sys.dm_exec_query_stats AS deqs
CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest
ORDER BY total_worker_time DESC;

现在您应该知道需要优化哪个查询。

于 2013-12-27T14:58:47.083 回答
0

可能是糟糕的索引、糟糕的数据库设计、可能没有应用规范化、不需要的列索引、糟糕的查询需要很长时间才能执行。

于 2013-01-22T10:00:47.547 回答
-3

SQLExpress 是为测试目的而构建的,性能受到 Microsoft 的直接限制,如果您在生产环境中使用它,您可能需要获得 SQL Server 的许可证。

看看这里用于生产的 SQL Express 吗?

于 2012-05-23T14:59:20.470 回答