影响性能的计算机资源大抵三种:Memory、CPU和I/O。通过调整SGA、PGA充分利用物理MEMORY,通过并行处理充分利用CPU,通过调整I/O分布充分利用硬盘处理力。
server process和PGA是“一条绳上的两个蚂蚱”,故sp还有个雅号叫“用户体验度进程”。SMON主内,负责整理SGA,如空间碎片;PMON负责外交,检测client process和server process。
shared pool的命中率(hiting)=L/(L+P).L:逻辑读;P:物理读。命中率高不一定没问题,如100w/(100w+10w),10w物理读I/O绝对是个问题。
shared pool的结构主要有:
① free memory :可用内存
② library cache :sql、pl/sql、java等代码;执行计划
③ row cache :数据字典信息
free memory的内存被分割成大小参差的chunk,然后用chain串起,每条chain上所挂的chunk都是不一样的,如chain_A挂了4k,chain_B挂了8k,chain_C挂了12k,现有条sql在parse时,需10k chunk,则server process会去遍历chain_B,假设找到了11k的chunk,那么有10kchunk用去存该sql的代码和执行计划,1k碎片chunk则被挂到chain_A上。记住了,只有hard
parse才需要从free memory遍历chain,确定合适的chunk。这1k碎片会被SMON整理。
从上面的论述,我们也可以知道,oracle是通过chain来维护shared_pool,这样做的好处:
㈠ 串起内存块
㈡ 可遍历
我们还可以认识到hard parse和soft parse之间的两个最大的不同:
Ⅰ 二者最大,且最严重的区别是,hard parse需要从N条执行方案挑出一条最优的,作为该sql的执行计划
Ⅱ hard parse需要到free memory摘得chunk,填上sql、执行计划,然后挂到library cache
查看hard parse 和 soft parse的个数:
23:55:59 hr@ORCL (^ω^) select name,value from v$sysstat where name like 'parse%';
NAME VALUE
----------------------- ----------
parse time cpu 1281
parse time elapsed 7048
parse count (total) 41603
parse count (hard) 4892
parse count (failures) 6
那么从free memory摘到的这10k chunk是如何挂到library cache的呢?server process会将sql、执行计划等,通过一系列的hash 运算,先将他们转化为ASCI码,再hash为一个hash值,这个值便是library cache里某条chain的编号,然后将10kchunk挂上library cache。
shared pool里面的chunk总数:
10:20:39 sys@ORCL (^ω^) select count(*) from x$ksmsp;
COUNT(*)
----------
38189
通过alter system flush可手动改变chunk,具体影响见:alter system flush shared_pool
由此,我们也可得出,对于一条sql语句,可分静态部分和动态部分,其中静态部分对大小写、空格、回车键等统统都是敏感的,否则,在将其通过hash运算成chain编号时会不一致,所以,在开发过程中,统一的编程规范是至关重要的,这可避免减小hard parse。另外,我们也可以使用绑定变量,对sql的动态部分作出选择。
例子:
10:42:46 hr@ORCL (^ω^) declare
10:44:11 2 v_sql varchar2(50);
10:44:11 3 begin
10:44:11 4 for i in 1..1000
10:44:11 5 loop
10:44:11 6 v_sql :='insert into v values(:1)';
10:44:11 7 execute immediate v_sql using i;
10:44:11 8 end loop;
10:44:11 9 commit;
10:44:11 10 end;
10:44:13 11 /
PL/SQL 过程已成功完成。
10:44:14 hr@ORCL (^ω^) select sql_id,executions from v$sql where sql_text like '%insert into v values%';
SQL_ID EXECUTIONS
-------------------------- ----------
5rfc2sjfm0cmz 1
4nv3u5nq8u6yh 1000
4azck0ysur2cg 1
server process接手一条sql,对它的处理过程,粗劣可分三个步骤:
① parse :到shared pool去查看执行计划,决定soft parse还是hard parse
② execute
③ fetch :到buffer cache里获取需求的数据,决定逻辑I/O还是物理I/O.
分享到:
相关推荐
SQL Tuning sqlServer,数据库教程, chm格式 英文版
SQL Tuning使用指南 QCO的SQL Tuning模块是一种功能强大的SQL语句分析、测试、优化工具,它可以贯穿Oracle数据库应用的整个生命周期,在开发阶段、试运行阶段和生产阶段帮助获得最佳SQL语句,以提高应用系统的...
sql tuning oracle sql tuning
oracle的sqltuning 课程,但资源有些老,04年的
关于oracle的SQL Tuning Advisor全面的使用介绍,包括分析awr、cursor、sql_set、sql文本中获取sql并且建立、执行、获取结果的方法。并且介绍了sql_set,sql_profile的操作。里面涉及到的内容都有可执行的代码。
Top-SQL Tuning SQL语句调整
Oracel SQL tuning Oracel SQL tuning Oracel SQL tuning Oracel SQL tuning Oracel SQL tuning Oracel SQL tuning
Oracle SQL Tuning with Oracle SQLTXPLAIN: Oracle Database 12c Edition by Stelios Charalambides English | 8 May 2017 | ISBN: 1484224353 | 408 Pages | PDF | 24.39 MB Learn through this practical guide ...
SQL Tuning author Dan Tow outlines a timesaving method he's developed for finding the optimum execution plan--rapidly and systematically--regardless of the complexity of the SQL or the database ...
来源oracle官方ppt,讲解sql tuning技巧
Tosska SQL Tuning Expert (TSE™) 是一款优秀的SQL 调优工具,无需用户参与即可优化 SQL 语句。该产品将为您提供最终的 SQL 性能解决方案,只需点击鼠标即可。在整个 SQL 调优过程中,您不必进行分析、猜测或手工...
比较经典的SQL TUNING资料,不可错过 PPT
ORACLE SQL TUNING
sqltuning 英文版 sqltuning 英文版 sqltuning 英文版
描述sql tuning的基础.............
SQL Tuning for Oracle.chm
使用ORACLE SQL Tuning advisor快速优化低效的SQL语句, 这里是一个使用范例,有9个步骤, 后面 其他语句,都按照这个步骤来做就可以了。
SQLTuning_体系结构_内部资料:公司内部培训资料
自动SQL优化工具Tosska SQL Tuning Expert for Oracle,帮助SQL开发人员解决SQL性能问题。
现在我就向大家介绍这样一款工具:SQLTuning for SQL Server。 1. SQL Tuning 简介 SQL Turning是Quest公司出品的Quest Central软件中的一个工具。 QuestCentral(图1)是一款集成化、图形化、跨平台的数据库管理...