作者:张晓明
本书分基础篇、中级篇、高级篇 三个级别,粗略的看了本书,主要还是看基础篇和中级篇,下面是我随手记录的一些知识点,不够全面,还望包涵;
truncate和delete的区别:
truncate是ddl语句,delete是dml语句
truncate速度快,delete速度慢
truncate不可以rollback,delete 可以rollback(truncate有风险)
truncate回收高水位线(high watermark),delete不回收高水位
delete需要把每个有数据的块读出来,写上delete标记,另外还要把delete的内容拷贝一份到undo,并且把它的动作记录到redo;
truncate就是把系统表(或者tablespace bitmap)里面把相关的extent的标记为未使用,另外把dba_objects(obj$)里的data_object_id换一下。
相当于,truncate的操作就是先drop掉表,并且重建一张新表
OSI模型把网络交互分成7层,从下向上一次为:
物理层:这一层定义了物理、电气规范,用于在两个物理主机间建立、维持、释放连接;Hub属于典型的物理层设备;
数据链路层:这一层完成同一子网的两个设备间的通信,交换机属于典型的链路层设备;
网络层:这一层提供网络间的路由功能,如果通信跨越多个子网络,这一层负责选择一条最优路线,路由器属于典型的网络层设备,有一种设备叫做“三层交换机”,实际就是交换机中添加路由的功能,这一层的典型协议是IP协议;
传输层:完成两个节点间数据的可靠传输,这一层的典型协议是TCP、UDP协议。
会话层:
表示层:
应用层:
数据块结构:
4部分:数据块头(Block header)、Row Directory、Free Space、Used Space
(1)、块头中储存着数据块地址、数据块类型(索引块、UNDO块等)、事务表(ITL)
ITL是数据块头最为重要的内容,它是Oracle “行级锁”和“读一致性”的实现基础,也是Oracle优于其他数据库的“锁机制”体现,ITL相当于一个表格,每个表项都指向在本数据块中参与到某个事物的一条记录,包括内有有UBA(Undo Block Address)、事物号(Transaction ID)、SCN号。
(2)、Row Directory这部分信息记录了数据块中每条记录的相对于数据块头偏移量。可以把它想象成数据块内部的一个指针表,有了这个指针后,Oracle寻找某条记录时,就不必遍历整个数据块才能获取一条记录了。
(3)、Free Space这部分空间是数据块的空闲空间,每当插入新纪录、更新记录需要更大的空间就会使用这部分空间,这个空间的大小受PCTFREE参数的控制。
(4)、Used Space数据记录占用的空间,这部分空间同样受着PCTFREE和PCTUSED两个参数的限制。
Extent空间管理:
本地管理比字典管理有4个优势:
不再需要在UET$、FET$两个数据字典上的递归SQL调用;
减少了数据字典的竞争(ST Enqueue);
改变位图不会产生UNDO记录;
不再需要周期性的合并操作(Coalescing)。
Oracle主要后台进程
进程
|
缩写
|
描述
|
Database Writer | DBWn | 负责把脏数据写回磁盘 |
Log Writer | LGWR | 负责把日志数据写到联机日志文件 |
Checkpoint | CKPT | 负责检查点操作 |
Process Monitor | PMON | 负责维护用户进程 |
System Monitor | SMON | 负责实例恢复 |
Achiever | ARCn | 负责归档操作,生成归档日志 |
Manageability Monitor | MMON | 和AWR有关 |
Manageability Monitor Light | MMML | 和AWR有关 |
Memory Manager | MMAN | 和自动SGA管理有关 |
Job Queue Coordination Process | CJQO | 定时任务进程 |
Recovery Write | RVWR | 和Flashback Database 功能有关 |
Change Tracking Write | CTWR | 跟踪数据块变化,支持快速增量备份 |
Redo记录包含以下内容:
事务号;
被修改数据的位置,数据块号;
修改后的值。
完整的SQL语句的执行过程:
(1)
Synatic:语法分析,这一步检查SQL语句的语法是否正确,有没有拼写错误,比如把SELECT写成SELET。
(2)
Semantic:语义分析,这一步检查要查询的对象是否存在,以及用户是否具有操作该对象的权利。
(3)
Parent Cursor:在Library Cache中检查语句的Cursor是否存在,如果存在可以重用的Cursor(包括Parent Cursor和Child Cursor),则把PGA的Private SQL Area和其做关联,然后直接跳到第(8)步。这种解析也叫做软解析(Soft Parse)。如果没有就申请一个Parent Cursor,Parent Cursor就是用来保存SQL语句的,然后继续第(4)步。
(4)
View Merge:如果用户的语句中用到了试图(View),把试图语句合并到用户语句中。
(5)
Statement Transformation:把Complex SQL转化成simple SQL,比如展开子查询。
某些资料也把(4)和(5)这两步操作叫做逻辑优化(Logical Optimization)。
(6)
Optimization:确定最佳的访问路径。如果是RBO,根据一些预定义的规则来决定访问路径;如果是CBO,则根据对象的统计信息确定访问路径。有些资料将这一步操作叫做物理优化(Physical Optimization)。
(7)
QEP Generation:生成执行计划(Query Execution Plan);也就是产生Child Cursor。执行计划会保存在Child Cursor中,并和Parent Cursor相关联。在Child Cursor中保存的是执行计划和执行环境信息(比如优化器模式)。
和软解析(Soft Parse)相对应,如果一个语句完整的经历了第(1)~(7)步,这个解析过程叫做硬解析(Hard Parse)。
(8)
QEP Execution:执行语句,生成结果。
性能微调-与Cursor有关的参数:
OPNE_CURSORS :每个Session最多能够打开的Cursor数量,超过就会报ORA-1000错误;
SESSION_CACHED_CURSORS:代表被缓存的SQL Cursors(减少解析);
CURSOR_SHARING:定义Cursor共享的模式,包括:EXACT(精确).FORCE(强制).SIMILAR(类似)。
CURSOR_SPACE_FOR_TIME:缺省值为false,对于PARSE比较繁琐,SQL执行很频繁,共享池碎片较为严重的情况,建议不要使用。
聚簇因子:
高聚簇因子意味着索引访问效果不好,而低聚簇因子意味着访问效果好。
dba_indexes中的clustering_factor列反应了索引列的聚簇因子。
连接:
NEST LOOP:两表地位不同,一个驱动表(driving table),一个为被驱动表(drived table),工作方式是以驱动表每遍历一行就对整个被驱动表遍历一次,最终驱动表遍历一次,被驱动表被遍历N次(N为驱动表的行数)。
SORT MERGE:两表地位相等,每个表都先行排序,排序后两表都需要遍历一次,主要开销在两表的排序上。(Oracle实现排序的算法是二叉树算法(Binary Insertion Tree))。
HASH JOIN:两表也有驱动表和被驱动表的关系,算法执行过程:准备阶段:对驱动表的连接字段进行哈希操作,产生一系列的Hash Bucket(哈希桶)。探测阶段:依次读取被驱动表的每条记录,并对记录的连接字段执行相同的哈希函数,根据结果到上一步产生的哈希桶中检查匹配的记录。
STATSPACK解决问题的流程:
在利用STATSPACK时期,DBA
(1)首先,要有证据表明系统确实有问题,可能是用户抱怨等待时间变长,或者监控到CPU、IO突然负载增大。
(2)收集数据,诊断分析,初步估计发生问题的部分,性能通常会涉及很多组件(如CPU、IO、内存),每个部分都有可能是问题的瓶颈所在。
(3)针对不同的问题原因,确定相应的解决方案。
(4)尝试解决方案,通常一次尝试只针对一个组件,并观察调整后的效果。
(5)如果调整后没有效果,则说明原因定位错误,继续考虑其他问题和解决方案。
(6)如果调整后效果明显,就说明原因定位准确,根据原因进一步制定长期的解决方案。
(7)通常这个流程需要反复循环。
后续会继续添加;
点评:作者张晓明还有一本《大话Oracle RAC》的经典书籍,本人现在也在拜读,本书很适合一些平时没有注重细节知识点的求职朋友来突击一下Oracle基础知识。本书结构简单明了,知识点明细,需要慢慢品读,也有大量实验与理论相结合。
--------------------------------------------------------------------------------------------
版权所有,转载请注明作者及原文链接,否则追究法律责任!
QQ: 584307876
作者: Seven
原文链接: http://blog.csdn.net/sunjiapeng/article/details/8963713
邮箱: seven_ginna@foxmail.com