2014-08-11 Createed By
BaoXinjian

“专注、极致、口碑、快”的互联网七字诀。专注以及极其,是产品目标;快,是走则;而口碑,则是通互联网思维的为主。——雷军

BWIN必赢亚洲56.net 1一、摘要

谷歌同深谙此道理:“一切为用户为基本,其他所有纷至沓来。”谷歌和小米都是在互联网的大潮中突出并特别放光彩之营业所,他们于这时代的掌握远超其他人,为什么他们都对此用户,对于口碑这么重视?


互联网改变了啊?

此答案可以生那么些,今天才说一样点,那就是“个人能力之暴”,忘了凡谁说的,

一经十九世纪属于帝国,二十世纪属于非常商店,那么二十一世纪的属于个人。

这是一个消息爆炸的一时,互联网穿外露了社会坚厚的岩使所有相邻或离开遥远的层级彼此对。身份、财富、地域都不再是流传的权杖要约束。每个人之散播能量就穿破层级壁垒开始了顶层和脚的第一手交流。

“今天底一个全新场景是什么?互联网形成了一个‘扁平的社会风气平台’使私家今天会为私的样式利用全球行动,这就是是时期的新新物。我思说之是多亏了互联网以及夫扁平的世界平台,个人为给予了精的力。’——《纽约时报》专栏作家
《世界是平的》作者:托马斯·弗里德曼

Oracle硬解析和软解析是咱们常遇上的问题,所以需要考虑何时发生软解析何时发生硬解析,如何判定

互联网的口碑及风俗的总人口碑有啊两样(参与感)

人情的贺词传播现象,比如说理发店就是广阔的口碑传播场所,人们在理发的时刻会闲聊会分享信息。这种情景下之贺词传播,速度好缓慢,而且十分爱断裂,传播及还不行之圈子就是半途而废了。在微博、微信等社会化媒体之平台遭遇,人及丁里面的音信连接变得专程扁平,信息传播速度提升千百倍,从原先的按照月度、天到如今按分和秒来算了。过去,信息引爆的门道必须优先出基本媒体的泛报道,才见面有社会之热议。然而到了今天,一长条消息的引爆往往先有群众的热议,接着才产生媒体的跟进和推广。

民俗的生意营销逻辑是以信息不对称,传播就是砸广告做公关,总之凡事就是较嗓门大。但是,新的社会化媒体推平了任何,传播速度杀爆发,信息之扩散半径可百加倍、千倍地增进,频繁出现了“一夜成名”的案例。

信息对如给用户用脚投票的力大大增强。一个出品或一个劳动好不好,企业协调吹牛不算是数了,大家说了算;好信息还是深消息,大家快就可由此社交网络分享。信息的公道对顶特征,也如网络公共空间有了最强的论文自净能力,假的着实不了,真的吗借不了。

信传播之变更代表用户获取信息的习惯吗转移了,你身边的情侣每一个人口都变成了生活方面的“专家”——移动装备的推广和网络的惠及,大家既不行习惯把团结之花体验随时用微博、微信发出来,比如,朋友、同事共同用,一道特色菜肴及了不是及时动筷子,而是先掏出手机拍照发朋友围,不顶平分钟在网围观的情侣便会触发许、吐槽或转发。

据此,在初的倒互联网时代,我们要坚定不移为口碑做传播,并使善于社会化媒体。

via「参与感」

 

尾巴

上文很多都是一直源于「参与感」一书写,本来是圈了想自己写一些物,但看了简短的充分好之词之后,就重为描绘不出了,还是略的梳理了一晃即便披露出来了,尾巴勾点好之想法吧。

互联网带动的是私有力量之隆起,是错开中心化,但其实就是每一个口都是骨干,在羁押《互联网时代》的当儿就询问及以互联网起源的时光便分布式信息体系,是一个网的怀念,网上的各一个节点都是如出一辙的,不得不说就正是十分好奇之规律。

于之前接连认为互联网难以衡量,雅虎、诺基亚还见面为颠覆,微软今天呢危险,在互联网如此激烈变化中就实在没有什么是足以规定的也罢?现在自想开诺基亚底口号“以食指呢按照”实在就算是互联网时代相对确定的轨道,诺基亚太过相信自己之通讯技术及硬件质量,没有询问及大家对于智能手机的迫切需求,被苹果店颠覆,雅虎同样是最好过迷信门户而失去了寻找引擎、微软于pc端称霸太遥远,难以转型走端…

