【Oracle】取得数据库全表扫描的语句(get_fullscan_table)
2014-07-01 08:40
375 查看
一:创建plan_table,数据库在默认情况下是没有创建此表的。
SQL> @?/rdbms/admin/utlxplan
Table created.
SQL> create public synonym plan_table for plan_table;
Synonym created.
SQL> grant all on plan_table to public ;
Grant succeeded.
SQL> @?/sqlplus/admin/plustrce
二:创建收集全表扫描语句
create table full_sql (sql_text varchar2(1000), executions number);
create or replace procedure p_findfullsql as
v_csr number;
v_rc number;
v_string varchar2(2000);
v_count number;
cursor c1 is select sql_text,executions from v$sqlarea where lower(sql_text) like '%select%';
begin
for x1 in c1 loop
delete from plan_table ;
Begin
v_Csr := DBMS_SQL.OPEN_CURSOR;
v_string := 'explain plan for ' ;
v_string := v_string||x1.sql_text ;
DBMS_SQL.PARSE(v_csr, v_string, DBMS_SQL.V7);
v_rc := DBMS_SQL.EXECUTE(v_csr);
DBMS_SQL.CLOSE_CURSOR(v_csr);
Exception
when others then
null;
End ;
select count(*) into v_count from plan_table where options like '%FULL%' and operation like '%TABLE%' ;
if v_count > 0 then
insert into full_sql(sql_text,executions) values (x1.sql_text, x1.executions) ;
end if;
end loop ;
commit;
end ;
/
execute p_findfullsql ;
select * from full_sql;
drop table full_sql;
通过select * from full_sql;可以知道执行全表扫描的语句,加以着重研究,比如可以讲小表放入keep_buffer,让其常驻内存
转载地址:/article/4138827.html
SQL> @?/rdbms/admin/utlxplan
Table created.
SQL> create public synonym plan_table for plan_table;
Synonym created.
SQL> grant all on plan_table to public ;
Grant succeeded.
SQL> @?/sqlplus/admin/plustrce
二:创建收集全表扫描语句
create table full_sql (sql_text varchar2(1000), executions number);
create or replace procedure p_findfullsql as
v_csr number;
v_rc number;
v_string varchar2(2000);
v_count number;
cursor c1 is select sql_text,executions from v$sqlarea where lower(sql_text) like '%select%';
begin
for x1 in c1 loop
delete from plan_table ;
Begin
v_Csr := DBMS_SQL.OPEN_CURSOR;
v_string := 'explain plan for ' ;
v_string := v_string||x1.sql_text ;
DBMS_SQL.PARSE(v_csr, v_string, DBMS_SQL.V7);
v_rc := DBMS_SQL.EXECUTE(v_csr);
DBMS_SQL.CLOSE_CURSOR(v_csr);
Exception
when others then
null;
End ;
select count(*) into v_count from plan_table where options like '%FULL%' and operation like '%TABLE%' ;
if v_count > 0 then
insert into full_sql(sql_text,executions) values (x1.sql_text, x1.executions) ;
end if;
end loop ;
commit;
end ;
/
execute p_findfullsql ;
select * from full_sql;
drop table full_sql;
通过select * from full_sql;可以知道执行全表扫描的语句,加以着重研究,比如可以讲小表放入keep_buffer,让其常驻内存
转载地址:/article/4138827.html
相关文章推荐
- 取得数据库全表扫描的语句(get_fullscan_table)
- [Oracle]利用DBMS_METADATA.GET_DDL函数获取数据库对象的DDL语句
- Oracle查找全表扫描的SQL语句
- Oracle 全表扫描及其执行计划(full table scan)
- 2013.11.1全表扫描 flush"oracle的缓存 SQL递归语句
- Oracle 全表扫描及其执行计划(full table scan)
- 关于oracle table()函数引起的全表扫描问题
- Oracle查找全表扫描的SQL语句
- Oracle 数据库常用操作语句
- SQL语句在什么情况下使用全表扫描?
- 两个读取数据库VIew的定义的SQL语句的写法[Oracle /SQL SERVER]
- SQL SERVER ,ORACLE 8i,DB2三种数据库分页SQL语句
- 查找oracle数据库系统里的bad sql语句的方法
- 数据库分页语句(mysql,oracle,sqlserver,DB2)
- ORACLE如何使用DBMS_METADATA.GET_DDL获取DDL语句
- Oracle中轻松取得建表和索引的DDL语句
- Oracle数据库常用的Sql语句
- [导入]SQL语句在什么情况下使用全表扫描?
- Oracle 9i轻松取得建表和索引的DDL语句
- Oracle轻松取得建表和索引的DDL语句