DBMS_SQLTUNE.SELECT_CURSOR_CACHE (
basic_filter IN VARCHAR2 := NULL,
object_filter IN VARCHAR2 := NULL,
ranking_measure1 IN VARCHAR2 := NULL,
ranking_measure2 IN VARCHAR2 := NULL,
ranking_measure3 IN VARCHAR2 := NULL,
result_percentage IN NUMBER := 1,
result_limit IN NUMBER := NULL,
attribute_list IN VARCHAR2 := NULL)
RETURN sys.sqlset PIPELINED;
上面是 SELECT_CURSOR_CACHE 的定义
我们根据官方提供的例子做一下测试
1.获取 cache 里的所有 sql
SELECT * FROM table(DBMS_SQLTUNE.SELECT_CURSOR_CACHE());
2.获取 指定 sql_id 信息
SELECT * FROM table(DBMS_SQLTUNE.SELECT_CURSOR_CACHE('sql_id = ''4rm4183czbs7j'''));
3.获取 非系统用户的 SQL信息
SELECT * FROM table(DBMS_SQLTUNE.SELECT_CURSOR_CACHE('parsing_schema_name not in (''SYS'',''SYSTEM'')'));
4.获取 module 为 DBMS_SCHEDULER ,action 为 HZ_BASEDATA 的存储过程
SELECT * FROM table(DBMS_SQLTUNE.SELECT_CURSOR_CACHE('module = ''DBMS_SCHEDULER'' and action = ''HZ_BASEDATA'''));
5.获取 elapsed_time 时间大于 5000000 (5 seconds)的cache 中的 sql
SELECT * FROM table(DBMS_SQLTUNE.SELECT_CURSOR_CACHE('elapsed_time > 5000000'));
6.获取 buffer get 为 100 用户为 JC800 的 cache 中的 sql
SELECT * FROM table(DBMS_SQLTUNE.SELECT_CURSOR_CACHE('buffer_gets > 100 and parsing_schema_name = ''JC800'''));
7.获取用户为 JC800, 按 执行时间取前 100条SQL
SELECT * FROM table(DBMS_SQLTUNE.SELECT_CURSOR_CACHE('parsing_schema_name=''JC800''',NULL,'ELAPSED_TIME', NULL, NULL,1,100));
8.获取 buffer_get 超过 90% 的
SELECT * FROM table(DBMS_SQLTUNE.SELECT_CURSOR_CACHE(NULL,NULL,'BUFFER_GETS', NULL, NULL,0.9));
9.获取 elapsed_time 时间大于 5000000 (5 seconds)的
SELECT * FROM table(DBMS_SQLTUNE.SELECT_CURSOR_CACHE( 'elapsed_time > 5000000', NULL, NULL, NULL, NULL, 1, NULL, 'EXECUTION_STATISTICS, SQL_BINDS, SQL_PLAN'));
大家可以根据这个函数的定义,自由发挥,还是很不错的.你们学会了么
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/7569309/viewspace-2135458/
,如需转载,请注明出处,否则将追究法律责任。