AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 222326
Accepted
Frederik Vanderhaegen
Frederik Vanderhaegen
Asked: 2018-11-13 02:00:46 +0800 CST2018-11-13 02:00:46 +0800 CST 2018-11-13 02:00:46 +0800 CST

sql server 缓存时钟指针

  • 772

我正在研究如何解决本地内存压力问题。如果我错了,请纠正我,但据我了解,SQL Server 对缓存和用户存储使用 CLOCK 算法。每个时钟都有两根指针,一根是外部的,一根是内部的。

我的兴趣是内部时钟指针。如果访问缓存的工作人员注意到缓存大于内存的特定百分比,则内部时钟指针开始为该缓存释放内存。

使用 dmvdm_os_memory_cache_clock_hands我可以看到有关时钟指针的信息。该列rounds_count表示时钟指针扫描整个缓存的次数。last_tick_time是手最后移动的时间。round_start_time是最后一次扫描的时间。

last_tick_time和 和有什么不一样round_start_time?是不是手一动就没有清理缓存?

时钟的每个滴答声会删除多少条目?

有人可以帮我理解 SQL Server 中这个时钟算法的工作原理吗?

sql-server memory
  • 1 1 个回答
  • 525 Views

1 个回答

  • Voted
  1. Best Answer
    Shanky
    2018-11-13T02:39:18+08:002018-11-13T02:39:18+08:00

    如果我错了,请纠正我,但据我了解,SQL Server 对缓存和用户存储使用 CLOCK 算法。每个时钟都有两根指针,一根是外部的,一根是内部的。

    是的,几乎就像你所说的,但让我再补充一点。Cache并Userstores共享称为最近最少使用(LRU)算法的通用成本计算和算法。这种 LRU 机制有所谓的“时钟算法”。该算法具有所谓的“手”​​。在 SQl Server 中有各种驱逐策略可以从 SQL Server 缓存中删除“旧”条目并帮助此 SQL Server 有 2 个时钟指针:

    1. 外部:实施全球政策

    2. 内部:执行当地政策

    在处理从缓存中删除旧条目时,您可以将策略视为规则。

    如果访问缓存的工作人员注意到缓存大于内存的特定百分比,则内部时钟指针开始为该缓存释放内存。

    发生的事情还有很多,不像内部时钟会在使用的总内存大于一定百分比后“仅”通过删除旧条目来释放内存,LRU 和内部内存压力也被考虑在内。

    last_tick_time 和 round_start_time 有什么区别?是不是手一动就没有清理缓存?

    last_tick_time- 时钟指针最后移动的时间。

    round_start_time- 时钟指针开始当前回合的时间。它清扫缓存的回合。

    时钟的每个滴答声会删除多少条目?

    没有预定义的值,在 LRU 算法完成其任务后,其他线程会看到缓存中有多少条目是“旧的”,然后将其删除。如果存在内存压力,该值可能会增加,并且扫描可能会过于频繁。

    有人可以帮我理解 SQL Server 中这个时钟算法的工作原理吗

    Microsoft 的 Slava Oaks 已经写了很多关于它的文章。我会引用他的博客

    在 SQL Server 2005 中我们引入了新的通用缓存框架,除了 Buffer Pool 之外的所有缓存都利用了它。该框架由一组商店和 ResourceMonitor 组成。存储分为三种类型:缓存存储、用户存储(这里的名称与存储的内部使用有关——它不必与用户做任何事情)和对象存储。缓存和用户存储共享共同的 LRU 机制并利用共同的成本核算。过程缓存是缓存存储的示例,元数据缓存是用户存储的示例。对象存储只是内存块池,既不需要 LRU 也不需要成本计算。网络库利用对象存储来池化网络缓冲区。

    Store 的 LRU 机制相当简单——我们使用在操作系统文献中彻底讨论过的时钟算法的变体。你记得时钟算法有一只手。当手移动时,它会降低条目的成本。一旦条目的成本达到 0,就可以从缓存中丢弃该条目。每当重新使用条目时,成本都会重置。在处理多个缓存时,设计者必须考虑全局和局部驱逐策略。全局策略考虑全局图片并允许在所有缓存中运行 LRU、时钟算法。反过来,本地策略只关注本地资源消耗,并且只对给定的缓存运行 LRU。

    为了满足全局和本地策略,SQL Server 的存储实现了两只手:外部和内部(请不要将时钟指针名称与内存压力类型混淆。没有联系!)。外部时钟指针执行全局策略,内部时钟指针执行局部策略。尽管每个缓存都有自己的外部指针,但外部指针“同步”移动 - 一次一个。他们的任务是模拟全局手。

    补充阅读:缓冲区缓存的时钟指针

    • 3

相关问题

  • SQL Server - 使用聚集索引时如何存储数据页

  • 我需要为每种类型的查询使用单独的索引,还是一个多列索引可以工作?

  • 什么时候应该使用唯一约束而不是唯一索引?

  • 死锁的主要原因是什么,可以预防吗?

  • 如何确定是否需要或需要索引

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve