[20201117]使用DBMS_SHARED_POOL.MARKHOT与sql语句5.txt --//前几天我看了链接:https://blog.pythian.com/reducing-contention-on-hot-cursor-objects-cursor-pin-s/ --//里面提到使用DBMS_SHARED_POOL.MARKHOT标识sql语句,减少Cursor: Pin S的情况,不过对方不同的地方是在函数中使用。 --//我以前的测试不在函数里面反而更慢,不建议使用,出现大量的"library cache: mutex X". --//正好里面有例子,我直接拿来测试看看,首先看看标识热sql语句后,看看v$open_cursor的情况。 1.环境: SCOTT@book> @ver1 PORT_STRING VERSION BANNER ------------------------------ -------------- -------------------------------------------------------------------------------- x86_64/Linux 2.4.xx 11.2.0.4.0 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production 2.建立测试环境: create table job_times (sid number, sessionid number,time_ela number,method varchar2(20)); create table code_table (code_name char(1), low_value number, high_value number); declare letters char(26) := 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; v_num number := 1; begin for i in 1..26 LOOP insert into code_table values (substr(letters,i,1), i*v_num, i*(v_num+1000)); v_num := v_num + 1001; end loop; commit; end; / create or replace function fx_num (v_name varchar) return number is v_low number; v_high number; begin select low_value, high_value into v_low, v_high from code_table where code_name=v_name; return(DBMS_RANDOM.value(low => v_low, high => v_high)); end; / --//建立测试脚本m3.txt: $ cat m3.txt set verify off insert into job_times values ( sys_context ('userenv', 'sid') ,sys_context ('userenv', 'sessionid'),dbms_utility.get_time ,'&&2') ; commit ; declare v_id number; v_d date; m_rowid varchar2(20); m_data varchar2(32); begin --// m_rowid := '&3'; for i in 1 .. &&1 loop select /*+ &3 */ fx_num(substr(to_char(sysdate,'MON'),1,1)) into v_id from dual; end loop; end ; / update job_times set time_ela = dbms_utility.get_time - time_ela where sid=sys_context ('userenv', 'sid') and sessionid=sys_context ('userenv', 'sessionid') and method='&&2'; commit; $ cat cc.txt SELECT owner ,name ,hash_value ,full_hash_value ,namespace ,child_latch ,property hot_flag ,executions ,invalidations FROM v$db_object_cache WHERE name = 'SELECT LOW_VALUE, HIGH_VALUE FROM CODE_TABLE WHERE CODE_NAME=:B1 ' order by executions desc ; --//注意/:B1后面有1个空格。 3.测试: SCOTT@book> @ spid SID SERIAL# PROCESS SERVER SPID PID P_SERIAL# C50 ---------- ---------- ------------------------ --------- ------ ------- ---------- -------------------------------------------------- 295 695 56167 DEDICATED 56168 21 250 alter system kill session '295,695' immediate; SCOTT@book> @m3.txt 10 xx yy 1 row created. Commit complete. PL/SQL procedure successfully completed. 4 rows updated. Commit complete. --//确定sql_id='7tr4jwnamtmsr'. SCOTT@book> select * from v$open_cursor where sid=295 and SQL_ID='7tr4jwnamtmsr' 2 @ prxx ============================== SADDR : 0000000085EC7D20 SID : 295 USER_NAME : SCOTT ADDRESS : 000000007BE3D218 HASH_VALUE : 356306711 SQL_ID : 7tr4jwnamtmsr SQL_TEXT : SELECT LOW_VALUE, HIGH_VALUE FROM CODE_TABLE WHERE CODE_NAME LAST_SQL_ACTIVE_TIME : SQL_EXEC_ID : CURSOR_TYPE : PL/SQL CURSOR CACHED PL/SQL procedure successfully completed. SCOTT@book> @ cc.txt OWNER NAME HASH_VALUE FULL_HASH_VALUE NAMESPACE CHILD_LATCH HOT_FLAG EXECUTIONS INVALIDATIONS ------ ------------------------------------------------------------------ ---------- -------------------------------- -------------------- ----------- -------------------- ---------- ------------- SELECT LOW_VALUE, HIGH_VALUE FROM CODE_TABLE WHERE CODE_NAME=:B1 356306711 eb4cdceda1c495cd7cdc91e5153ccf17 SQL AREA 53015 31 0 SELECT LOW_VALUE, HIGH_VALUE FROM CODE_TABLE WHERE CODE_NAME=:B1 356306711 eb4cdceda1c495cd7cdc91e5153ccf17 SQL AREA 0 31 0 SCOTT@book> @prxx ============================== OWNER : NAME : SELECT LOW_VALUE, HIGH_VALUE FROM CODE_TABLE WHERE CODE_NAME=:B1 HASH_VALUE : 356306711 FULL_HASH_VALUE : eb4cdceda1c495cd7cdc91e5153ccf17 NAMESPACE : SQL AREA CHILD_LATCH : 53015 HOT_FLAG : EXECUTIONS : 31 INVALIDATIONS : 0 ============================== OWNER : NAME : SELECT LOW_VALUE, HIGH_VALUE FROM CODE_TABLE WHERE CODE_NAME=:B1 HASH_VALUE : 356306711 FULL_HASH_VALUE : eb4cdceda1c495cd7cdc91e5153ccf17 NAMESPACE : SQL AREA CHILD_LATCH : 0 HOT_FLAG : EXECUTIONS : 31 INVALIDATIONS : 0 PL/SQL procedure successfully completed. --//确定FULL_HASH_VALUE=eb4cdceda1c495cd7cdc91e5153ccf17. 4.标识热对象: --//以sys用户执行: SYS@book> exec dbms_shared_pool.markhot(hash => 'eb4cdceda1c495cd7cdc91e5153ccf17', namespace => 0, global => true); PL/SQL procedure successfully completed. --//退出重新登录: SCOTT@book> @ spid SID SERIAL# PROCESS SERVER SPID PID P_SERIAL# C50 ---------- ---------- ------------------------ --------- ------ ------- ---------- -------------------------------------------------- 295 697 56266 DEDICATED 56267 21 251 alter system kill session '295,697' immediate; SCOTT@book> @m3.txt 10 xx yy 1 row created. Commit complete. PL/SQL procedure successfully completed. 1 row updated. Commit complete. SCOTT@book> @ cc.txt OWNER NAME HASH_VALUE FULL_HASH_VALUE NAMESPACE CHILD_LATCH HOT_FLAG EXECUTIONS INVALIDATIONS ------ ------------------------------------------------------------------ ---------- -------------------------------- -------------------- ----------- -------------------- ---------- ------------- SELECT LOW_VALUE, HIGH_VALUE FROM CODE_TABLE WHERE CODE_NAME=:B1 356306711 eb4cdceda1c495cd7cdc91e5153ccf17 SQL AREA 0 HOT 31 0 SELECT LOW_VALUE, HIGH_VALUE FROM CODE_TABLE WHERE CODE_NAME=:B1 356306711 eb4cdceda1c495cd7cdc91e5153ccf17 SQL AREA 53015 HOT 31 0 SELECT LOW_VALUE, HIGH_VALUE FROM CODE_TABLE WHERE CODE_NAME=:B1 939937426 432f8fa611a9e7d4d7a686f838064e92 SQL AREA 0 HOTCOPY8 10 0 SELECT LOW_VALUE, HIGH_VALUE FROM CODE_TABLE WHERE CODE_NAME=:B1 939937426 432f8fa611a9e7d4d7a686f838064e92 SQL AREA 20114 HOTCOPY8 10 0 --//HOT_FLAG=HOTCOPY8.参考http://blog.itpub.net/267265/viewspace-2675377/的总结: --//mod(sid,cpu_count/2)+1 ,我的测试环境cpu_count=24. $ echo 295%12+1 | bc 8 SCOTT@book> select * from v$open_cursor where sid=295 and sql_text='SELECT LOW_VALUE, HIGH_VALUE FROM CODE_TABLE WHERE CODE_NAME=:B1 '; no rows selected --//奇怪没有找到对应记录。 SCOTT@book> select * from v$open_cursor where sid=295 and sql_text like 'SELECT LOW_VALUE, HIGH_VALUE%' 2 @ prxx ============================== SADDR : 0000000085EC7D20 SID : 295 USER_NAME : SCOTT ADDRESS : 000000007CB1C9D0 HASH_VALUE : 939937426 SQL_ID : dg9n6z0w0cmnk SQL_TEXT : SELECT LOW_VALUE, HIGH_VALUE FROM CODE_TABLE WHERE CODE_NAME LAST_SQL_ACTIVE_TIME : SQL_EXEC_ID : CURSOR_TYPE : PL/SQL CURSOR CACHED PL/SQL procedure successfully completed. --//噢,原来sql_text仅仅保存开头60个字符长度。 --//可以发现很明显,没有出现在链接看到的情况 http://blog.itpub.net/267265/viewspace-2675362/ --//也就是如果在函数或者PL/SQL包里面的sql语句通过DBMS_SHARED_POOL.MARKHOT是可以提高性能的。 --//限于偏于另外写一篇blog测试。
[20201117]使用DBMS_SHARED_POOL.MARKHOT与sql语句5.txt
来源:这里教程网
时间:2026-03-03 16:16:39
作者:
编辑推荐:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- oracle删除表中数据(delete与truncate)
oracle删除表中数据(delete与truncate)
26-03-03 - SQL Server数据库mdf文件中了勒索病毒*.mdf.[helpbackup@email.tg].Devos
- G006-ORACLE-INS-SIFS-01 ORACLE 19C SIFS Ins ON RHEL 8.2
- G008-ORACLE-DG ORACLE 19C Active Data Guard DML Redirection
- 查看oracle数据库中,哪些表的字段是null值比较多
查看oracle数据库中,哪些表的字段是null值比较多
26-03-03 - Oracle数据库服务器dbf文件中了勒索病毒,扩展名被篡改为.CC7H
Oracle数据库服务器dbf文件中了勒索病毒,扩展名被篡改为.CC7H
26-03-03 - 数据库范式
数据库范式
26-03-03 - 沙龙回顾丨开发者掌握这些背后的技术路径,可助力企业智能化升级
沙龙回顾丨开发者掌握这些背后的技术路径,可助力企业智能化升级
26-03-03 - Oracle的awr报告分析
Oracle的awr报告分析
26-03-03 - DDD 在京东 DevOps 项目协作领域的落地实战
DDD 在京东 DevOps 项目协作领域的落地实战
26-03-03
