9. Oracle深度学习笔记——性能调优汇总
欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/50621026
数据字典高速缓存命中率
数据字典高速缓存命中率如下:
select (sum(gets-getmisses-fixed))/sum(gets)"data dictionary hit ratio" from v$rowcache;
data dictionary hit ratio
-------------------------
.975728791
参考95~99%
1. 硬解析过程
alter session set sql_trace=true;
alter system flush shared_pool;
select table_name from user_tables whererownum<=5;
打开TRC文件如下:
PARSING IN CURSOR #140195096140104 len=50dep=0 uid=0 oct=3 lid=0 tim=700865302 hv=17921204 ad='97a9d708'sqlid='83dx9sc0j2x5n'
select table_name from user_tables whererownum<=5
END OF STMT
PARSE#140195096140104:c=106000,e=131031,p=2,cr=727,cu=0,mis=1,r=0,dep=0,og=1,plh=5472353,tim=700865301
….
再执行相同的命令如下,查看TRC文件如下:
*** 2016-01-30 17:55:48.379
CLOSE#140195096140104:c=0,e=100,dep=0,type=0,tim=1039278193
=====================
PARSING IN CURSOR #140195096140104 len=50dep=0 uid=0 oct=3 lid=0 tim=1039279623 hv=17921204 ad='97a9d708'sqlid='83dx9sc0j2x5n'
select table_name from user_tables whererownum<=5
END OF STMT
PARSE #140195096140104:c=1000,e=937,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=1,plh=5472353,tim=1039279622
……
发现命中。
使用tkprof处理一下:
具体使用,可以直接输入tkprof
打开结果文件如下:
select table_name
from
user_tables where rownum<=5
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- -------------------- ----------
Parse 2 0.05 0.06 0 5 0 0
Execute 2 0.00 0.00 0 0 0 0
Fetch 4 0.00 0.00 0 140 0 10
------- ------ -------- ---------- ---------- -------------------- ----------
total 8 0.06 0.07 0 145 0 10
Misses in library cacheduring parse: 1
2. 库高速缓存命中率
select sum(pinhits)/sum(pins) Library_cache_hit_ratiofrom v$librarycache;
LIBRARY_CACHE_HIT_RATIO
-----------------------
.927807473
参考大于99%
确定库高速缓存的效率
select namespace,pins,pinhits,reloads fromv$librarycache order by namespace;
NAMESPACE PINS PINHITS RELOADS
-------------------------------------------------------------------------- ---------- ----------
AUDIT POLICY 66 56 0
BODY 1301 1097 16
CLUSTER 1318 1298 0
CONTEXT POLICY 2 0 0
DBINSTANCE 0 0 0
DBLINK 0 0 0
DIRECTORY 51 41 0
EDITION 309 296 0
INDEX 4516 3082 72
OBJECT ID 0 0 0
PDB 0 0 0
QUEUE 10 6 0
RULESET 3 2 0
SCHEMA 0 0 0
SQL AREA 528694 508982 641
SQL AREA BUILD 0 0 0
SQL AREA STATS 6406 262 0
TABLE/PROCEDURE 57487 44691 3245
TEMPORARY INDEX 481 0 45
TEMPORARY TABLE 3361 0 1962
TRIGGER 528 405 0
USER PRIVILEGE 1 0 0
22 rows selected.
其中RELOAD表示SQL语句在老化后又被重新装入库。可以使用DBMS_SHARED_POOL程序强迫将SQL语句保留在共享池的库高速缓存组中。
V$LIBRARY_CACHE_MEMORY视图确定库高速缓存内存对象的数目
V$SHARED_POOL_ADVICE视图提供各种尺寸的共享池预期可节省的分析时间的信息
3. 优化库高速缓存
l CUSOR_SHARING
设置CURSOR_SHARING=FORCE来减轻非绑定变量的问题,强制进行绑定变量。
显示实例启动以来,硬分析数与执行数比较结果,如下:
select s.sid,s.value "Hard Parses", t.value"Executions Count" from v$sesstat s,v$sesstat t where s.sid=t.sid ands.statistic#=(select statistic# from v$statname where name='parse count(hard)') and t.statistic#=(select statistic# from v$statname where name='executecount') and s.value >0;
SID Hard Parses Executions Count
---------- ----------- ----------------
1 576 3895
9 15 77
15 11 82
16 8 51
21 325 4506
22 3 15
34 1 19
37 1 1
39 78 1680
45 12 116
47 1 2
67 6 80
12 rows selected.
l 参数CURSOR_SPACE_FOR_TIME已废弃
l SESSION_CACHED_CURSORS
一个session可以缓存多少个cursor,让后续相同的SQL语句不再打开游标,从而避免软解析的过程来提高性能。(绑定变量是解决硬解析的问题),软解析同硬解析一样,比较消耗资源.所以这个参数非常重要。
session_cached_cursors这个参数是控制sessioncursor cache的大小的。session_cached_cursors定义了session cursor cache中存储的cursor的个数。这个值越大,则会消耗的内存越多。设置在OPEN_CURSORS和会话中使用的游标的数目之间。
查看游标命中次数
select name,value from v$sysstat where name like'%cursor%';
NAME VALUE
--------------------------------------------------------------------------
opened cursors cumulative 456915
opened cursors current 33
pinned cursors current 15
session cursor cache hits 151457
session cursor cache count 6346
cursor reload failures 14
cursor authentications 1219
7 rows selected.
查看总的分析次数:
select name,value from v$sysstat where name like'%parse%';
NAME VALUE
--------------------------------------------------------------------------
ADG parselock X get attempts 0
ADG parselock X get successes 0
parse time cpu 1571
parse time elapsed 4723
parse count (total) 108089
parse count (hard) 8458
parse count (failures) 377
parse count (describe) 21
8 rows selected.
4. 确定要定在共享池中的对象
select type,count(*) objects,sum(decode(kept,'YES',1,0))kept, sum(loads)-count(*) reloads from v$db_object_cache group by type order byobjects desc;
TYPE OBJECTS KEPT RELOADS
-------------------------------------------------------------------------- ---------- ----------
CURSOR 6419 0 499
CURSOR STATS 1909 1114 0
TABLE 691 30 884
VIEW 341 0 5
PACKAGE 225 0 -120
TYPE 163 0 -48
INDEX 82 7 83
MULTI-VERSIONED OBJECT 64 62 3
PACKAGE BODY 43 0 3
Optimizer Finding 43 0 0
SEQUENCE 28 0 -18
SYNONYM 28 0 -21
LIBRARY 23 0 -19
TRIGGER 21 0 0
Optimizer Directive Owner 16 0 0
FUNCTION 13 0 3
NONE 13 0 -13
CLUSTER 7 6 0
TYPE BODY 4 0 0
PROCEDURE 4 0 -2
SCHEDULER CLASS 3 0 0
SCHEDULER JOB 3 0 0
SCHEDULER GLOBAL ATTRIBUTE 2 0 0
QUEUE 2 0 0
PUB SUB INTERNAL INFORMATION 2 0 1
OPERATOR 2 0 0
AUDIT POLICY 2 0 0
SCHEDULER PROGRAM 1 0 0
SCHEDULER WINDOW 1 0 0
RULE EVALUATION CONTEXT 1 0 -1
SCHEDULER GROUP 1 0 0
RESOURCE MANAGER CONSUMER GROUP 1 0 0
EDITION 1 0 0
RULESET 1 0 0
34 rows selected.
共享池中钉住程序包,命令如下:
EXECUTE SYS.DBMS_SHARED_POOL.KEEP(object_name,object_type);
查看数据库中程序包的数量如下:
select count(*) from v$db_object_cache wheretype='PACKAGE';
COUNT(*)
----------
223
共享池中钉住的内存量:
select sum(sharable_mem) from v$db_object_cache wheretype='PACKAGE';
SUM(SHARABLE_MEM)
-----------------
2349720
5. 数据缓存优化相关
缓冲区高速缓存的命中率:
selectname,physical_reads,db_block_gets,consistent_gets,1-(physical_reads/(db_block_gets+consistent_gets))"HitRatio" from v$buffer_pool_statistics;
NAME PHYSICAL_READS DB_BLOCK_GETSCONSISTENT_GETS HitRatio
-------------------- --------------------------- --------------- ----------
DEFAULT 18216 159266 2316657 .992642744
可以使用v$db_cache_advice,v$sga_cache_advice 来优化缓冲区。
当然,事物都存在两极,如果存在大量全表扫描或数据仓库,命中率可能远低于100%,但并不一定是坏事。
使用多个池,保留缓冲池(keep)、回收缓冲池(recycle)、默认缓冲池(default)。
确定保留缓冲区高速缓存的备选
select obj object,count(1) buffers,avg(tch)average_touch_count from x$bh where lru_flag=8 group by obj havingavg(tch)>5 and count(1)>25;
将某个表放入到保留缓冲区中,命令如下:
alter table test1 storage (buffer_poolkeep);
6. PGA
查看数据库中PGA使用情况:
select s.value,s.sid,a.username from v$sesstats,v$statname n,v$session a where n.statistic#=s.statistic# and name='sessionpga memory' and s.sid=a.sid order by s.value;
VALUE SID USERNAME
---------- ----------------------------------------
766056 40
766056 17
766056 3
766056 4
766056 47
766056 18
766056 20
766056 6
766056 7
766056 28
766056 10
766056 24
774456 19
774456 8
774456 5
790912 2
962664 46
1421416 22
1486952 36
1535432 30
1618024 16
1618024 31
1749096 15
2093792 14
2330264 13
2330264 11
2338920 44
2609464 9
3395896 38
4911624 1 SYS
8827016 12
12636472 21
62238824 23
33 rows selected.
查看PGA状态:
select * from v$pgastat;
NAME VALUE UNIT CON_ID
-------------------------------------------------------------------------- ------------ ----------
aggregate PGA target parameter 377487360 bytes 0
aggregate PGA auto target 232538112 bytes 0
global memory bound 75497472 bytes 0
total PGA inuse 118634496 bytes 0
total PGA allocated 154334208 bytes 0
maximum PGA allocated 342854656 bytes 0
total freeable PGA memory 14745600 bytes 0
process count 42 0
max processes count 63 0
PGA memory freed back to OS 511049728 bytes 0
total PGA used for auto workareas 0 bytes 0
maximum PGA used for auto workareas 5123072 bytes 0
total PGA used for manual workareas 0 bytes 0
maximum PGA used for manual workareas 0 bytes 0
over allocation count 0 0
bytes processed 1479985152 bytes 0
extra bytes read/written 0 bytes 0
cache hit percentage 100percent 0
recompute count (total) 1436 0
19 rows selected.
查看PGA效能
select low_optimal_size/1024 "Low (K)",(high_optimal_size+1)/1024 "High (K)",optimal_executions"Optimal",onepass_executions "1-pass",multipasses_executions ">1 Pass" from v$sql_workarea_histogram wheretotal_executions <> 0;
Low (K) High (K) Optimal 1-pass >1 Pass
---------- ---------- ---------- --------------------
2 4 13821 0 0
64 128 124 0 0
128 256 35 0 0
256 512 14 0 0
512 1024 473 0 0
1024 2048 728 0 0
2048 4096 6 0 0
7 rows selected.
最佳方法来执行排序。
查看每个进程的PGA使用情况:
select pid,category,allocated,used fromv$process_memory;
PID CATEGORY ALLOCATED USED
---------- --------------- --------------------
2 PL/SQL 1976 224
2 Other 972532
3 PL/SQL 1976 224
3 Other 947740
4 PL/SQL 1976 224
4 Other 947740
5 PL/SQL 1976 224
5 Other 956108
6 PL/SQL 1976 224
6 Other 947740
7 SQL 43936 8440
7 PL/SQL 26128 21608
7 Freeable 917504 0
7 Other 3976580
8 PL/SQL 1976 224
8 Other 956108
9 SQL 0 0
9 PL/SQL 1976 224
9 Freeable 65536 0
9 Other 2791116
10PL/SQL 1976 224
10Other 947740
11PL/SQL 1976 224
11Freeable 131072 0
11Other 2511916
12PL/SQL 1976 224
12Freeable 786432 0
12Other 9008508
13PL/SQL 1976 224
13Freeable 393216 0
13Other 2511916
14PL/SQL 1976 224
14Freeable 393216 0
14Other 2275412
15SQL 2000 296
15PL/SQL 1976 224
15Freeable 262144 0
15Other 1928780
16SQL 0 0
16PL/SQL 1976 224
16Freeable 131072 0
16Other 1799708
17PL/SQL 1976 224
17Other 947740
18PL/SQL 1976 224
18Other 947740
19PL/SQL 1976 224
19Other 956108
20PL/SQL 1976 224
20Other 947740
21SQL 36576 0
21PL/SQL 312848 294744
21Freeable 3276800 0
21Other 12470676
22SQL 0 0
22PL/SQL 1976 224
22Other 1603100
23Other 1408468
24PL/SQL 1976 224
24Other 62420508
25Other 687572
26PL/SQL 1976 224
26Other 947740
27PL/SQL 1976 224
27Other 947740
28PL/SQL 1976 224
28Other 947740
29PL/SQL 1976 224
29Other 947740
30SQL 3024 1256
30PL/SQL 1976 224
30Other 1796684
31SQL 7096 800
31PL/SQL 1976 224
31Freeable 131072 0
31Other 1710020
33SQL 0 0
33PL/SQL 1976 224
33Freeable 131072 0
33Other 1668636
34SQL 11904 2728
34PL/SQL 20704 16816
34Freeable 7340032 0
34Other 3546916
35Other 687572
36Other 687572
37Other 687572
38Other 687572
39SQL 0 0
39PL/SQL 1976 224
39Other 947740
41SQL 3000 0
41PL/SQL 264056 257616
41Freeable 589824 0
41Other 2255524
42SQL 5760 3552
42PL/SQL 1976 224
42Other 1138588
98 rows selected.
评估实例启动以来,使用最佳、1遍、多遍PGA内存尺寸的工作区比例:
select name profile,cntcount,decode(total,0,0,round(cnt*100/total)) percentage from (select name,valuecnt,(sum(value) over()) total from v$sysstat where name like 'workarea exec%');
PROFILE COUNT PERCENTAGE
-------------------------------------------------------------------------- ----------
workarea executions - optimal 15231 100
workarea executions - onepass &nbs
再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow