识别需要分区的对象

Identify objects which requires partitioning

我们有一个与 Microsoft sql 服务器数据库一起运行的企业应用程序。

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

谁能指导我, 如何找到需要table分区的对象? 如何根据应定义的分区找到 parameters/columns?

关于 SQL 服务器分区的文献提到了您应该从分区中获得的各种好处,但减少内存使用量是 而不是 其中之一。你说 "extreme usage of memory",你说 "one of the approach I found to overcome this problem is Sql Server table partitioning",但我无法验证这个说法。

最常见的分区类型是水平分区,将 table 分成多组行。使用这种分区,如果您真的知道自己在做什么,(如果您以一种让绝大多数查询只命中一个分区的方式构建事物,)您应该能够期望没有净增加或减少内存消耗。但是,如果您的查询不断命中多个分区,那么您的服务器可能会遇到需要保持缓存的行数增加的情况。

另一种分区是垂直分区,将 table 分成几组列。使用这种分区,您可能会体验到内存使用情况的改善,但仅限于 SQL 服务器足够愚蠢以将未使用的字段保留在内存中,因此通过将未使用的列移动到单独的分区中,理论上可以防止这些未使用的字段不会被加载到内存中。但是,我会假设 SQL 服务器不会笨到将未使用的字段保留在内存中,因此通过垂直分区 table 我希望您获得的内存不会比替换每个字段获得的内存多SELECT *(100 列)和 SELECT col_1, col_5, col_17。 (只有您需要的列。)

此外,如果我们想当然地认为分区是您遇到的任何问题的解决方案,那么关于 SQL 服务器分区的文献似乎没有提到任何类型的普遍适用的方法或工具您可以使用它来确定应该在何处以及如何对 table 进行分区:分区决策似乎是基于对数据库架构的结构、各种 table 中的行数和列数的仔细考虑s,以及如何在日常操作中利用数据的良好知识。

因此,例如,如果您有很少访问的前几年的销售行,您可能希望根据年份对销售进行分区 table,这样只有当年的分区会被看到很多行动。这个决定是对数据集的结构和数据的实际用途深入了解和仔细推理的结果。

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

索引也有帮助。但是您需要根据执行查询的次数来确定要在其上创建索引的属性。

我们检查了一堆数据库 material,发现数据库引擎优化顾问有助于确定所需的数据库结构更改。 它还建议具有预期增强率的所需索引和统计信息。