gpt4 book ai didi

sql-server - 识别需要分区的对象

转载 作者:行者123 更新时间:2023-12-02 23:56:13 24 4
gpt4 key购买 nike

我们有一个与 Microsoft SQL Server 数据库一起运行的企业应用程序。

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

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

最佳答案

有关 SQL Server 分区的文献提到了分区带来的各种好处,但减少内存使用不是其中之一。您谈到“内存的极端使用”,并且您说“我发现解决此问题的方法之一是 Sql Server 表分区”,但我无法验证这一说法。

最常见的分区类型是水平分区,即将表划分为行组。通过这种分区,如果您确实知道自己在做什么(如果您以一种让绝大多数查询仅命中其中一个分区的方式构建事物),您应该能够预期不会出现净增长或减少内存消耗。但是,如果您的查询不断命中多个分区,那么您的服务器可能会遇到需要保持缓存的行数增加的情况。

另一种分区是垂直分区,即将表划分为多组列。通过这种分区,您可能会体验到内存使用的改善,但仅限于 SQL Server 愚蠢到将未使用的字段保留在内存中,因此通过将未使用的列移动到单独的分区中,理论上您可以防止这些未使用的字段曾经被加载到内存中。但是,我认为 SQL Server 不会愚蠢到将未使用的字段保留在内存中,因此通过垂直分区表,我希望您获得的内存不会比替换每个 SELECT * 获得的内存多。 >(100 列),带有 SELECT col_1, col_5, col_17。 (仅您需要的列。)

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

因此,例如,如果您有很少访问的前几年的销售行,您可能需要根据年份对销售表进行分区,以便只有当前年份的分区才会出现大量操作。这个决定是对数据集的结构和数据的实际用途深入了解和仔细推理的结果。

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

关于sql-server - 识别需要分区的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33916139/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com