代码之家  ›  专栏  ›  技术社区  ›  Nathan Ridley

用于高性能SQL Server数据库设计的资源

  •  6
  • Nathan Ridley  · 技术社区  · 14 年前

    我想对在线资源(博客、指南等,而不是论坛)提出一些建议,以帮助我善于设计高性能的SQL Server数据库,这些数据库可以处理大量数据,并且在每分钟的数据转换和查询方面有很重的负载。

    建议?

    编辑

    我说的负荷主要是数据周转。主表最多有一百万行,大约有30个不同大小的数据字段,每天更新大约30-40000行,每天至少有200000行用新数据更新。这些更新每天都在持续进行。除此之外,每天都需要从数据库中提取所有更改和更新,以使大型lucene索引保持最新。

    4 回复  |  直到 14 年前
        1
  •  4
  •   Cade Roux    14 年前

    听起来像是中等服务器上的一个相当容易管理的负载—您还没有说明在进行这些插入和更新(lucene的提取除外)和数据大小(字节/数据类型)时会发生什么类型的读取操作(您给出的基数似乎很好)

    在这一点上,我建议使用 regular SQL Server best practices -确定合适的模式(规范化,然后仅在必要时取消规范化)。 review execution plans ,使用索引优化向导, use the DMVs 要查找未使用的索引并将其删除, choose clustered indexes carefully 要管理分页符,请仔细选择数据类型和大小以及 use referential integrity and constraints where possible to give the optimizer as much help 尽可能的。除此之外,还有性能计数器和确保您的硬件/软件安装得到优化。

    在许多/大多数情况下,您永远不需要超越这个范围来实际重新设计您的体系结构。

    然而,即使如此,如果读取负载很重,插入和更新也会导致读写之间的锁定问题,然后您将研究应用程序的体系结构决策。

    另外,我也不担心一天有一百万行和200k个更新——但是你提到了lucene(即全文索引),所以可能有些列相当大。更新大的列并导出它们显然需要更长的时间,而且需要更多的带宽和IO。在一个狭长的百万行表中有30列与传统的数据类型列是完全不同的。您可能希望查看更新配置文件,并查看是否需要垂直分区表以将某些列移出行(如果这些列很大,则它们将已存储在行外)以改进锁定行为。

    因此,当您有很重的读取负载时,关键的事情是:插入和更新需要尽可能快,尽可能少地锁定(避免锁升级),尽可能少地更新索引以支持读取操作。

    如果读取负载很重(导致插入/更新开始发生冲突),但不需要100%的最新信息(例如5分钟或15分钟的延迟不明显),则可以保留数据库的只读版本(通过复制相同,差异y为性能编制索引,非规范化或以不同方式建模-类似于维度模型)。也许您的lucene索引可以包含额外的信息,以便昂贵的读取操作都保留在lucene中,即lucene可以覆盖许多大型读取操作,从而将数据库上的读取负载减少到支持插入/更新的基本读取(这些是典型的以及应用程序的事务部分(例如,客户服务信息屏幕将使用常规数据库,而小时仪表盘将使用辅助数据库)。

        2
  •  3
  •   tvanfosson    14 年前

    你可以试试 SQL Server samples 在codeplex或 DatabaseAnswers.com .

        3
  •  3
  •   RMorrisey    14 年前

    以下是一些有关SQL Server故障排除和优化性能的资源,我发现它们非常有用:

    http://updates.sqlservervideos.com/2009/09/power-up-with-sql-server-sql-server-performance.html

    特别是,有效地使用索引可以极大地提高性能。我认为大多数web应用程序,在大多数情况下,读的比写的要多得多。此外,表达的可裁剪性会对性能产生严重影响。

        4
  •  2
  •   HLGEM    14 年前

    http://www.amazon.com/s/ref=nb_sb_noss?url=search-alias%3Daps&field-keywords=high+performance+database

    这是一个更好的主题首先与书籍探讨,因为它是高度技术性和复杂性。

    我要指出的是,创建这个网站的人包括几个使用非常大的数据库的人。你可以从他们身上学到很多东西。 http://lessthandot.com/