收获不止Oracle11g文档格式.docx
- 文档编号:17271995
- 上传时间:2022-11-30
- 格式:DOCX
- 页数:15
- 大小:152.04KB
收获不止Oracle11g文档格式.docx
《收获不止Oracle11g文档格式.docx》由会员分享,可在线阅读,更多相关《收获不止Oracle11g文档格式.docx(15页珍藏版)》请在冰豆网上搜索。
注:
(一)将数据缓存区数据写到磁盘的动作由进程CKPT来触发的,CKPT触发DBWR写出
(二)DBWR是oracle核心进程,负责将数据缓存区数据写入磁盘的,该进程和CKPT相辅相成的,因为是CKPT促成DBWR去写的
(三)CKPT执行的越频繁,DBWR写出越频繁,DBWR写出越频繁就体现不出批量特性,性能就降低,但是数据库异常恢复的时候会越迅速
(四)LGWR负责把数据缓存区的数据从内存写到磁盘REDO文件,完成数据库对象创建,和更新数据等操作过程的记录,即使数据文件全部被删除,也可以通过这些日志将所有的数据库中曾经发生的事情全部重做一遍
平衡问题:
批量刷出的量比较小,oracle性能就会降低,但是断电恢复时间就更短;
反之批量刷出的量比较大,oracle性能是最高的,但是断电开机恢复的时间也更长
日志写入原理:
Oracle将数据缓存区数据写入磁盘钱,会先进行日志缓冲区写进日志文件的操作,病耐心等待其先完成,才会去完成这个内存刷到磁盘的动作,这就是所谓的凡事有记录
6.LGWR五个执行计划制度
1每隔三秒执行LGWR运行一次
2任何commit触发LGWR运行一次
3BDWR要把数据从数据缓存写到磁盘触发LGWR运行一次
4日志缓存区满三分之一或记录慢1MB,触发器LGWR运行一次
5联机日志文件切花也将触发LGWR
7.查询回滚段的相关参数
Sql>
showparameterundo
8.数据库的一致性体现
比如查询一个表的数据从8点开始知道9点才结束,在8:
30的时候中间有插入记录,那查询出来的记录是8点的还是9点的数据库呢;
实际上是8点的数据信息,对于过程中产生的任何数据更新都不予理睬,除非重新查询,oracle不会实行回头读取数据的,否则查询永远结束不了
9.事务槽是用来分配回滚空间的,如果你更新了某块,事务就被写进事务槽里。
如果未提交或者回滚,该块就存在活动事务
10.了解SGA开辟多大空间
Showparametersga
查询出来的数据显示SGA是2368,PGA是788MB,
Showparametershared_pool_size
查看到的共享池和数据缓存区的大小都为0,,原来SGA自动管理,它们的带下有SGA_max_size和SGA_Target决定,总的代销为2368MB,分配多少由Oracle决定
11.数据库Database启停和参数文件及控制文件息息相关,主要分为三个阶段nomount,mount和open,在启动中
也可以直接输入startup启动,分成三步startupnomount(pfile和spfile),startupmount和alterdatabaseopen
SQl>
showparameterspfile--启动spfile
而关闭数据库整合在一个命令中shutdownimmediate如下语句
shutdownimmediate
Databaseclosed
Databasedismounted
Oracleinstanceshutdown
12.sql/plus查询数据库参数文件位置,控制文件位置,数据文件位置
参数文件位置sql>
showparameterspfile
控制文件位置sql>
showparametercontrol
数据库文件位置sql>
selectfile_namefromdba_data_files;
日志文件位置sql>
selectgroup#,memberfromv$logfile
归档文件位置:
showparameterrecovery
告警日志文件(位于bdump目录下,以alert大头的文件)
13.oracle的共享池和数据缓存区的意义
共享池:
为了第一次执行时保存解析过程,避免第二次执行再做代价高昂的解析
数据缓存区:
为了第一次获取数据是将这些数据从磁盘读到数据缓存区,以便第二次可以避免磁盘查找,直接从数据缓存区找到数据,没从而避免物理读
14.排序orderby在pGA内存区中操作,如果尺寸装的下就在内存中完成,否则超出部分会在临时表空间中完成排序,造成性能低下
15.学习数据库体系结果的意义优化数据查询和操作的效率
a)比如对于某主机总共才4G的内存,而运行在其平台上的数据库是一个几乎没有什么访问量的小数据库,可能100M的共享池就OK了,去被开辟了3G的SGA内存,500M的PGA,但是由于操作系统内存不足,导致主机运行缓慢,从而导致数据库运行缓慢,需要减少SGA大小
b)如果数据缓存区过小导致大数据量的数据库产生大量的物理读,加大SGA内存相当于增加了数据缓存区的大小,这样数据缓存区够大,装的就多,物理读自然就减少了,性能自然就提高了
16.返回绝大部分的数据,一般情况倾向于全表扫,返回少量的数据,一般倾向于索引读
二.单车道飞船的经典之旅
1.
1.未优化前单车速度
T表已经存在
Sqlplussys/sys
Droptabletpurge
Createtablet(xint);
--将共享池清空
Altersystemflushshared_pool;
2.给t表实现1到10w的值插入需求
Createorreplaceprocedurettt
proc1
as
begin
forIin1..100000
loop
executeimmediate
‘insertintovalues(‘||i||’)’;
Commit;
Endloop;
End;
-----执行该过程将其创建起来
执行该过程
Sql>
connectlib/lib已连接
droptabletpurge;
表已删除
altersystemflushshared_pool;
--系统已更改
settimingon
execproc1;
Pl/Sql过程已成功完成
已用时间:
00:
42.87
SQL>
selectcount(*)fromt
Count(*)
100000
3,共享池中缓存下来的SQL语句以及hash出来的唯一值,都可以在V$sql中对应的sql_text和SQl_Id字段中查询到,而解析的次数和执行的次数分别可以从parse_call和executions字段中获取;
由于这个过程proc1执行的是insertintot的系列插入,于是我们执行如下语句来查询proc1在数据库共享池中执行的情况,具体如下
Selectt.sql_text,t.sql_id,t.parse_calls,t.executions
Fromv$sqlt
Wheresql_testlike‘%insertintotvalues%’
4.绑定变量
Createorreplaceprocedureproc2
As
Begin
ForIin1..100000
Loop
Executeimmediate
‘insertintotvalues(:
x)’usingI;
Commit;
执行测试proc2过程
execproc2;
08.41
5.静态改写
Createorreplaceprocedureproc3
insertintotvalues(i);
执行测试proc3过程
createtablet(xint);
execproc3;
06.25
Proc3也实现了绑定变量,而且动态SQL的特点是执行过程中的解析,而静态SQL的特点是编译的过程就解析好了。
6.批量提交
Commit放在循环的外面而不是里面,放在里面以为这没插入1条,就要提交1次,那放在循环里就要提交10w次,而放在循环外就是全部插入完后提交1次;
确实如此,commit触发LGWR将REDOBUFFER写出REDOLOG中,并且将回滚段的活动事物标记为不活动,同时让回滚中记录对应前镜像记录的所在位置标记为可以重写,切记commit可不是写数据的动作哦,写数据将数据从DATABUFFER刷出磁盘是有CKPT决定的
Proc4:
Createorreplaceprocedurepro4
Insertintotvalues(I);
执行测试proc4过程
execproc4;
02.18
集合写法
Inertintotselectrownumfromdualconnectbylevel<
=100000;
执行测试该过程
已创建100000行
00.25
commit;
提交完成
00.00
7,如果将红色标记的替换为createtabletasselectrownumxfromdualconnectbylevel<
=1000000;
表已创建
10.14
第三章逻辑体系
一.Database逻辑结构
1.数据库Database由若干个表空间tablespace组成,表空间由若干个段segment组成,段segment由若干区extent组成,区extent又是Oracle的最小单元块Block组成;
尽管block是Oracle的最小逻辑数据单位,但是所有数据在文件系统层面最小物理存储单位是字节,操作系统也有一个类似Oracle的块容量参数block,而不是按照操作系统blocksize来访问的;
数据块block默认大小事8kb;
数据库试运行在操作系统OS上的,而写入的数据文件也是在操作,因此真正操作的单位应该是操作系统OS块的大小
2.数据块的组成:
数据块头datablockheader,表目录区tabledirectory,行目录区rowdirectory,可用空间区,行数据区;
其中数据块头,表目录区,行目录区被统称为管理开销overhead
3.表空间又包含系统表空间,回滚段表空间,临时表空间,用户表空间
4.在Oracle数据库中,只要segment段创建好,数据库就一定为其分配了包含若干数据块datablock的初始数据扩展(initialextent)
5.SQL语句
Desctable_name
--可以查看表字段以及属性
3.3.2PCTFREE与性能
消除行迁移,,逻辑读减少;
消除行迁移的一个简单方法就是数据重构。
EG:
Createtableemployees_BKasselect*fromEmployees;
注:
PCTFREE默认大小事10
Oraclepctfree
一、建立表时候,注意PCTFREE参数的作用
PCTFREE:
为一个块保留的空间百分比,表示数据块在什么情况下可以被insert,默认是10,表示当数据块的可用空间低于10%后,就不可以被insert了,只能被用于update;
即:
当使用一个block时,在达到pctfree之前,该block是一直可以被插入的,这个时候处在上升期。
PCTUSED:
是指当块里的数据低于多少百分比时,又可以重新被insert,一般默认是40,即40%,即:
当数据低于40%时,又可以写入新的数据,这个时候处在下降期。
二、举例说明
假设你一个块可以存放100个数据,而且PCTFREE是10,PCTUSED是40,则:
不断的向块中插入数据,如果当存放到90个时,就不能存放新的数据,这是受pctfree来控制,预留的空间是给UPDATE用的。
当你删除一个数据后,再想插入个新数据行不行?
不行,必须是删除41个,即低于40个以后才能插入新的数据的,这是受pctused来控制的。
注意:
如果表空间上启用了ASSM,在建立表的时候,只能指定PCTFREE,否则可用指定PCTFREE和PCTUSED。
三、调整pctfree与pctused
1、通过user_tables的pct_free,pct_used来查看
selecta.table_name,a.pct_free,a.pct_used,a.*fromuser_tablesa;
说明:
pctfree表示用于保留更新操作的百分比,如果超过该值不能插入数据。
pctused表示数据所占最低百分比,如果达到pctfree时不能插入,delete后如果达到pctused才可以用来insert
2、如果你使用的是自动管理表空间pctused不需要设置
altertabletablenamepctfreevalues;
pctfree默认是10,主要看更新的数据有多大,可以查看表的max_row_len如果很大又频繁更新可以考虑增加该值。
pctused主要看删除数据的大小,如果很大可以调大该值,如果不是很频繁可以设置小一些30-40
pctused+pctfree<
90
3、查看自动管理表空间
selecttablespace_name,segment_space_managementfromuser_tablespaces;
--segment_space_management为auto表示自动管理表空间
主要起到节省表空间的作用。
3.3.4块大小与应用
数据仓库OLAP:
一般倾向于block尽量大,一般查询返回大量的数据,OLAP最多的查询方式应该是全表扫描
OLTP:
倾向于block尽量不要大,查询返回极少量的数据,OLTP系统最多的查询方式是索引读
OLAT和OLTP对于块block大小设置对于查询表的速度体现在逻辑读和物理读;
在索引读的环境下,性能是上基本无差异
第四章表的设计成就英雄
一.表设计之五朵金花
(一)普通堆表:
适合大部分设计场景,有优点优缺点,需要和其他表设计取长补短
优点:
1)语法简单方便
2)使用大部分场景
缺点:
1)表更新日志开销较大
2)Delete无法释放空间
3)表记录太大检索较慢
4)索引回表读开销很大
5)即便有序插入,也难以有序读出
(二)全局临时表
1)高校删除
2)产生日志少
3)不同session独立,不产生锁
1)语法特别
2)数据无法得到有效的保护
(三)分区表
1)有效的分区消除
2)高效的记录清理
3)高效的记录转移
缺点:
1)语法复杂
2)分区过多对系统有一定的影响
(四)索引组织表
优点:
表就是索引,可以避免回表
2)更新开销大
(五)簇表
优点:
可以减少或避免排序
缺点
2)表更新开销大
一、表日志更新开销最大
在删除,插入,修改中发现只有删除delete产生的undo量最多,因为undo也是需要redo保护的,所以虽然本身产生的redo不多,但是由于删除时的undo量最大,用于保护undo的redo量也最大,所以加在一起,删除产生的redo也就最多;
因此某些表只是作为中间结果的临时运算而根本无需保留日志,这样既高效又安全。
所以delete也是最消耗性能的操作,而truncate才能将释放出空间
Truncate和delete区别。
Truncate是DDL语句,delete是DML语句;
所以truncate不允许where语句;
但如果表中的where条件语句能形成有效分区,oracle是支持分区表中做truncate分区的,altertablettruncatepartition‘分区名’,如果where条件是分区条件就等同于换角度实现truncatetabletwhere。
。
的功能;
并且注意,当大量的delete删除再大量insert插入时,
Oracle首先完成插入delete的空块中,所以频繁的delete又频繁的insert的应用,是不会出现空块过多的情况的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 收获 不止 Oracle11g