SQL开发的过程中,如果不使用绑定变量,会对数据库性能造成非常严重的影响请看如下示例代码:
begin
for i in 1..1000 loop
execute immediate 'insert into test values('||i||')';
end loop;
commit;
end;
/
该过程执行1000次,会解析1000次,我们知道每次SQL解析大概会占用一条SQL语句执行时间的70%左右,而且过多的硬解析会在SHARED
POOL
中产生很多碎片,导致ORA-04031错误,那么如何判断应用程序中是否使用了绑定变量呢?我们可以通过V$SQLAREA视图来查看应用程序中是否使
用了绑定变量,下面简单举个例子:
SQL> create table test(id number );
Table created.
SQL> begin
for i in 1..1000 loop
execute immediate 'insert into test values('||i||')';
end loop;
commit;
end;
/
PL/SQL procedure successfully completed.
SQL> select substr(sql_text,1,20), count(*)
from v$sqlarea
group by substr(sql_text,1,20) having count(*) > 50;
SUBSTR(SQL_TEXT,1,20) COUNT(*)
----------------------------- ---------------
insert into test val 1000
可以看到insert into test.......这条语句竟然在shared pool里面解析了1000次,通过如下查询
select sql_text from v$sqlarea where sql_text like 'insert into test %';找出具体的sql代码,然后与开发人员商量,更改SQL代码。
上面只是一个简单的实例,具体要怎么查看你的应用是否使用了绑定变量,只需要简单修改
select substr(sql_text,1,20), count(*)
from v$sqlarea
group by substr(sql_text,1,20) having count(*) > 50;
可以将substr(sql_text,1,20) 改为substr(sql_text,1,30)等等,可以 having count(*) > 10,20,100等等。
参考至:http://blog.csdn.net/robinson1988/article/details/4793962
如有错误,欢迎指正
邮箱:czmcj@163.com
分享到:
相关推荐
查找未使用绑定变量sql.sql
标题与描述中的“SQL绑定变量”这一知识点,主要聚焦于SQL语句中如何使用变量,尤其是在存储过程或函数中动态构建SQL语句时的关键技术。绑定变量允许在SQL语句中使用程序变量作为参数,这不仅提高了代码的可读性和...
绑定变量的使用限制条件是,绑定变量只能在查询语句中使用,并且只能在执行查询时提供具体的值。例如,在上面的查询语句中,我们可以使用 `:empno` 绑定变量来代替具体的值 `123`。 绑定变量的应用实例 下面是一个...
在给定的部分内容中,作者通过一个具体的示例展示了如何使用动态SQL和绑定变量构建一个灵活的查询语句。在这个示例中,根据用户输入的手机型号、类型和服务商信息,动态构建了一个查询语句,以从`phone_info`表中...
结果显示,使用绑定变量的SQL语句只经历了两次硬解析,而其他未使用绑定变量的SQL语句则各自经历了一次硬解析。 #### 使用`define`命令定义变量 除了直接在SQL语句中使用绑定变量外,还可以使用`define`命令定义...
- 使用`DBMS_SQLTUNE`包和`SQL Trace`工具可以帮助分析绑定变量对SQL性能的影响,通过收集和分析绑定变量的执行计划和统计信息,优化查询性能。 总结来说,Oracle数据库的绑定变量特性是一种强大的工具,能够提高...
为了提高SQL语句的执行效率,减少不必要的资源消耗,推荐使用绑定变量(即`PreparedStatement`)替代普通的`Statement`。这种方式可以显著减少数据库的解析成本,特别是在循环执行相同的SQL语句时,如批量更新数据等...
- **未使用绑定变量**:在示例中,查询`select object_name from all_objects where object_id = ' || i;`是硬编码的,每改变`i`的值就需要重新解析和执行,导致了大量的系统资源消耗和执行时间的增加。 - **使用...
通过对使用绑定变量和未使用绑定变量的SQL查询进行比较,可以直观地看到使用绑定变量能够显著减少解析时间,并且能够有效避免SQL注入等问题。 ##### 案例2:绑定变量应用于数据倾斜的列 当绑定变量用于数据倾斜的列...
为了解决这些问题,我们可以使用预编译的PreparedStatement对象来绑定变量,例如: ```java String sql = "select name from oms_user where id=?"; PreparedStatement pstmt = connection.prepareStatement(sql); ...
注意如何查询sql自动绑定变量,执行以上sql分析执行情况
需要注意的是,在使用`sp_executesql`执行SQL语句之前,必须确保SQL语句中的所有变量都是Unicode类型(`NVARCHAR`等)。 #### 注意事项 1. **Unicode字符串**:使用`sp_executesql`时,所有的字符串参数必须是...
需要注意的是,绑定变量可以在PL/SQL过程中使用,例如: Declare i number; Begin i := 1; Select * from tt where id = :i; End; 在上面的示例中,我们在PL/SQL过程中定义了一个绑定变量i,然后将其赋值为1,...
例如,在上述示例中,未使用绑定变量的查询执行耗时7秒,而使用绑定变量的查询几乎瞬间完成。 绑定变量的使用对于系统的可扩展性和稳定性有着显著的提升。它们可以帮助防止SQL语句过度占用共享池,避免导致其他有效...
为了解决这个问题,可以在 OLTP 应用中使用绑定变量,因为 OLTP 应用中并发性较高,CPU 上的争用会比较严重,同时 SQL 本身执行时间较短,涉及到的数据量较少,解析所占的时间在整个 SQL 执行时间中占的比例较高,而...
相反,如果使用绑定变量,Oracle会尝试在共享池(Shared Pool)中查找相同的基本SQL结构,如果找到,就进行软分析(Soft Parse),从而避免重复的工作。 不使用绑定变量的另一个负面影响是共享池中的SQL语句数量...
sql学习 awr体验(绑定变量).sql
相反,绑定变量允许SQL语句在编译时保留占位符,具体的值在执行时动态传入,这样同一个查询模板可以重复使用,极大地减少了解析和优化的开销。 例如,对比以下两个查询: 1. 硬编码查询:`SELECT * FROM emp WHERE...
sql学习 体会绑定变量的trace试验.sql