SQL Server 页面缓存

Joh*_* L. 4 sql-server

如果我没记错的话,SQL Server 会缓存页面,以免每次都访问磁盘。在集群中共享存储和多个活动 SQL 服务器的情况下,这种缓存如何工作?由于有多个活动的 SQL 服务器,服务器如何知道页面是否仍然有效?我们是否需要禁用共享存储案例的这种缓存行为?如果是这样,如何?

Han*_*non 9

通常,任何单个数据库只能由单个 SQL Server 实例打开1。即使在共享存储上,多个实例也无法同时提供对数据库相同页面的写访问。

SQL Server 确实缓存页面,但是每个 SQL Server 实例分配自己的私有内存,并且没有其他进程,包括其他 SQL Server 实例,可以访问该内存。这是设计使然,并以此作为实现一致性的原则原则。

在共享存储的情况下,通常用于 SQL Server 群集,您有两台(或更多)计算机连接到共享存储,但是在任何给定时间,只有其中一台服务器可以实际打开存储在该共享存储上的数据库。如果其中一台服务器停止运行,集群服务将提供对另一台服务器的访问,从而允许该机器上的实例为数据库提供服务。

单个 Windows 故障转移群集服务器可以安装多个 SQL Server 群集,但是每个群集都有自己的共享存储,并且基本上用于所有意图和目的彼此独立。它们可能占用同一台服务器计算机,也可能占用。尽管如此,他们永远无法从同一个数据库文件中读取数据。


1 - 可以通过可扩展共享数据库跨多个 SQL Server 实例支持只读报告工作负载。这种设置的成本效益比通常远低于使其可行所需的成本效益比。