上一篇 | 下一篇

Informix Dynamic Server 中的 SQL 语句缓存

发布: 2008-7-01 13:42 | 作者: admin | 来源: | 查看: 0次

Informix Dynamic Server 中的 SQL 语句缓存

热 荐

【字体:小 大】

Informix Dynamic Server 中的 SQL 语句缓存

作者:- 文章来源:- 点击数:1212 更新时间:2006-4-22

Uma Iyer

IBM Lenexa Lab

2004 年 1 月 本文描述 Informix Dynamic Server (IDS) 中的 SQL 语句缓存 (SQL Statement Cache, SSC) 功能。根据应用程序的类型,SQL 语句缓存这一功能有助于提高查询的性能。

简介

本文描述 Informix Dynamic Server (IDS) 中的 SQL 语句缓存 (SQL Statement Cache, SSC) 功能。SSC 是共享内存中的一块区域,用于存储和共享各用户会话间相同语句的数据结构。下面是使用 SSC 功能所带来的好处: 减少了内存消耗,因为查询数据结构是在不同用户间共享的。 查询处理时间更快,因为对存在于缓存中的语句,数据库服务器可以跳过解析和优化阶段,从而可以为查询提供更好的响应。

如果 SSC 功能已启用,数据库服务器会做以下事情: 当某个用户 user1发出一条 SQL 语句时,数据库服务器检查语句缓存,查看缓存中是否存在相同的语句。 如果缓存中不存在这样的语句,数据库服务器将解析、优化并执行该语句。它还将检查该语句是否适于输入到缓存中。如果该语句可以输入到缓存中,那么数据库服务器将为该语句在缓存中添加一个条目。 当用户 user2执行同样的语句时,数据库服务器将检查缓存并且在缓存中找到这条语句。因此它不会再次解析和优化该语句,而只是使用缓存中的信息执行该语句。

一条语句要想输入到缓存中,应满足一组条件。以下是这些条件中的一部分: 该语句应该是 SELECT、UPDATE、DELETE 和 INSERT 这四种语句之一。 该语句不应包含任何用户定义例程。 该语句不能包含任何 Temporary 或 Remote 表。 该语句不应包含子查询。

要了解一组详尽的条件,请参考 IBM Informix Guide to SQL: Syntax。

SSC 配置参数

对于每个应用程序,都可以使用一组参数对 SQL 语句缓存进行配置。这些参数还用于决定哪些语句应该输入到缓存中。我们将简要地考察一下每个参数。 STMT_CACHE_HITS —— 这个参数用于指定一条查询在数据库服务器为其在缓存中设立完全缓存条目之前应该执行过的次数。如果查询执行过的次数少于这个值,那么服务器将在缓存中为这条语句设立一个 key-only 条目,这种条目只包含该语句的文本。以后该语句每执行一次, hits列的数字就加 1。当该语句执行过的次数达到这个参数的值时,数据库服务器将为其在缓存中设立一个完全缓存条目,这种条目包含语句和查询数据结构。 STMT_CACHE_SIZE —— 这个变量用于指定语句缓存的大小。SSC 大小的默认值是 512 千字节。在下一节,我们将讨论配置这个参数时要考虑的一些事情。 STMT_CACHE_NOLIMIT —— 这个变量用于指定是否将缓存的大小限制为 STMT_CACHE_SIZE 值。默认情况下,即使缓存的大小超过了 STMT_CACHE_SIZE 值,服务器也会将语句输入到缓存中。 STMT_CACHE_NUMPOOL —— 当服务器需要在语句缓存中创建一个完全缓存条目时,默认情况下它会只从单个池中分配内存。当应用程序的用户数量非常大时,这会对性能产生负面影响。在这种情况下,可以使用这个参数将池的数量配置得更大一些。

使用 onstat实用程序监视 SSC 的使用情况

onstat -g ssc选项显示语句缓存中的完全缓存条目。输出中的 hits列表明同一条语句执行过的次数。因此, hits 列中的值较大就意味着我们更有效地使用了 SQL 语句缓存来共享查询结构,从而也就提高了性能。 #hits 列与 STMT_CACHE_HITS 配置参数相对应。

输出中的 flag(标志)列表明该条目是否是完全缓存的。当一条语句执行过的次数达到 #hits 值的时候,数据库服务器就会在缓存中为其设立一个完全缓存条目。flag 列中的 F值表明该条目是完全缓存的。key-only 条目(只在缓存中输入了语句的文本)是通过 flag 列中的 - 来表明的。不过,只有在 onstat -g sscall 输出中才有这些条目。

字号: | 推荐给好友

21/212>

评分:0

我来说两句