然我们为知道,实在是互联网发展的极度抢了,从前一律潮技术革命需要三百年,现在或者短几年即会见为淘汰,人们的要求连续在不断的别,企业自我的转型也再三“积重难返”。简单的“以人吧仍”真的挺为难成功,所以饭饭想以后有有点之工作室,反而会比较老店重新爱在,做同样单纯稍微耗子,在互联网的会灵活机变!

via;健健大侠「参与感」读书笔记

  1. SQL的履进程

当通告一条SQL或PL/SQL命令时,Oracle会自动寻找该令是否在为同享池中来决定针对目前之言辞以硬解析或软解析。

普普通通情况下,SQL语句的施行进程如下:

Step1.
SQL代码的语法(语法的不错)及语义检查(对象的存在性与权力)。

Step2.
用SQL代码的文书进行哈希得到哈希值。

Step3.
如果同享池中有同样的哈希值,则指向斯令进一步认清是否开展软解析,否则到e步骤。

Step4.
对此有一样哈希值的新命令行,其文件以和已经存在的命令行的文本逐只开展比较。

   
这些比较包括大小写,字符串是否相同,空格,注释等,如果同,则指向那开展软解析,转到步骤Step6,无需重新硬解析。

    否则交步骤Step5。

Step5. 硬解析,生成执行计划。

Step6. 执行SQL代码,返回结果。

 

2.
Oracle对斯sql将拓展几个步骤的处理过程:

Step1. 语法检查(syntax check)

  检查是sql的拼写是否语法。

Step2. 语义检查(semantic check)

  诸如检查sql语句被之拜访对象是否是与拖欠用户是否享有相应的权位。

Step3、对sql语句进行分析(parse)

  以中算法对sql进行剖析,生成解析树(parse
tree)及执行计划(execution plan)。

Step4、执行sql,返回结果(execute and
return)

 

  1. 硬解析的损害:

(1)
占用资源还多,执行款,因为不会见用已解析好的query plan。

(2) 硬解析导致library
cache上的latch竞争,这会降低系统的并发性,使oracle无法充分利用系统资源。(此时虽系统资源看上去不忙,oracle也会很缓慢)。

(3)
一个来成千上万硬解析的略利用或导致数据库有应用变慢。

 

  1. 总结

     
其中,软、硬解析就发出在第三个经过里(对sql语句进行解析parse)。

  Oracle以中的hash算法来抱该sql的hash值,然后在library
cache里查找是否留存该hash值;

  假设有,则以此sql与cache中之展开比;

  假设“相同”,就将使已部分解析树与履行计划,而简单了优化器的相干工作。这也就是是软解析的进程。

  诚然,如果地方的2只如中无有一个免成立,那么优化器都拿展开创办解析树、生成执行计划之动作。这个历程就是于硬解析。

  创建解析树、生成执行计划对sql的施行来说是支付昂贵之动作,所以,应当尽力避免硬解析,尽量以软解析。

 

BWIN必赢亚洲56.net 2二、软解析


Oracle中SQL语句执行过程遭到,Oracle内部分析原理如下:

1、当一用户率先不行提交一个SQL表达式时,Oracle会将立即SQL进行Hard
parse,这过程有点像程序编译,检查语法、表名、字段名等相关消息(如下图),这过程会花比较长的工夫,因为它如果分析报告句子之语法与语义。然后拿走最好优化后的实行计划(sql
plan),并以内存中分配一定的上空保存该语句与相应之执行计划等信息。

 

2、当用户第二破呼吁或频繁呼吁时,Oracle会自动找到先前之言辞与实施计划,而未会见展开Hard
parse,而是一直开展Soft
parse(把话对应的实行计划调出,然后实施),从而减少数据库的辨析时。

注意的凡:Oracle中只能完全相同的语,包大小写、空格、换行都求一律不时,才见面重复使用以前的解析结果跟实践计划。

 

3、对于大气底、频繁造访的SQL语句,如果不利用Bind
变量的艺术,哪Oracle会花费大量之Shared latch与CPU在召开Hard
parse处理,所以,要硬着头皮提高语句的重用率,减少语句之解析时,通过了解Oracle
SQL语句的辨析过程可明白Oracle的内部处理逻辑,并当统筹及实现达标避免。

在用JDBC或其它持久化数据(如Hibernate,JDO等)操作时,尽量用占位符(?)

 

4、解析过程图

BWIN必赢亚洲56.net 3

 

5、总结

