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语句的再次编译,应不要在数据库系统正常运行时对系统进行维护,如更改表的字段、在表中增加索引、生成表的统计信息等。这些工作可以放在业务不繁忙时进行,比如夜间。