我有一个中型SQL Server 2008数据库,其中包含精算数据。它的所有用例都是只读查询。在这种情况下,我应该考虑哪些特殊优化?或者我应该坚持优化数据库的常规规则吗?
答案 0 :(得分:7)
一种策略是将只读文件组添加到您的数据库中,并将您的只读表放在那里。只读文件组允许SQL Server进行许多优化,包括消除所有锁定等。
除标准数据库优化外:
答案 1 :(得分:6)
在数据库中:
在节目中:
答案 2 :(得分:5)
如果它是只读的,那么你可以做的一件事就是将索引放在任何可能有用的东西上(空间允许)。通常,添加索引是在写入性能和读取性能增益之间的权衡。如果你摆脱了写作,它就不再是一种权衡。
加载数据库时,您希望删除所有/大多数索引,执行加载,然后将索引放回表中。
答案 3 :(得分:5)
我不确定你认为“正常规则”,但这里有一些建议。
如果你100%确定它是只读的,你可以set the transaction isolation level to READ_UNCOMMITTED。这是最快的读取设置,但如果您正在写表,它将导致幻像读取和脏读。
如果您有视图,请使用索引视图(为它们创建聚簇索引)。由于它们永远不会被更新,因此性能损失被否定。
答案 4 :(得分:4)
答案 5 :(得分:4)
对于只读表,请考虑更改索引以使用100%的填充因子。
这将增加每个数据页面上的数据量。每页更多数据,读取页面更少,I / O更少,因此性能更佳。
我喜欢这个选项,因为它可以在不更改代码或更改表格的情况下提高性能。
答案 6 :(得分:2)
对于性能调整,您可以执行几项操作。 Denormailzation工作。适当的聚簇索引取决于查询数据的方式。我不建议使用nolock提示。我使用快照隔离级别。
对于数据库在磁盘上的布局方式也很重要。对于只读性能,我建议使用Raid 10,将单独的mdf和ldf用于隔离的主轴。通常,对于生产数据库,它将是数据的Raid 5和日志的Raid 1。确保每个cpu都有一个tempdb文件,用于排序,一个好的起始大小是5gb数据和每个cpu 1GB日志。还要确保通过showplan运行查询或触发,以帮助尽可能优化它们。确保服务器设置中已启用并行性。
此外,如果您有足够的时间和空间来获得最佳性能,我会准确地确定数据在磁盘上的位置,创建文件组并将它们放在完全独立的卷上,这些卷是每个卷中的隔离磁盘。