ORACLE sql 的处理过程大致如下:

  • 1.使HASH算法,得到一个HASH值,这个价值好经过V$SQLAREA.HASH_VALUE
    查看
  • 2.交shared pool 中的 library cache
    中搜索是否发平等之HASH值,如果在,则无论需硬解析,进行软解析
  • 3.要是shared
    pool不在此HASH值,则展开语法检查,查看是否有语法错误
  • 4.若没有语法错误,就开展语义检查,检查该SQL引用的对象是不是在,该用户是否具访问该目标的权
  • 5.如果没有语义错误,对拖欠SQL进行解析,生成解析树,执行计划
  • 6.生成ORACLE能运作的次上前制代码,运行该代码并且返回结果被用户

硬解析和软解析都以第5步进行

硬解析通常是贵之操作,大约占所有SQL执行的70%左右底时日,硬解析会生成执行树,执行计划,等等。

当再度实施同样漫漫SQL语句之时节,由于发现library
cache中生出同样的HASH值,这个上不见面硬解析,而会软解析,

那软解析究竟是关乎了什么吧?其实软解析就是跨了了颇成解析树,生成执行计划之耗时以耗CPU的操作,直接采用生成的行计划运行该SQL语句。

 

BWIN必赢亚洲56.net 4三、软解析


1.底下的老三独查询语句,不能够采取相同之共享SQL区。尽管查询的阐发对象下了大小写,但Oracle为其生成了不同之实践计划

select * from emp;

select * from Emp;

select * from EMP;

2.像样之事态,下面的查询中,尽管其where子句empno的价值不同,Oracle同样也夫绷成了不同的实行计划       

select * from emp where empno=7369

select * from emp where empno=7788

3.当认清是否用硬解析时,所参照的靶子以及schema应该是一样的,如果目标同,而schema不同,则需要使用硬解析,生成不同的实践计划

sys@ASMDB> select owner,table_name from dba_tables where table_name like 'TB_OBJ%';
        OWNER                          TABLE_NAME
        ------------------------------ ------------------------------
        USR1                           TB_OBJ               --两个对象的名字相同,当所有者不同
        SCOTT                          TB_OBJ

usr1@ASMDB> select * from tb_obj;

scott@ASMDB> select * from tb_obj;      --此时两者都需要使用硬解析以及走不同的执行计划

 

BWIN必赢亚洲56.net 5四、硬解析



解析即所有SQL语句之执行得了完全都的分析,生成执行计划。而硬解析,生成执行计划用耗用CPU资源,以及SGA资源。在这不得不提的凡本着库缓存中
闩的采用。闩是沿的细化,可以清楚为凡一律栽轻量级的差行化设备。当进程申请到闩后,则这些闩用于维护共享内存的累以相同时刻不见面被简单单以上之历程修改。在
硬解析时,需要申请闩的使,而闩的数目在片的情形下需要等。大量的闩的下由此造成需要用闩的经过排队越频繁,性能则更进一步低下。

1.
下对端的个别种情况进行现身说法

当片独不同之session中落成,一个为sys帐户的session,一个也scott账户的session,不同之session,其SQL命令执行以不同的款家名为开始

要是” sys@ASMDB> ” 
表示用时sys帐户的session,” scott@ASMDB>
“表示scott帐户的session

sys@ASMDB> select name,class,value from v$sysstat where statistic#=331;         
NAME                      CLASS      VALUE
-------------------- ---------- ----------           --当前的硬解析值为569
parse count (hard)           64        569

scott@ASMDB> select * from emp;    

        sys@ASMDB> select name,class,value from v$sysstat where statistic#=331;      
        NAME                      CLASS      VALUE
        -------------------- ---------- ----------           --执行上一个查询后硬解析值为570,解析次数增加了一次
        parse count (hard)           64        570

scott@ASMDB> select * from Emp;

        sys@ASMDB> select name,class,value from v$sysstat where statistic#=331;        
        NAME                      CLASS      VALUE
        -------------------- ---------- ----------           --执行上一个查询后硬解析值为571
        parse count (hard)           64        571

scott@ASMDB> select * from EMP;

        sys@ASMDB> select name,class,value from v$sysstat where statistic#=331;        
        NAME                      CLASS      VALUE
        -------------------- ---------- ----------           --执行上一个查询后硬解析值为572
        parse count (hard)           64        572   

scott@ASMDB> select * from emp where empno=7369;       

        sys@ASMDB> select name,class,value from v$sysstat where statistic#=331;
        NAME                      CLASS      VALUE
        -------------------- ---------- ----------           --执行上一个查询后硬解析值为573
        parse count (hard)           64        573

