![]() |
1
4
听起来像是中等服务器上的一个相当容易管理的负载—您还没有说明在进行这些插入和更新(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
你可以试试 SQL Server samples 在codeplex或 DatabaseAnswers.com . |
![]() |
3
3
以下是一些有关SQL Server故障排除和优化性能的资源,我发现它们非常有用: http://updates.sqlservervideos.com/2009/09/power-up-with-sql-server-sql-server-performance.html 特别是,有效地使用索引可以极大地提高性能。我认为大多数web应用程序,在大多数情况下,读的比写的要多得多。此外,表达的可裁剪性会对性能产生严重影响。 |
![]() |
4
2
这是一个更好的主题首先与书籍探讨,因为它是高度技术性和复杂性。 我要指出的是,创建这个网站的人包括几个使用非常大的数据库的人。你可以从他们身上学到很多东西。 http://lessthandot.com/ |
![]() |
Michael Samuel · MYSQL在以下情况下自动创建索引 6 年前 |
![]() |
Patricia Rozario · 数据库设计确保一对一关系 6 年前 |
![]() |
dryhay · MySQL“多对多”关系错误 6 年前 |
![]() |
L. Fox · 我在这里用的是什么样的Laravel雄辩的关系 6 年前 |
![]() |
Geoff Harper · 我应该如何构建关系松散的SQL db 6 年前 |
![]() |
waroxx · SQL—当多个表具有相同的列时,最好怎么做 6 年前 |
![]() |
Lumpi01 · SQL 2不同的注释类型-最佳解决方案? 6 年前 |
![]() |
Hayreddin Tüzel · 预约系统数据库建模[关闭] 6 年前 |