识别需要分区的对象

时间:2015-11-25 12:07:10

标签: sql-server tsql partitioning sql-server-2014 database-partitioning

我们有一个使用microsoft sql server database运行的企业应用程序。

目前我们遇到了很多性能问题,其中一个原因是我们发现内存的极端用法(缓冲池中加载的大数据)。正如我提到的大数据,我们的应用程序运行着3000万到3000万的数据,很少使用很少的历史数据。 我发现克服这个问题的方法之一是Sql Server表分区,学会了如何使用企业版应用相同但无法找到资源来找出痛点。

任何人都可以指导我, 如何查找需要表分区的对象? 如何根据应定义的分区来查找参数/列?

3 个答案:

答案 0 :(得分:4)

有关SQL Server分区的文献提到了您应该从分区中获得的各种好处,但减少了内存使用量而不是其中之一。你说“内存的极端使用”,你说“我发现克服这个问题的方法之一是Sql Server表分区”,但我无法验证这一说法。

最常见的分区类型是水平分区,您可以将表格划分为多组行。通过这种分区,如果你真的知道自己在做什么,(如果你以绝大部分的查询只打击其中一个分区的方式构建事物),你应该能够预期没有净增加或减少内存消耗。但是,如果您的查询不断访问多个分区,那么您的服务器可能会增加缓存所需的行数。

另一种分区是垂直分区,您可以将表分成多组列。使用这种分区,您可能会遇到内存使用情况的改善,但只是在SQL Server足够笨到可以将未使用的字段保留在内存中的情况下,因此通过将未使用的列移动到单独的分区中,理论上可以防止这些未使用的字段永远被装入记忆中。但是,我认为SQL Server并不是那么愚蠢以至于将未使用的字段保留在内存中,因此通过对表进行垂直分区,我希望您不会获得比通过替换每个SELECT *(100列)获得的内存更多的内存)SELECT col_1, col_5, col_17。 (只有您需要的列。)

此外,如果我们理所当然地认为分区是您遇到的任何问题的解决方案,那么有关SQL Server分区的文献似乎没有提及您可以用来确定的任何通用的方法或工具您应该在何处以及如何对表进行分区:分区决策似乎基于仔细考虑数据库模式的结构,各种表中的行数和列数,以及对日常运算中数据使用方式的充分了解。

因此,例如,如果您拥有前几年很少访问的销售行,您可能希望根据年份对销售表进行分区,以便只有当前年份的分区才能看到很多操作。这个决定是对数据集结构和数据实际使用情况的深入了解和谨慎推理的结果。

因此,如果您已经发布了数据库模式,每个表的行数以及描述如何使用表的完整文章,那么理论上可以给出关于如何对数据库进行分区的合理建议。但是,由于您没有提供任何信息,因此您实际上是在寻找一种通用的方法来查找需要分区和分区列的对象,而答案是没有这种普遍适用的方法。

答案 1 :(得分:1)

我们浏览了大量数据库资料,发现数据库引擎优化顾问有助于识别所需的数据库结构更改。 它还建议所需的索引和具有预期增长率的统计数据。

答案 2 :(得分:0)

索引也会有所帮助。但是,您需要根据查询执行次数来识别要创建索引的属性。