代码之家  ›  专栏  ›  技术社区  ›  Jason

优化只读sql数据库的提示

  •  10
  • Jason  · 技术社区  · 16 年前

    我有一个中型的SQL Server 2008数据库,里面有精算数据。它的所有用例都是只读查询。在这种情况下,有什么特别的优化需要考虑吗?或者我应该只遵守优化数据库的常规规则吗?

    7 回复  |  直到 16 年前
        1
  •  8
  •   RickNZ    16 年前

    一种策略是将只读文件组添加到数据库中,并将只读表放在其中。readonly文件组允许SQL Server进行一些优化,包括消除所有锁。

    除了标准数据库优化之外:

    1. 确保所有表和索引都没有碎片
    2. 考虑添加索引,否则可能会因为更新成本过高而避免添加索引
        2
  •  7
  •   Andrew Lygin    16 年前

    在数据库中:

    1. 使之非标准化。
    2. 在需要的地方使用更多的索引。
    3. 如果需要,可以在报表中聚合一些数据。

    在程序中:

    1. 使用读取未提交的隔离级别。
    2. 使用自动提交来转义长期事务。
        3
  •  5
  •   Tom H zenazn    16 年前

    如果它是只读的,那么您可以做的一件事就是将索引放在任何可能有帮助的地方(空间允许)。通常,添加索引是写操作的性能影响和读操作的性能提高之间的权衡。如果你不写,这就不再是一种折衷了。

    加载数据库时,您需要删除所有/大部分索引,执行加载,然后将索引放回表中。

        4
  •  5
  •   womp    16 年前

    我不知道你认为什么是“正常规则”,但这里有一些建议。

        5
  •  4
  •   Mark Canlas    16 年前
    1. 使数据非标准化。
    2. 应用适当的索引。
    3. 预先计算聚集。
    4. 在条带化磁盘上实现数据库。
    5. 我从来没有见过这样做,但如果你能以某种方式将整个东西加载到内存(RAM磁盘??)那太快了,对吧?
        6
  •  4
  •   Darryl Peterson    16 年前

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

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

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

        7
  •  2
  •   Tom H zenazn    16 年前

    对于性能优化,您可以做几件事。非标准化工作。适当的聚集索引取决于如何查询数据。我不建议使用nolock提示。我会使用快照隔离级别。

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

    另外,如果您有时间和空间来获得最佳性能,我将精确地映射数据在磁盘上的位置,创建文件组并将它们放在每个卷中都是独立磁盘的完全独立的卷上。