据我所知,当您在表上定义列时,就定义了它的精度。这种精度需要一个字节,并存储在列级别上。如果使用5或更高的精度,那么DateTime2列将占用每一行8个字节。(精度不存储在行级别。)
但是,当您将相同的DateTime2转换为VarBinary时,它将花费9个字节。这是因为它需要存储在列级别上的精确字节。
我很好奇这与DateTime2存储在内存中的时间有什么关系。假设我内存中有1,000,000 DateTime2s (每个内存的精度为5或更高)。这将占用8,000,000字节的内存,还是9,000,000字节的内存?
更大的压力?
发布于 2022-04-26 20:53:19
与日期时间相比,默认精度的DATETIME2不会对PLE造成更大的压力。缓冲池由8 KB页组成.与每个页面的内部存储工作相比,页面计数才是重要的。说100万列值将花费800万或900万字节是不正确的。引用文档的话:
缓冲区中的缓冲区,缓冲区是内存中的8 KB页,大小与数据或索引页相同。因此,缓冲区缓存被划分为8 KB页。在缓冲区管理器需要缓冲区区域读取更多数据之前,缓冲区缓存中将保留一个页面。数据只有在数据被修改后才会写回磁盘。这些内存中修改的页面被称为脏页。当页面与磁盘上的数据库映像等效时,它是干净的。在写回磁盘之前,可以多次修改缓冲区缓存中的数据。缓冲池也称为缓冲区缓存。缓冲池是所有数据库为其缓存的数据页共享的全局资源。缓冲池缓存的最大和最小大小是在启动期间或在使用sp_configure动态重新配置server实例时确定的。此大小确定可在运行实例中的任何时候缓存在缓冲池中的最大页数。
https://dba.stackexchange.com/questions/311366
复制相似问题