Oracle 变量绑定与变量窥视合集系列二Word文件下载.docx
- 文档编号:22165736
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:10
- 大小:17.40KB
Oracle 变量绑定与变量窥视合集系列二Word文件下载.docx
《Oracle 变量绑定与变量窥视合集系列二Word文件下载.docx》由会员分享,可在线阅读,更多相关《Oracle 变量绑定与变量窥视合集系列二Word文件下载.docx(10页珍藏版)》请在冰豆网上搜索。
Tablecreated.
selectcount(*)fromleo6;
第一次执行
COUNT(*)
----------
72011
selectsql_text,parse_calls,loads,executionsfromv$sqlwheresql_textlike'
selectcount(*)fromleo6'
orderby1;
SQL_TEXT
PARSE_CALLS
LOADS
EXECUTIONS
------------------------------------------------------------------------------------------------------------------------------
selectcount(*)fromleo6
1
1
总解析次数:
硬解析次数:
执行次数:
硬解析发生在SQL语句第一次执行时,后续在执行相同语句就是软解析了,看看下面
第二次执行
2
2
当SQL硬解析之后,后续相同的SQL都被软解析,除非SQL被剔除shared_pool
altersystemflushshared_pool;
清空shared_pool
Systemaltered.
重新执行一次
当重新执行一次后,又重新有了一次硬解析,oracle认为这是一条新SQL,根据统计信息重新生成一次执行计划来执行。
Softer_soft_parse
会话对游标的缓存
什么是游标:
游标可以理解为SQL语句的一个句柄,也叫SQL语句的指针,游标指向一条SQL语句,oracle会话要执行一条SQL时,首先要打开游标。
打开游标:
新的SQL语句执行时候,在SGA中需要把这条SQL语句和shared_pool中SQL语句的哈希值建立一条通道(连接),即建立SQL语句句柄,这个建立通道的过程就叫打开游标。
softer_soft_parse超软解析:
打开游标的过程是在软解析之后,它要在shared_pool中寻找哈希值(这个哈希值就是软解析之后得到的),如果没有找到就需要重新构造游标(这就是硬解析过程),如果游标是打开状态,那么会话可以直接使用打开的游标连接到shared_pool中SQL语句入口,执行SQL。
如果游标是关闭状态,会话就需要重新建立到shared_pool连接(即打开游标操作),这样也会消耗一点点资源。
而我们要做的就是尽量打开游标保持通道畅通,又由于这个操作是在软解析之后,又叫超软解析,比软解析还要软一点。
会话缓存游标实验
session_cached_cursor,这个参数可以控制,会话打开游标或关闭游标
如果值为0,说明不使用缓存游标功能,oracle每次都要重新打开游标
如果值为非0,说明使用缓存游标功能,会话一直保持打开状态,随时执行SQL语句
1.session_cached_cursors=0测试
为了更好的对比效果,我们先要清空一下内存中的遗留数据,最简行以便的方法就是重启数据库了,当然我们这是测试环境,在生产环境中另当别论。
SYS@LEO1>
shutdownimmediate;
关闭数据库,清空SGA
Databaseclosed.
Databasedismounted.
ORACLEinstanceshutdown.
startup
启动数据库
ORACLEinstancestarted.
TotalSystemGlobalArea
680607744bytes
FixedSize
2216464bytes
VariableSize
503320048bytes
DatabaseBuffers
167772160bytes
RedoBuffers
7299072bytes
Databasemounted.
Databaseopened.
connleo1/leo1
切换leo1用户
Connected.
setlinesize300
设置版面
setpagesize999
showparametersession_cached_cursors
NAME
TYPE
VALUE
-----------------------------------------------------------------------------------------
session_cached_cursors
integer
50
检查参数默认为50
altersessionsetsession_cached_cursors=0;
Sessionaltered.
清空sharedpool
select'
STAT-'
||name,valuefromv$sysstatwherenamelike'
%parse%'
ornamelike'
%cursor%'
unionall
select'
LATCH-'
||name,getsfromv$latchwherename='
sharedpool'
;
'
||NAME
--------------------------------------------------------------------------------
STAT-openedcursorscumulative
51660
STAT-openedcursorscurrent
88
当前打开游标数
STAT-pinnedcursorscurrent
5
STAT-sessioncursorcachehits
37902
会话缓冲区游标命中率
STAT-sessioncursorcachecount
3153
STAT-cursorauthentications
668
STAT-parsetimecpu
845
CPU解析耗时
STAT-parsetimeelapsed
1974
解析总耗时
STAT-parsecount(total)
30593
解析总次数
STAT-parsecount(hard)
2700
硬解析次数
STAT-parsecount(failures)
6
STAT-parsecount(describe)
0
LATCH-sharedpool
263201
共享池latch数
查询系统当前资源消耗情况
droptableleo7purge;
清空环境
createtableleo7asselect*fromdba_objects;
创建leo7表
selectcount(*)fromleo7;
表size71972条
71972
循环执行1w次
begin
forleoin1..10000loop
executeimmediate'
selectcount(*)fromleo7'
endloop;
end;
/
PL/SQLproceduresuccessfullycompleted.
再次查询一下当前系统资源消耗情况
3
63614
89
39494
3513
713
851
1992
41546
2739
268172
这是session_cached_cursors=0的对比结果
当前打开游标数:
->
89
多了1个
会话缓冲区游标命中率:
多了1592次
2700
多了39次
解析总次数:
30593
多了10953次,这个和执行的次数很接近,差不多软解析了1w次
共享池latch数:
268172
多了4971次
2.session_cached_cursors=100测试
系统当前资源消耗
80112
88
44463
4334
791
872
2016
55199
2771
10
278343
altersessionsetsession_cached_cursors=100;
-----------------------------------------------------------------------------
integer
100
再重新循环执行1w次
92040
89
5
56058
4690
803
872
2017
56081
2773
280878
这是session_cached_cursors=100的对比结果
44463
56058
多了11595多
2771
2773
多了2次
55199
56081
多了882次
278343
280878
多了2535次
小结
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Oracle 变量绑定与变量窥视合集系列二 变量 绑定 窥视 系列