目前,我正在开发一种使用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/
| 归档时间: |
|
| 查看次数: |
1543 次 |
| 最近记录: |