【问题标题】:How can I check if SQL Server memory caching is enabled on my server?如何检查我的服务器上是否启用了 SQL Server 内存缓存?
【发布时间】:2016-02-29 23:46:34
【问题描述】:

我有几个关于 SQL Server 2008 的问题。

如何检查 SQL Server 2008 中的内存缓存功能是否已启用?是否有一个变量可以打开内存缓存onoff? “我只是想确保它已开启”

另外,SQL Server 什么时候决定这个缓存的数据已经过时,所以它@98​​7654323@ 它并再次执行hard disk read

最后,假设我有这个查询SELECT * FROM table1 WHERE id = 10 在记录被缓存在内存中并且一个进程试图读取它之后,SQL Server 是在内存中对该记录放置共享锁还是内存中没有锁?

【问题讨论】:

    标签: sql sql-server caching memory memorycache


    【解决方案1】:

    简短的回答是否定的,您不能在服务器级别关闭内存缓存。该引擎会为您处理内存缓存,并且在缓存方式方面非常激进,您基本上希望所有查询都从内存而不是磁盘返回。缓冲区比磁盘访问快几个数量级。

    查看这些解释缓存如何工作的文章 - 在 SQL Server 中称为缓冲池。

    https://dba.stackexchange.com/questions/43572/how-to-see-what-is-cached-in-memory-in-sql-server-2008

    Paul Randal 的任何东西都非常明确 - http://www.sqlskills.com/blogs/paul/inside-the-storage-engine-whats-in-the-buffer-pool/

    在锁定方面,这是一个关于 SO 的常见问题。简单来说,默认行为是 SQL Server 为读取器使用共享锁。因此,多个阅读器可以同时访问数据。 SQL Server 使用动态锁定策略,通常根据需要将锁从页级升级到表级,但如果认为合适,可以降级到行级锁。但是,这是动态完成的,并由 SQL Server 引擎自动处理。这是一篇关于这个主题的文章 - https://technet.microsoft.com/en-us/library/ms189286(v=sql.105).aspx

    在 SO 之前也有很多人问过这个问题,所以请查看此链接 What are row, page and table locks? And when they are acquired? 和其他人

    【讨论】:

    • 谢谢你。我仍然不清楚 SQL Server 何时会决定数据已老化。另外,当多个进程试图从缓存中访问同一条记录时,SQL Server 会锁定内存中的记录吗?
    猜你喜欢
    • 2011-11-12
    • 2013-09-29
    • 1970-01-01
    • 2011-06-15
    • 1970-01-01
    • 2021-12-30
    • 1970-01-01
    • 2017-09-04
    • 1970-01-01
    相关资源
    最近更新 更多