科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道轻松掌握执行计划的高速缓存和重新使用

轻松掌握执行计划的高速缓存和重新使用

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

Microsoft SQL Server 2000 有用于存储执行计划和数据缓冲区的内存池。池内分配给执行计划或数据缓冲区的百分比随系统状态动态波动。

作者:赛迪网 37461 来源:天新网 2008年3月25日

关键字: 数据库 Mssql SQL Server SQL

  • 评论
  • 分享微博
  • 分享邮件

Microsoft® SQL Server™ 2000 有用于存储执行计划和数据缓冲区的内存池。池内分配给执行计划或数据缓冲区的百分比随系统状态动态波动。内存池中用于存储执行计划的部分称为过程高速缓存。

SQL Server 2000 执行计划包含下面两个主要组件:

◆查询计划
    执行计划的主体是一个重入的只读数据结构,可由任意数量的用户使用。这称为查询计划。查询计划中不存储用户环境。查询计划在内存中永远不会有一个或两个以上的复本:一个复本用于所有串行执行,一个复本用于所有并行执行。并行复本覆盖所有的并行执行,与并行执行的并行度无关。

◆执行环境
    每个正在执行查询的用户都有一个包含其执行专用数据(如参数值)的数据结构。该数据结构称为执行环境。执行环境数据结构可以重新使用。如果用户执行查询而其中的一个结构未使用,将会用新用户的环境重新初始化该结构。

在 SQL Server 2000 中执行任何 SQL 语句时,关系引擎将首先查看过程高速缓存中是否有用于同一 SQL 语句的现有执行计划。SQL Server 2000 重新使用所找到的任何现有计划以节省重新编译 SQL 语句的开销。如果没有现有执行计划,则 SQL Server 2000 将为查询生成新的执行计划。

SQL Server 2000 有一个高效的算法,可查找用于任何特定 SQL 语句的现有执行计划。在大多数系统中,这种扫描所使用的最小资源比通过重新使用现有计划而不是编译每个 SQL 语句所节省的资源要少。

该算法将新的 SQL 语句与高速缓存内现有的未用执行计划相匹配,并要求所有的对象引用完全合法。例如,这两个 SELECT 语句中的第一个语句与现有计划不匹配,而第二个语句则匹配:

SELECT * FROM Employees
SELECT * FROM Northwind.dbo.Employees

在 SQL Server 2000 实例中,个别执行计划重新使用的概率比在 SQL Server 6.5 或更早版本中高。

执行计划的老化

执行计划生成后便驻留在过程高速缓存中。只有当需要空间时,SQL Server 2000 才使旧的未用计划从高速缓存老化掉。每个查询计划和执行环境都有相关的成本因子,可表明编译结构所需的费用。这些数据结构还有一个年龄字段。对象每由连接引用一次,其年龄字段便按编译成本因子递增。例如,如果一个查询计划的成本因子是 8 且被引用了两次,它的年龄将变为 16。惰性写入器进程定期扫描过程高速缓存内的对象列表。惰性写入器减少每个对象的年龄字段,每扫描一次减少 1。在本例中,查询计划的年龄经过 16 次过程高速缓存扫描后减为 0,除非其他用户引用了该计划。如果满足下面三个条件,惰性写入器进程将释放对象:

内存管理器需要内存且所有可用内存都正在使用。
    对象的年龄字段是 0。
    对象在当前没有被连接引用。

因为每次引用对象时其年龄字段都会增加,所以经常被引用的对象的年龄字段不会减为 0,也不会从高速缓存老化掉。不经常被引用的对象将很快满足释放条件,但是不会真被释放,除非其它对象有内存需求。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章