【问题标题】:SQL Server Express performance problemsSQL Server Express 性能问题
【发布时间】:2012-05-30 03:41:51
【问题描述】:

启动

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

问题

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

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

我终于不是 SQL Server 专家了。您能给我一些提示以开始摆脱这个性能问题吗?

【问题讨论】:

  • 您能粘贴其中一个存储过程的示例吗?然后我会看看,看看我能不能帮忙。
  • 你唯一能做的就是。查看存储过程中查询的性能,或者如果它们已达到实际极限,请考虑更改设计以避开任何问题。可能值得聘请顾问 dba 以获得一些专家帮助。
  • 您的 SQLServer 版本受到最大数据大小的限制:10 GB。所以如果你克服了性能问题,你必须几个月清理一次数据库或升级它。

标签: performance sql-server-2008r2-express


【解决方案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;

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        • 更新了流程图链接here
        【解决方案5】:

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

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

        【讨论】:

        • -1。看,他的问题可能不会出现在开发中,而是出现在实际使用中。阅读他的文字。实际上你建议他打破开发者许可,或者你的帖子是零意义,因为他无论如何都不能使用它;)
        • 我建议他测试一下,显然是在测试环境中,看看 SQL Express 是否真的有问题。我不建议他简单地将他的快速版本更改为开发人员。
        • 开发者版什么时候“免费”了?我总是不得不为此花大约 49 美元。
        • 我对他们的误解。我一直认为它只要不用于生产环境。
        • 开发者版现已免费...他们从 SQL Server Express 2016 开始将其改为免费版。microsoft.com/en-us/sql-server/sql-server-editions-developers
        【解决方案6】:

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

        看看这里SQL Express for production?

        【讨论】:

        • -1 SQL Express 可以(并且正在)用于生产。我很确定 OP 在 Enterprise Edition 上会遇到完全相同的问题,但没有证明他看到的性能问题是由于 Express 限制造成的。应用程序问题(表扫描!)的可能性要大得多。
        • -1。您甚至不必费心——对于较小的设置(100 个用户,10gb 数据),使用 SQL Express 是非常好的。许可允许它。发布前阅读 - 在这种情况下是许可文件。
        • 看来他很快就会达到 Express 的极限(4gs DB、1 gig RAM 和 1 CPU)。个人喜好,我永远不会将 express 用于应用程序,但这是我的决定。如果您的应用和数据很小,那么使用 express 应该没有问题。
        • 抱歉,4g 是旧的限制,现在是 10g。
        • 视情况而定。考虑一个 10 人的小公司——你会用什么?即使是 1 GB 也是很多事务。有很多应用程序可以完美运行 - 2000 台机器 WSUS,防火墙记录谁做了多少流量。
        猜你喜欢
        • 2019-04-13
        • 1970-01-01
        • 2015-04-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多