我们目前有一个包含数百万条记录(最大表中有 1400 万条记录)的生产数据库。
数据库的一个功能是提供时间表信息,因此单个表可以有 200 万个时间表,但连接到其他 5 个“详细信息”表,每个详细表都有 500k 到 14m 的记录。
此外,我们正在运行一些无法在短期内更改或更换的遗留软件。我们遇到的问题是,不幸的是,有些查询(也是遗留的且无法更改)正在执行大量表扫描。因此,查找 100 个时间表会导致扫描数百万行。
我不是专业的 DBA,但我相信我已经用尽可能多的逻辑和研究为我可能索引的所有内容建立了索引。另外我相信我已经设置了适当的重新索引工作等。
我们SQL Server 2008 (10.0.5500.0)
在一台有 32GB RAM(16GB 专门用于 SQL Server)的机器上运行。机器上没有太多其他东西,所以大部分资源都用于 SQL Server。
我们的下一个计划是可能向机器添加更多 RAM,并可能将 SQL Server 使用的 RAM 增加到 32GB。我们的数据库大小在磁盘上约为 56GB。
我的问题是,您认为我们应该考虑升级到 SQL Server 2014 Enterprise 以便我们可以对时间表进行分区吗?我是表分区的新手,但据我了解,它可能用于按站点和年份对我们的表进行分区?这样 1400 万行将被 10-20 个站点拆分,然后按年份进一步拆分,这样查询将扫描 10k-20k 行而不是 1400 万行。或者我只是完全错过了这里的标记?
欢迎任何其他建议。
谢谢你。
不,绝对不是。在 8 核的袖珍服务器上,您将花费大约 5 万美元,而且不太可能看到任何好处。
我建议按以下顺序尝试:
在最大的表中有 1400 万行和 16GB 的 RAM 专用于 SQL Server,听起来整个数据库几乎都适合内存。如果这是真的,问题很可能是查询中的二次(或更糟)行为,只能通过重写最严重的违规行为才能真正解决。
也就是说,我会尝试以下一项或两项:
我相信这些比分区数据表更有可能为您提供增量性能改进。
如果您没有 DBA,很可能服务器没有根据简单但关键的最佳实践进行配置。在你完成之前,你无法真正做出明确的诊断。
参与和专家评估需要完成的工作。然后要么做出改变,要么让他们去做。
你的索引和表格最近维护了吗?你的统计数据是最新的吗?碎片化和错误的统计数据会导致大问题。