♣答案部分
绑定变量这节的内容较多,下面给出这节涉及到的关系图:
(一)绑定变量的含义及优缺点
通常在高并发的OLTP系统中,可能会出现这样的现象,单个SQL的写法、执行计划、性能都是没问题的,但整个系统的性能就是很差,这表现在当系统并发的数量增加时,整个系统负载很高,CPU占用率接近100%。其实,这种系统性能随着并发量的递增而显著降低的现象,往往是因为这些系统没有使用绑定变量而产生了大量的硬解析所致。因为同一条SQL语句仅仅由于谓词部分变量的不同而在执行的时候就需要重新进行一次硬解析,造成SQL执行计划不能共享,这极大地耗费了系统时间和系统CPU资源。那么怎样才能降低OLTP应用系统的硬解析的数量呢?答案就是使用绑定变量。高并发的OLTP系统若没有使用绑定变量则会导致硬解析很大,这在AWR中的Load Profile部分可以很容易的看出来。
使用绑定变量能够有效降低系统硬解析的数量。对于同一类型的SQL语句若使用了绑定变量,则SQL文本就变得完全相同了,据此计算出来的哈希值也就完全相同,这就具备了可以重用解析树和执行计划的基础条件。这里的同一类型的SQL语句指的是除SQL文本中对应的输入值不同外其它部分都一模一样的SQL语句。例如,银行的查询余额的SQL语句,在成千上万次查询中都只是账户名不同,而SQL语句的其它部分都一样。若没有使用绑定变量,则每查询一次都必须进行一次硬解析。如果使用了绑定变量,假设每次可以节省0.001秒,那么在高并发下上千万次查询节省下来的时间将是非常大的,这在无形中就提高了系统的响应时间。
绑定变量(Bind Variable)其实质是变量,类似于经常使用的替代变量,只不过替代变量使用“&”作为占位符,而绑定变量使用英文冒号(:)作为占位符,替代变量使用方式为&VARIABLE_PARA,相应的绑定变量则为:BIND_VARIABLE_PARA。绑定变量通常出现在SQL文本中,用于替换WHERE或VALUES子句中的具体值。
绑定变量的优点如下所示:
①可以在库缓存(Library Cache)中共享游标,避免硬解析以及与之相关的额外开销。换句话说,绑定变量可以有效地减少SQL硬解析的次数,从而减少系统资源开销,这也是使用绑定变量最大的作用。
②在大批量数据操作时,可以大量减