我的数据库大小约为 1GB(根据我的数据库的 mdf 文件)。我的数据库服务器有 4GB 的 RAM。查看计算机在活动时的内存消耗,它大约占用了 85%(包括操作系统等)
这是否意味着所有 DB 读取活动都单独在内存中进行(即整个数据库都位于内存中)?还是仍然有必须转到磁盘的情况?
答案1
是的,整个数据库可能都存储在内存中。它会在检查点间隔将脏页刷新到磁盘。但请注意,所有更新都必须写入日志,并等待日志记录在持久存储上固化后才能提交。这篇旧论文SQL Server 2000 I/O 基础知识拥有您所需的所有详细信息,甚至更多。
但你不必猜测,你可以精确测量,看看它是否发生。相关的性能计数器是:
- 页面预期寿命页面在未被引用的情况下在缓冲池中停留的秒数。
- 页面读取次数/秒每秒发出的物理数据库页面读取次数。此统计信息显示所有数据库中的物理页面读取总数。由于物理 I/O 成本高昂,因此您可以通过使用更大的数据缓存、智能索引和更高效的查询,或者通过更改数据库设计来最大限度地降低成本。
- 页面写入/秒每秒发出的物理数据库页面写入次数。
答案2
整个数据库(即数据)不会存储在内存中(sql server)。在检查索引和/或键之后,它将检索指向数据文件中您要查找的数据的指针,然后可能会转到磁盘来检索它。如果没有键或索引,则必须扫描整个堆。
根据您所运行的 SQL Server 版本,可能存在用于缓存常用数据的策略,以最大限度地减少磁盘读取。
您可以获取内存数据库,例如 MySql 集群数据库......这旨在将整个数据库放入服务器集群的内存中,以实现高可用性/灾难恢复和快速数据检索。