目前,我正在开发一个使用 MS SQL Server 2005 进行相当密集计算的产品。在较高的层面上,我的产品的架构基于“运行”的概念,每次我进行一些分析时,它都会存储在一系列中运行表数(每次运行约 100 个表)。
我遇到的问题是,当运行次数在几个月后增长到大约 1,000 次左右时,数据库的性能似乎确实下降了,特别是简单的查询(例如检查表是否存在或创建视图)可以最多需要一到两秒。
我听说使用多个文件组(我目前没有这样做)可能会有所帮助。这是真的吗?如果是的话,为什么/这会有什么帮助?另外,如果有其他建议,即使是像使用更少的表这样的建议,我也愿意接受。我只是想加快数据库速度并希望使其处于可扩展的状态。
在性能方面,使用单独的文件/文件组的最大好处是它可以让您将数据分布在多个物理磁盘上。这是有益的,因为使用多个磁盘,可以同时处理多个数据请求(并行通常比串行更快)。在所有其他条件相同的情况下,这往往会提高性能,但多少取决于您的特定数据集和您正在运行的查询。
根据您的描述,您担心的缓慢操作是创建表和检查表是否存在。如果每次运行生成 100 个表,则运行 1000 次后将生成 100,000 个表。我在单个数据库中创建那么多表方面没有太多经验,但您可能会遇到跟踪数据库模式的系统表的限制。在这种情况下,您可能会发现将表分布在多个数据库中会带来一些好处(这些数据库仍然可以位于同一个 SQL Server 实例中)。
一般来说,SQL Profiler 工具是查找慢查询的最佳起点。有一些数据列指示每个 SQL 批处理的 CPU 和 IO 成本,这应该会向您指出最严重的问题。一旦找到有问题的查询,我将使用查询分析器为每个查询生成查询计划,并查看您是否可以找出导致它们变慢的原因。通过打开查询窗口、输入查询并按 Ctrl+L 来执行此操作。对什么可能慢的完整讨论可以写满一整本书,但值得关注的是表扫描(对于大表来说非常慢)和低效的连接。
最后,您也许可以通过重写查询来改进事情,或者您可能必须对表架构进行更广泛的更改。例如,也许有一种方法每次运行只创建一个或几个表,而不是 1000 个。有关您的特定设置的更多细节将有助于我们给出更详细的答案。
我还推荐这个网站,其中提供了许多有关如何加快速度的技巧:
http://www.sql-server-performance.com/ http://www.sql-server-performance.com/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)