scott@ASMDB> select * from emp where empno=7788;   --此处原来empno=7369,复制错误所致,现已更正为7788@20130905   

        sys@ASMDB> select name,class,value from v$sysstat where statistic#=331;
        NAME                      CLASS      VALUE
        -------------------- ---------- ----------          --执行上一个查询后硬解析值为574
        parse count (hard)           64        574

从者的示范中得望,尽管实施之话语存在细微之出入,但Oracle还是也夫开展了硬解析,生成了不同之实施计划。即便是一样的SQL语句,而个别长达语句中空格的微不一样,Oracle同样会开展硬解析。 

 

**BWIN必赢亚洲56.net 6五、硬解析改进

  • 运动态语句**

1.
变更参数cursor_sharing

       
参数cursor_sharing决定了何种类型的SQL能够用同一的SQL area

        CURSOR_SHARING = { SIMILAR |
EXACT | FORCE }    

            EXACT     
–只有当宣布之SQL语句与缓存中之言辞完全相同时才故已经部分实行计划。

            FORCE     
–如果SQL语句是配面量,则迫使Optimizer始终用已经有些实行计划,无论已有的实行计划是免是超级的。

            SIMILAR  
–如果SQL语句是配面量,则只有当都有些实行计划是超级时才祭她,如果就来尽计划不是最佳则重复对之SQL

                           
–语句进行辨析来制定最佳实践计划。

       
可以因不同之级别来设定该参数,如ALTER SESSION, ALTER SYSTEM

sys@ASMDB> show parameter cursor_shar             --查看参数cursor_sharing
            NAME                                 TYPE        VALUE
            ------------------------------------ ----------- ------------------------------
            cursor_sharing                       string      EXACT

sys@ASMDB> alter system set cursor_sharing='similar';    --将参数cursor_sharing的值更改为similar

sys@ASMDB> select name,class,value from v$sysstat where statistic#=331;    
            NAME                      CLASS      VALUE
            -------------------- ---------- ----------        --当前硬解析的值为865
            parse count (hard)           64        865

scott@ASMDB> select * from dept where deptno=10;

sys@ASMDB> select name,class,value from v$sysstat where statistic#=331;  
            NAME                      CLASS      VALUE
            -------------------- ---------- ----------        --执行上一条SQL查询后,硬解析的值变为866
            parse count (hard)           64        866

scott@ASMDB> select * from dept where deptno=20;

sys@ASMDB> select name,class,value from v$sysstat where statistic#=331;
            NAME                      CLASS      VALUE
            -------------------- ---------- ----------        --执行上一条SQL查询后,硬解析的值没有发生变化还是866
            parse count (hard)           64        866

sys@ASMDB> select sql_text,child_number from v$sql   -- 在下面的结果中可以看到SQL_TEXT列中使用了绑定变量:"SYS_B_0" 
         2  where sql_text like 'select * from dept where deptno%';
            SQL_TEXT                                           CHILD_NUMBE
            -------------------------------------------------- ------------  
            select * from dept where deptno=:"SYS_B_0"                    0

sys@ASMDB> alter system set cursor_sharing='exact';       --将cursor_sharing改回为exact

            --接下来在scott的session 中执行deptno=40 和的查询后再查看sql_text,当cursor_sharing改为exact后,每执行那个一次

            --也会在v$sql中增加一条语句

sys@ASMDB> select sql_text,child_number from v$sql                
         2  where sql_text like 'select * from dept where deptno%';
            SQL_TEXT                                           CHILD_NUMBER
            -------------------------------------------------- ------------
            select * from dept where deptno=50                            0      

            select * from dept where deptno=40                            0

            select * from dept where deptno=:"SYS_B_0"                    0

 

2.
以绑定变量的计

绑定变量要求变量名称,数据类型以及长是同等,否则无法使用软解析

(1). 绑定变量(bind
variable)是赖当DML语句被使用一个占据位符,即采用冒号后面紧跟变量名的花样,如下

            select * from emp where
empno=7788    –未使用绑定变量

            select * from emp where
empono=:eno   –:eno即为绑定变量

           
在次只查询中,变量值在查询执行时让提供。该查询才编译一次等,随后会把询问计划存储在一个共享池(库缓存)中,以便以后得与任用这个查询计划。

(2).
下面采用了绑定变量,但零星单变量其面目是勿雷同之,对这种状况,同样利用硬解析

            select * from emp where
empno=:eno;

            select * from emp where
empno=:emp_no

          
使用绑定变量时要求不同之对话中采取了同之答复环境,以及优化器的条条框框等 

