SQL Server Express性能问题

6

启动

我有一个运行SQL Server Express 2008 R2的数据库,有十个用户通过存储过程永久地读取/写入相同的表格。他们日以继夜地进行这项工作。

问题

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

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

最后,我不是SQL Server专家。你能给我一些建议,帮助我解决这个性能问题吗?


1
你能贴出一个存储过程的例子吗?我会看一下,看看我能否帮忙。 - Darren
你唯一能做的就是要么查看存储过程中查询的性能,要么如果它们已经达到了实际限制,考虑更改设计以规避任何问题。可能值得聘请顾问数据库管理员寻求专业帮助。 - Tony Hopkinson
你的SQLServer版本数据大小限制为10 GBytes。因此,如果你克服了性能问题,你必须每隔几个月清理数据库或升级它。 - t_motooka
6个回答

8

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


1
流程图的更新链接在这里 - Eduardo Flores

2
这很可能是程序员的错误 - 听起来你简单地没有:
  • 一些表格上的适当索引。这不是优化 - 不良索引就像对于Web人员的破碎HTML一样,如果您没有索引,那么基本上您并未按照SQL应该使用的方式使用它,您应该始终拥有适当的索引。
  • 足够的硬件,例如RAM。是的,它可以管理10GB的数据库,但如果您的热点(始终访问的内容)为2GB,而您只有1GB,则它将比需要更频繁地击中磁盘。
  • 慢速磁盘,特别是快速问题,因为大多数人不费心获得适当的磁盘布局。然后他们再次运行sQL数据库,针对一个缓慢的200 IOPS终端用户磁盘,在这里 - 根据需要 - SQL数据库想要许多纺锤或SSD(典型SSD这些天有40.000 IOPS)。

这就是最后的结果 - 可能还有真正糟糕的SQL。典型的过滤器错误:somefomula(field)LIKE value,这意味着“请忘记您的索引,进行表扫描并在检查之前计算somefomula(field)”。


1
在优化SQL查询之前,您需要找到查询的热点。通常可以使用SQL Profiler在SQL Server上完成此操作。对于Express版本,则没有这样的工具。但是您可以通过使用几个查询来绕过此问题:
返回所有最近的查询:
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;

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

1
首先,SQL Server Express并不是最适合您需求的版本。建议获取开发人员版进行测试。它与企业版完全相同,但如果您不在“生产”中使用,则免费。
关于性能问题,这里涉及到很多因素,您可以通过索引和分区等方式来改善。我们需要更多信息才能提供帮助。

看,他的问题可能不会在开发中出现,而是在实际使用中出现。请阅读他的文字。事实上,你建议他违反开发者许可证,否则你的帖子毫无意义,因为他无法使用它 ;) - TomTom
我建议他在测试环境中测试一下,看看SQL Express是否真的存在问题。我并不建议他仅仅将Express版本更改为Developer。 - Diego
开发者版“免费”是从什么时候开始的?我一直需要支付大约49美元的费用。 - Aaron Bertrand
我的误解。我一直以为只要不在生产环境中使用就可以了。 - Diego
1
开发者版现在是免费的了... 从SQL Server Express 2016开始,它们将其更改为免费。 https://www.microsoft.com/zh-cn/sql-server/sql-server-editions-developers - MattSlay

0
可能是索引不良、数据库设计不良、未应用规范化、不需要的列索引、执行时间过长的查询。

-3

SQLExpress旨在用于测试目的,其性能直接受到Microsoft的限制。如果您将其用于生产环境,则可能需要为SQL Server获取许可证。

请在这里查看SQL Express是否适用于生产环境?


2
-1 SQL Express可以(而且被)用于生产环境。我非常确定,在企业版中也会出现完全相同的问题,尚未证明他所遇到的性能问题是由于Express的限制。应用程序问题(如表扫描!)更有可能是一个重要原因。 - Remus Rusanu
-1. 你甚至都不费心思 - 对于较小的设置(100个用户,10GB数据),使用SQL Express是完全可以的。许可证允许使用。在发布之前请先阅读 - 在这种情况下,请阅读许可证文件。 - TomTom
看起来他很快就会达到 Express 的极限(4GB 数据库,1GB RAM 和 1 CPU)。个人偏好,我永远不会在应用程序中使用 Express,但这是我的决定。如果您的应用程序和数据很小,那么使用 Express 应该没有问题。 - Limey
抱歉,4G是旧的限制,现在已经是10G了。 - Limey
这要看情况。考虑一个只有10人的小公司 - 你会用什么?即使1千兆字节也是大量的交易。有很多应用程序可以完美地处理这个问题 - 例如2000台机器的WSUS,防火墙记录谁做了多少流量。 - TomTom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接