day08小记

library cache

sql 执行过程
1、检查语法(检查语法,如果有错误,直接返回,省着往下执行浪费资源)  seclt *  form nimei;
2、检查语义(有没有这个表、当前用户有没有操作权限,如果没有直接返回)
3、hash计算(把当前的sql语句转换成oracle可以理解的hash值)
4、解析
4.1软解析(当一条sq1语句执行过,就会保存在library cache中,当再一次执行与此条sql相同的语句时,不经过cpu计算,直接调用share pool)

select * from aa ====>编译成一个XXXX的指令集
select * from aa 
4.2硬解析(当软解析不成功进,经过cpu计算)
5、执行

select name from aa where id=1(先计算条件,再对比表,减少查找范围,触发索引就是先看where)





生产中share pool的命中率,应达到90%以上,这样cpu的压力就小了
触发条件:
1、标准化,书写规范(越大的公司标准化做得越好,因为人比较多,如果没有标准约束,不好干活了)
select name from emp;  select name from EMP;
举例:一个大项目,肯定由多个人来完成
2、使用绑定变量
   select 价格 from emp where name=1;
   select 价格 from emp where name=2;    
      举例:互联网中,使用人比较多,每个人执行的操作不同,SQL条件也不同。
   select 价格 from emp where name=:a;【绑定变量,执行SQL前给绑定变量name先赋值=1,然后再执行】
   select 价格 from emp where name=:a;【绑定变量,执行SQL前给绑定变量name先赋值=2,然后再执行】
       





data dictionary cache

在执行sql语句时,在底层会调用 很多“数据字典”,所以设计了data dictionary cache
select * from all_users;

Optimizer收集器:

CBO优化器:衡量SQL执行计划的,选择一种最优的执行方式
           
        例:
         select name from emp where id=1;
         1、全表扫描emp (cost 1000)
         2、索引rowid扫描emp (cost 10)
         
         
不同的执行方式,cost的开销也是不同的,cost是通过收集器计算出来的。【周一 ~ 周五晚上,周六周日全天运行收集器】         

收集器收集的是一些计算cost的条件:表有多少行?多少列?数据分布的情况?块情况?等这些值,
然后才能在不执行SQL语句的情况,才能判断SQL不同的执行情况的cost。
         
假设:emp表有10W行
  收集器收集后,全表扫描emp表的cost的开销1000
  收集器收集后,索引rowid扫描emp表的cost的开销10        
         
CBO是做决策的吧,收集器是收集信息的吧。

举例:古代打仗(CBO:将军 Optimizer:间谍)        


周一 ~ 周五晚上(每次收集全库对象,只有晚上业务空闲一些)周六周日全天运行收集器 
如果白天收集,你变一行数据,收集内容就变一下,收集器压力太大了,主要是Oracle数据库的压力大了,所以都在业务低峰收集!减少压力



假设a表晚上只有10行,收集器收集了,早上的时候a表中insert了10W行,白天收集器不收集,这时候就完蛋就有问题了。
CBO判断时依据收集器,收集器收集的结果是a表只有10行。

         select name from emp where id=1;
         1、全表扫描emp (cost 1)
         2、索引rowid扫描emp (cost 2)

所以走了全表扫描,完蛋了,a表有10W行吧,不是10行吧!Oracle不会犯这么大的错误:

操作系统块4K,Oracle块8k,扫描10行数据,全表只要扫描1个块,cost 1。先扫描索引块 cost1,通过索引块的rowid再定位数据块,cost1,一共cost2


10g以前的,优化器是RBO,基于规则的(认为索引扫描就是比全表扫描快)
有1个表是10行,存放在1个表数据块上。
   如果先查索引块开销1,再查询表数据块开销1,一共开销2。
   如果直接查询表数据块开销1,一共开销1。



10g开始是CBO,基于规则的cost。
假设a表晚上只有10行,收集器收集了,早上的时候a表中insert了10W行,收集器不会收集。但是表产生的变化会写到数据字典中,
如果当前一个对象,它的变化超出阀值(不管阀值是多少,Oracle自己定的)触发收集。

假设a表有100W行,第2天我Insert一条,再delete一条,对于cpu计算的结果没有影响。

假设a表有100W行,第2天我Insert了50W,它的变化超出阀值,就会告诉收集器收集一下。


举例:一个人和平时不太一样

-------------------------------------------
database buffer cache 

select name from emp where name='zhangsan';

【第一次读取,然后存放在Buffer cache,第二次读取,直接从Buffer cache中取】
从内存中读取数据,肯定要比磁盘中读取快。

写操作,先写内存中,速度快,它认为内存中写完,此次操作就完了,当库空闲的时候再把内存的数据写到磁盘中dbf文件

命中率大,减少I/O压力


Buffer cache存储规则:如果用满了,从冷数据中,找与当前时间最远的优先覆盖

------------------------------------------
redo log buffer cache

先写内存中,速度快,它认为内存中写完,此次操作就完了,当库空闲的时候再把内存的数据写到磁盘的redo日志文件中

主流数据库,都是先写日志,再写数据库。日志比较重要,日志健全,数据没了,可以通过日志进行恢复
------------------------------------------
large pool  存储大数据【一次提取大的数据,存储在大池比较好,存储database Buffer cache就不好了,容易造成命中假像】
 

large pool存放:1、RMAN的备份数据 2、并行操作

------------------------------------------
java pool   调用前端的java指令






这5个池全在SGA(系统全局区域),在内存中分配了SGA区,在SGA又配合了以上5个池,这些池是为了加快访问速度的!!







转载于:https://www.cnblogs.com/xiaoxiao5ya/p/e9e508e5ef5c807884b22bdfa9394a22.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
《淘淘商城-day08.docx》是一份关于淘淘商城第八天工作的文档。在这一天,淘淘商城的团队采取了一系列措施来进一步提升用户体验和销售业绩。 首先,团队进行了网站内容的优化。他们对商品详情页进行了修复和更新,确保信息的准确性和完整性。同时,他们也对页面的布局进行了调整,使得用户更容易浏览和购买商品。这些改进措施能够提升用户的满意度和购买转化率。 其次,团队还加强了与供应商的合作关系。他们与一些热门品牌建立起了合作伙伴关系,以获得独家销售权或更优惠的价格。这不仅能够吸引更多的用户,还能提高淘淘商城的竞争力。 另外,团队还对物流配送进行了优化。他们与一家可靠的物流公司合作,以确保商品能够及时、安全地送达给用户。他们还推出了更快速、更便捷的配送选项,如次日达和晚间配送,以满足用户的各种需求。 为了增加用户的复购率,团队还积极进行了促销活动。他们推出了限时限量的特价商品,以及购买一定金额就能获得赠品或折扣的优惠活动。这些促销措施能够吸引用户重复购买,并提升销售额。 总之,《淘淘商城-day08.docx》记录了淘淘商城团队在第八天所做的一系列工作。通过网站内容优化、供应商合作、物流配送优化和促销活动,团队致力于提升用户体验和销售业绩,从而使淘淘商城更加竞争和成功。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值