scott@ASMDB> create table tb_test(col int);     --创建表tb_test

scott@ASMDB> create or replace procedure proc1  --创建存储过程proc1使用绑定变量来插入新记录
          2  as
          3  begin
          4      for i in 1..10000
          5      loop
          6          execute immediate 'insert into tb_test values(:n)' using i;
          7      end loop;
          8  end;
          9  /

Procedure created.

scott@ASMDB> create or replace procedure proc2 --创建存储过程proc2,未使用绑定变量,因此每一个SQL插入语句都会硬解析
          2  as
          3  begin
          4      for i in 1..10000
          5      loop
          6          execute immediate 'insert into tb_test values('||i||')';
          7      end loop;
          8  end;
          9  /

Procedure created.

scott@ASMDB> exec runstats_pkg.rs_start

PL/SQL procedure successfully completed.

scott@ASMDB> exec proc1;

PL/SQL procedure successfully completed.

scott@ASMDB> exec runstats_pkg.rs_middle;

PL/SQL procedure successfully completed.

scott@ASMDB> exec proc2;

PL/SQL procedure successfully completed.

scott@ASMDB> exec runstats_pkg.rs_stop(1000);
            Run1 ran in 1769 hsecs
            Run2 ran in 12243 hsecs             --run2运行的时间是run1的/1769≈倍
            run 1 ran in 14.45% of the time   

            Name                                Run1      Run2      Diff
            LATCH.SQL memory manager worka       410     2,694     2,284
            LATCH.session allocation             532     8,912     8,380
            LATCH.simulator lru latch             33     9,371     9,338
            LATCH.simulator hash latch            51     9,398     9,347
            STAT...enqueue requests               31    10,030     9,999
            STAT...enqueue releases               29    10,030    10,001
            STAT...parse count (hard)              4    10,011    10,007    --硬解析的次数,前者只有四次
            STAT...calls to get snapshot s        55    10,087    10,032
            STAT...parse count (total)            33    10,067    10,034
            STAT...consistent gets               247    10,353    10,106
            STAT...consistent gets from ca       247    10,353    10,106
            STAT...recursive calls            10,474    20,885    10,411
            STAT...db block gets from cach    10,408    30,371    19,963
            STAT...db block gets              10,408    30,371    19,963
            LATCH.enqueues                       322    21,820    21,498    --闩的队列数比较
            LATCH.enqueue hash chains            351    21,904    21,553
            STAT...session logical reads      10,655    40,724    30,069
            LATCH.library cache pin           40,348    72,410    32,062    --库缓存pin
            LATCH.kks stats                        8    40,061    40,053
            LATCH.library cache lock             318    61,294    60,976
            LATCH.cache buffers chains        51,851   118,340    66,489
            LATCH.row cache objects              351   123,512   123,161
            LATCH.library cache               40,710   234,653   193,943
            LATCH.shared pool                 20,357   243,376   223,019

            Run1 latches total versus runs -- difference and pct
            Run1      Run2      Diff     Pct
            157,159   974,086   816,927  16.13%          --proc2使用闩的数量也远远多于proc1,其比值是.13%  PL/SQL procedure successfully completed.

 

 (3). 使用绑定变量的利

  • 出于点的言传身教可知,在未采取绑定变量的动静下,不论是分析次数,闩使用的数额,队列,分配的内存,库缓存,行缓存远远盖绑定
  • 变量的情况。因此尽可能的下绑定变量避免硬解析产生所需要的附加的系统资源。
  • 绑定变量的长
  • 减少SQL语句的硬解析,从而减少因硬解析产生的额外开销(CPU,Shared
    pool,latch)。其次提高编程效率,减少数据库的看次数。
  • 绑定变量的瑕疵
  •  优化器就见面忽略直方图的信息,在转变执行计划的时候可能不够优化。SQL优化相对较艰难

 

BWIN必赢亚洲56.net 7六、总结


 1.尽可能的免硬解析,因为硬解析需要再次多之CPU资源,闩等。

 2.cursor_sharing参数应权衡利弊,需要考虑采取similar与force带来的熏陶。

 3.尽可能的应用绑定变量来避免硬解析。 

 

Thanks and Regards

参照:乐沙弥大神 –
http://blog.csdn.net/leshami/article/details/6195483

参考:乐沙弥大神 –
http://10.61.208.50:15871/cgi-bin/blockpage.cgi?ws-session=18446744072512592920

参照:乐沙弥大神 –
http://czmmiao.iteye.com/category/143940

BWIN必赢亚洲56.net 8

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图