Chinaunix首页 | 论坛 | 博客
  • 博客访问: 432530
  • 博文数量: 239
  • 博客积分: 8010
  • 博客等级: 中将
  • 技术积分: 2431
  • 用 户 组: 普通用户
  • 注册时间: 2008-06-02 21:12
文章分类
文章存档

2008年(239)

我的朋友

分类: DB2/Informix

2008-06-18 00:15:55

语句缓冲区

SQL语句缓冲区,在数据库系统启动时分配,用来存放由优化器生成的SQL语句执行计划。对反复被使用的SQL语句,可以避免被多次分析、优化。

SQL语句在被执行前,首先要由优化器进行语法分析,然后根据统计信息,生成执行计划。这一操作既花费时间、消耗系统资源,又降低了用户请求的响应时间。

尽可能减少优化器对SQL语句的分析、优化次数,是数据库系统提高处理能力的一种必然方式。其中一种实现方法就是使用SQL语句缓冲区,将SQL语句经优化器分析、优化过的执行计划,保存在这一内存空间中。

我们知道,应用系统中有许多相同、相似的SQL语句被反复地调用、执行,将这些SQL语句第一次执行时生成的执行计划,存放在内存中,随后的执行就可以直接使用,不用重新生成,从而可以有效地减少优化器的分析、优化次数。

为了使用SQL语句保存在内存中的执行计划,代理进程在处理SQL语句时,首先查看SQL语句缓冲区,如果发现和该SQL语句相匹配的执行计划,就直接使用它,否则就交由优化器分析、优化。

数据库对象当前的结构、统计信息,被用来找出SQL语句费用最低的执行计划。如果这些信息发生了改变,SQL语句存放在内存中的执行计划就失效。随后对同一个SQL语句的处理,会重新由优化器进行分析、优化,生成执行计划。因此,为避免SQL语句的再次编译,应不要在数据库系统正常运行时对系统进行维护,如更改表的字段、在表中增加索引、生成表的统计信息等。这些工作可以放在业务不繁忙时进行,比如夜间。

阅读(1127) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~