gpt4 book ai didi

sql - 数据如何加载到sql server内存中

转载 作者:行者123 更新时间:2023-12-02 22:38:52 26 4
gpt4 key购买 nike

我是sql server的初学者。我已经阅读了sql server中的缓冲区缓存。我认为它是系统RAM中的位置,一旦执行查询,数据将被存储在其中。如果这是正确的,我有一个有关查询执行的几个问题。

1)如果我的RAM大小是2GB,并且我的sql服务器中有10GB大小的数据,并且如果我执行sqlstatment从数据库检索所有数据(10GB),会发生什么(工作/不工作) ?

2)在同样的情况下,如果多个用户执行每次检索 5 GB 的查询(总共 10 GB),会发生什么?

最佳答案

当您发出SELECT * FROM [MyTable]并且您的表在只有 2Gb RAM 的系统上有 10Gb 时,数据库不必一次读取整个 10Gb内存中。选择将启动 scan数据,从第一个 data 开始页。为此,它只需要内存中的该页面(8Kb),因此它读取该页面并消耗 8Kb RAM。当它扫描此页面时,它会生成您看到的作为结果集的输出。一旦完成此页面,它就需要下一页,因此它读取在内存中。它扫描其中的记录并生成结果输出。然后是下一页,然后是下一页。关键点是,一旦页面完成,就不再需要它。当它不断地将这些 8kb 页面添加到 RAM 中时,它们最终会加起来并消耗所有空闲 RAM。在那一刻,SQL 将释放 RAM 中旧的、未使用的页面,从而为新页面腾出空间。它将继续这样做,直到读取表的整个 10Gb。

如果有两个用户各自读取 5GB 的表,则情况完全相同。每个用户的查询一次仅扫描一页,当他们取得进展并继续阅读页面时,他们将填满 RAM。当所有可用的 RAM 都被使用时,SQL 将开始丢弃 RAM 中的旧页面,为新页面腾出空间。

在现实世界中,由于诸如 read-ahead 之类的考虑,事情变得更加奇特。 .

顺便说一句,您永远不应该扫描 10Gb 的数据。您的应用程序应该始终只请求它需要的数据,并且应该可以使用索引快速检索数据,以避免需要检查整个表的大规模扫描。

关于sql - 数据如何加载到sql server内存中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9229686/

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