优化只读sql数据库的技巧

时间:2009-12-09 20:17:51

标签: sql-server optimization

我有一个中型SQL Server 2008数据库,其中包含精算数据。它的所有用例都是只读查询。在这种情况下,我应该考虑哪些特殊优化?或者我应该坚持优化数据库的常规规则吗?

7 个答案:

答案 0 :(得分:7)

一种策略是将只读文件组添加到您的数据库中,并将您的只读表放在那里。只读文件组允许SQL Server进行许多优化,包括消除所有锁定等。

除标准数据库优化外:

  1. 确保所有表和索引都没有碎片
  2. 考虑添加由于更新成本过高而可能避免的索引

答案 1 :(得分:6)

在数据库中:

  1. 反规范化。
  2. 根据需要使用更多索引。
  3. 如果您在报告中需要,请汇总一些数据。
  4. 在节目中:

    1. 使用READ UNCOMMITTED隔离级别。
    2. 使用自动提交来逃避长期交易。

答案 2 :(得分:5)

如果它是只读的,那么你可以做的一件事就是将索引放在任何可能有用的东西上(空间允许)。通常,添加索引是在写入性能和读取性能增益之间的权衡。如果你摆脱了写作,它就不再是一种权衡。

加载数据库时,您希望删除所有/大多数索引,执行加载,然后将索引放回表中。

答案 3 :(得分:5)

我不确定你认为“正常规则”,但这里有一些建议。

答案 4 :(得分:4)

  1. 对数据进行反规范化。
  2. 应用适当的索引。
  3. 预先计算聚合。
  4. 在条带磁盘上实施数据库。
  5. 我从来没有见过这样做,但如果你能以某种方式将整个东西加载到内存(RAM磁盘???)中,那将是超快的,对吗?

答案 5 :(得分:4)

对于只读表,请考虑更改索引以使用100%的填充因子。

这将增加每个数据页面上的数据量。每页更多数据,读取页面更少,I / O更少,因此性能更佳。

我喜欢这个选项,因为它可以在不更改代码或更改表格的情况下提高性能。

答案 6 :(得分:2)

对于性能调整,您可以执行几项操作。 Denormailzation工作。适当的聚簇索引取决于查询数据的方式。我不建议使用nolock提示。我使用快照隔离级别。

对于数据库在磁盘上的布局方式也很重要。对于只读性能,我建议使用Raid 10,将单独的mdf和ldf用于隔离的主轴。通常,对于生产数据库,它将是数据的Raid 5和日志的Raid 1。确保每个cpu都有一个tempdb文件,用于排序,一个好的起始大小是5gb数据和每个cpu 1GB日志。还要确保通过showplan运行查询或触发,以帮助尽可能优化它们。确保服务器设置中已启用并行性。

此外,如果您有足够的时间和空间来获得最佳性能,我会准确地确定数据在磁盘上的位置,创建文件组并将它们放在完全独立的卷上,这些卷是每个卷中的隔离磁盘。