1.可用的raid级别
raid0
raid1
raid5
raid10 比raid 01好
raid100 这种raid级别优点主要是:改进随机读的性能和消除热点
2.更新的raid5
尽管raid5是一种廉价的冗余方案,但它对于写入密集型操作的性能较差。
当对raid 5 阵列发出一个写入请求时,必须改变磁盘上已修改的块,从磁盘上读取‘奇偶校验块‘,并且使用已修改的块来计算新的奇偶校验块,然后把数据写入磁盘上,无论请求写入的数据量为多少,这个过程都会限制吞吐量,因为对于每一次写操作,都至少有两次额外的IO操作。建议在系统进行的是读取操作或只读操作时使用raid 5.
最常见的解决方案是在阵列上实现了一个内存缓存,从而加速阵列上所有IO的写性能。
1.动态缓存管理:一些厂商简单的将缓存对半划分------如果1G的缓存,500M用于读,500M用于写
2.捆绑的写操作:可以将多个奇偶校验操作分组到一次IO操作中。
3.传统文件系统的安装和维护
不要把磁盘阵列上的一个逻辑设备分割成多个文件系统。该操作看起来能够向您提供灵活性,但也会增加必须管理的数据文件的位置数量。
存储区域网络 SAN
网络附加存储 NAS
4.在硬件磁盘之间分布关键数据文件
一定要特别注意把关键的数据文件分布到可用的文件系统里。例如,经常被访问的表应该相应的索引分开放置在不同的文件系统上。下面的应尽量分离:
/:系统
/u01:oracle software
/u02:临时表空间,控制文件1
/u03:undo段,控制文件2
/u04:redo logs ,archive logs,控制文件3
/u05:system和sysaux 表空间
/u06: data1 ,控制文件4
/u07: redo logs 镜像 ,index3
/u08: data2
/u09: index2
/u10: data3
/u11: index1
5.分开存储数据和索引文件
6.避免IO争用
磁盘争用通常发生在有多个进程试图同时访问一个物理磁盘的情况下。要监控磁盘争用,可以查看数据库控制器中的数据文件度量。该度两组包含两组度量:文件平均读取时间和文件平均写入时间,度量应用于与数据库关联的所有数据文件。
通过如下查询来确定文件IO问题:
col PHYRDS format 999,999,999
col PHYWRTS format 999,999,999
ttitle "Disk Balancing Report"
col READTIM format 999,999,999
col WRITETIM format 999,999,999
col name format a40
spool fiol.out
select name,phyrds,phywrts,readtim,writetim from v$filestat a,v$datafile b
where a.file# = b.file#
order by readtim desc
/
spool off
7.通过移动数据文件来均衡文件IO
下面物理上移动一个导致文件争用的数据文件:
1.使数据文件有关的表空间脱机
alter tablespace orders offline;
2.把数据文件复制到磁盘的新位置:
3.用新的数据文件位置为表空间重命名数据文件
alter database orcl rename file ‘/disk1/orders1.dbf‘ TO ‘/disk2/orders1.dbf‘;
4.使表空间重新联机
alter tablespace orders online;
5.删除旧的数据文件
另一种用于大型的,关键文件的方法如下:
1.将表空间置于read only模式,通过查询DBA_TABLESPACE确认该状态
2.在OS级别上复制数据文件,比较复制操作后的文件大小以确保具有相同的大小
3.将表空间改为脱机
4.使用alter tablespace 命令重命名数据文件
5.将表空间改为联机
6.将表空间改为read write
7.通过查询v$datafile 确认控制文件被更新
8.在os级删除旧的数据文件
8.字典管理的表空间迁移到本地管理的表空间
把字典管理的表空间重建为本地管理的统一区模式:导出表空间中的段,删除并重新创 建表空间,然后再导入段。
在11g/10g 可以使用DBMS_SPACE_ADMIN.TABLESPACE_MIGRATE_TO_LOCAL程序包迁移 system表空间,在执行该操作之前,需要注意以下限制条件:
1.数据库中所有用户的默认临时表空间不能使system表空间
2.必须将计划进行读/写的所有表空间迁移或转换到本地管理的表空间
3.必须以受限制的模式启动数据库
4.除了UNDO,必须把所有打算迁移的表空间置于只读模式,或者拥有在本地管理的表 空间中定义的联机回滚段。
9.oracle大文件表空间
大文件表空间允许用户创建只有一个文件的表空间,该数据文件的大小完全地结合了 64位系统的能力。
大容量数据文件的实现方法是改变表空间中ROWID的管理方式。
在大文件表空间中只有一个数据文件,因此这3个位置被改为用于延长行的数据块编号 ,从而可以使用比传统小文件表空间大很多的ROWID.
10.oracle管理文件
11.ASM简介
ASM提供了内置于oracle数据库内核中的文件系统和卷管理器功能。
ASM优点:
性能跟裸设备一样优秀
从数据库空间管理的角度来看,是一个简单而强大的卷管理工具
将IO均匀地分布到所有可用磁盘驱动器以防止产生热点,并且最大化性能。
不再需要过多进行配置工作,并且最大化存储资源的利用,从而推动数据库整合。
ASM与生俱来支持大文件
在增加或删除存储容量后执行自动在线重新分配。
维护数据的冗余副本以提供高可用性,或者利用第三方的RAID的功能
支持oracle database 11g及RAC
11g2的ASM支持将OCR和表决磁盘置于ASM磁盘组之上和集群文件系统
可以利用第三方的多路径技术
内在支持异步IO和直接IO的能力
完全整合进oracle管理文件,因此在不牺牲性能的情况下降低了复杂度
Exadata只允许使用ASM
用户可以使用RMAN COPY命令从文件系统向ASM磁盘组转移数据文件
12.ASM实例
ASM实例不包含任何物理文件,比如日志文件,控制文件或数据文件,并且在启动时只需要很少的一些初始化参数。
对于具有管理多个数据库实例存储的ASM实例并且需要较高可用性的系统来说,最好是单独的ORACLE_HOME(ASM_HOME)中安装ASM 实例,而不是在数据库ORACLE_HOME中进行安装。
13.ASM和权限
11g中,oracle修改了这个概念并且引入了ASMDBA和SYSASM的角色。这个角色同操作系统中叫做OSASM的组绑定在一起。
14.ASM磁盘
ASM只能使用字符设备作为磁盘,而不能使用块设备。
但是在linux操作系统上,可以使用ASMlib来访问块设备。
在参数文件里定义磁盘 *.asm_diskstring=‘‘
15.ASM磁盘组
磁盘组中会隐式地创建ASM文件系统层。
文件系统内在具有自动化文件级数据分条和镜像功能。在ASM磁盘组中创建的数据文件将其文件区均匀地分布到磁盘组中的所有 联机磁盘,从而提供均匀地IO负载。
这些磁盘必须有如下属性:
1.当前没有被另外一个磁盘组使用。
2.必须没有预先存在ASM头
3.不能有ORACLE文件头
16.新的空间相关列
USABLE_FREE_SPACE:在V$ASM_DISKGROUP中报告的FREE_MB值并没有把镜像计算在内。指示可以"安全"利用的空闲空间数量,同 时将镜像考虑进来。该列提供了磁盘组中可用空间的更为精彩的视图。当该值为负数时,磁盘的故障对于系统来说可能是致命 的,因为这意味着没有足够的空闲空间可以忍受磁盘故障。
因此这里出现的负数并不是一个缺陷,而是一个信号,它指示磁盘组的故障组需要更多的磁盘空间以容忍可能发生的磁盘故障
REQUIRED_MIRROR_FREE_MB:指示给定磁盘组中需要多少可用空闲空间才可以在一次或多次磁盘故障后还原冗余。这个参数指示 磁盘组中最少可用的空间数量,以便可以容忍的最糟糕的故障发生后磁盘组可以恢复所有的冗余数据。
17.集群同步服务
ASM需要在使用之前安装和启动集群同步服务CSS。在单个实例中CSS维持ASM实例和数据库实例之间的同步。CSS是oracle的集群 就绪服务CRS的一个组件,在每个运行oracle 10g或11g的ASM节点上自动安装,并且在服务器启动时自动启动。在RAC10g或11g 环境中,每个RAC节点都会安装完整的oracle集群件(Clusterware)
在启动时,ASM将在CSS中注册自身及其安装的所有磁盘组。这就使CSS可以在所有RAC节点之间同步磁盘组元数据。CSS用于确保 ASM实例的健康。
18.数据库实例和ASM
数据库和ASM之间的通信总是在节点内进行,数据库不会联系远程在RAC中ASM实例以服务数据库请求。
ASM文件的数据库文件级访问(读/写)与非ASM存储类似,不同之处在于任何以"+"开头的数据库文件将使用ASM代码自动处理。
然而,通过ASM文件,数据库文件访问内在地具有裸设备的特征,也就是具有内核化异步I/O(KAIO)的非缓冲(直接)I/O
19.使用ASM进行数据库整合和集群化
oracle 11GR2 允许每个节点上的一个ASM实例管理集群中的所有数据库实例。
因此,给定节点上的ASM实例现在可以同时管理单个实例或许多RAC数据库实例的存储,并且管理一个或多个单实例数据库。
20,ASM存储管理和分配
oracle表示,1M的条带深度已经被证明是oracle数据库的最佳条带深度。
ASM在称为分配单元AU的单元中分配空间。ASM总是创建跨越磁盘组中所有磁盘的单个AU区。对于具有类似尺寸磁盘的磁盘组,在每个磁盘上应该有同等数量的AU区。数据文件被划分为多个文件区。存在两种类型AU区分布:粗粒度分布和细粒度分布。对于粗粒度分布,每个粗粒度的文件都被映射到单个的分配单元。使用细粒度分布时,由8个AU构成一组,每个AU提供128K,交错形成每个粒度。细粒度分布将大型IO操作切分为可以并行执行的多个128K I/O操作,有助于连续的IO
重做日志文件和归档日志文件被定义为细粒度,而数据文件被定义为粗粒度
21.ASM重新平衡和重新分布
重新平衡操作是在每个文件的基础上对所有数据库文件执行的
ORACLE后台进程RBAL通过ASM实例管理这种重新平衡操作
ASM重新平衡操作的典型流程:
1.在ASM实例上,DBA添加或删除磁盘组中的磁盘
2.调用RBAL进程以创建重新平衡计划,然后开始协调重新分布
3.RBAL将计算执行该任务所需的估计时间和工作,然后发送消息给ARBx进程以实际地处理请求,通过ASM_POWER_LIMIT 参数直接确定调用的ARBx进程的数量
4.更新持续操作目录(元数据)以反映重新平衡活动
5.将需要重新分配的每个区分配给ABRx进程
6.ARBx对这些区执行重新平衡,锁定,重新分配,解锁每个区,这在V$ASM_OPERATION视图的OPERATION列中显示为 REBAL
初始化参数ASM_POWER_LIMITT用于影响重新平衡操作的吞吐量和速度。范围是0到11 11位全速 1为低速 0为不开启
如果使用ASM删除或添加多个磁盘,那么最好一次性添加或删除所有的驱动器。这将减少执行存储改动所需的重新平衡操作的数 量。
22.使用分区来避免磁盘争用
将分区表的各个分区放在不同的磁盘上,获得最佳吞吐量的关键就是把每个分区放置在不同的物理磁盘上,这样可以同时访问3 个分区,前提是不使用ASM。
23.其他类型的分区
1.多列范围分区
create table cust_sales(acct_no number(5),
cust_name char(30),
item_id number(9),
sale_day integer not null,
sale_mth integer not null,
sale_yr integer not null)
partition by range(sale_yr,sale_mth,sale_day)
(partition cust_sales_q1 values less than (2011,04,01) tablespace users
partition cust_sales_q2 values less than (2011,07,01) tablespace users2
partition cust_sales_q3 values less than (2011,10,01) tablespace users
partition cust_sales_q4 values less than (2012,01,01) tablespace users2
partition cust_sales_qx values less than (maxvalue,maxvalue,maxvalue)
tablespace users2);
我们把数据分成4份,这样就可以只需查看一个分区的时候避免访问其他分区,同时我们还可以在不妨碍其他分区的情况下归档 其中一个分区中的数据。为了获得更好地I/O,还可以把数据分到多个表空间中。
2.散列分区(hash分区)
3.组合分区
4.列表分区
24.ORACLE 11gR2的新分区选项
引用分区
区间分区
虚拟列分区
系统分区
1.区间分区
区间分区是对范围分区一个大的增强,当插入语句正在寻找一个不存在的分区时,它能提供自动预创建分区。区间分区支持下 面类型的组合分区:区间-范围 区间-列表 区间-哈希
2.引用分区
3.Partitionwise连接
oracle也允许只在两个分区表需要的分区上进行关联查询。
25.使用索引分区
索引包括本地索引和全局索引,有前缀索引和无前缀索引。本地索引可以被分区;每个片段就是一个本地索引。
初始化参数SKIP_UNUSABLE_INDEXES允许用户禁用标志位不可用的索引或索引分区的错误报告。如果不希望数据库选择新的执行计划以避免使用不可用的段,就应该设置该参数为false
26.导出分区
如果表中的数据被仔细的分段,就可以导出分区中所有的新信息,该操作只对某些数据集有效,这些数据集使用一些类型的渐增列值作为分区键。
如果根据日期进行分区,那么所有新的数据将进入最新的分区。
expdp scott/tiger file=dept_d1.dmp tables=(dept.d1) diretory=dpump_dir
27.消除碎片
避免与区管理有关的性能问题:
1.如果知道段将增长到多大尺寸或者按多大比例增长,就使用本地管理的统一区表空间
2.使区尺寸是数据库块尺寸的倍数
3.把增长过大的表放在有合适区大小的表空间中
4.通过使用ASSM避免行链接争用
select segment_name,segment_type,extents,bytes from dbs_segment a,dba_tablespaces b where a.extents >1000;
28.使用正确的区大小
在多数情况下,通过ROWID访问时首选,因为ROWID操作不会关心段中究竟有多少区
29.创建新的表空间并把数据移到其中
如果表变得很大,可以新建一个表空间并把数据移到这个新的位置以减少区的数量。在下面的示例中,customer表被分成100个大小的1M的区。可以通过DBA_EXTENTS视图查询到该区的信息:
select segment_name,bytes from dba_extents where segment_name = ‘CUSTOMER‘;
首先创建一个表空间,然后再new_10m_dat表空间中创建一个新的叫做customer1的customer表(该表空间有10M的区)
create table customer1 tablespace new_10m_dat as select * from customer;
drop table cusomer;
rename customer1 to customer;
新的customer表的尺寸现在有10个10M的区。
30.正确设定PCTFREE以避免链化现象
ROWID标识数据在磁盘上的位置。行的ROWID不变,当数据块没有足够空间来保存一行或该行最近的修改结果时,就会发生链化现象。一个链化现象行通常存在于多个块而不是一个块上。
用于检测是否碰到链化现象的问题,可以执行oracle提供的用于创建CHAINED_ROWS表的utlchain.sql脚本。
analyze table customer
list chained rows;
select head_rowid from chained_rows where table_name = ‘CUSTOMER‘;
如果使用ASSM自动段管理 就不需要设置PCTFREE,自动段管理利用位图来跟踪块中可用于行插入的空闲空间的数量。
31.重建数据库
1.完成一个全数据库导出
2.完成一个全映像备份
数据库文件
控制文件
联机重做日志文件
init.ora文件
3.使用create database 命令重建数据库
4.确保有一个足够大的回滚段和一个足够大的临时表空间,用来处理导入数据库和创建索引。
5.导入整个数据库
32.增加日志文件尺寸和LOG_CHECKPOINT_INTERVAL以提高速度
如果想大量的insert update和delete 操作速度更快,可以增加大日志文件大小,并确保这些文件在最快的磁盘上。
还可以增加LOG_CHECKPOINT_INTERVAL的值,用以在日志切换前执行一次检查点,默认为0
LOG_CHECKPOINT_INTERVAL定了检查点之间的时间长度。因为,任何包含执行在线重做日志的恢复操作都会受到影响。增加在线重做日志大小会增加介质恢复所需要的时间。
oracle依赖于联机重做日志来记录事务。每次数据库中发生一次事务,联机重做日志文件中就会增加一个条目。
修改重做日志文件大小的时候:
1.当数据库启动或将要停机时,日志文件必须联机并可用
2.联机重做日志可以循环使用,联机重做日志文件会自动被写成归档日志文件
3.最少应该有两个联机重做日志文件。为了防止联机重做日志文件丢失,推荐使用联机重做日志文件多路复用
4.创建数据库时要指定初始的日志文件数目和大小
5.重启数据库至MOUNT状态,可以使用alter database 命令开启或关闭归档日志
6.检查点发生在将重做日志中已提交的事务写入到数据库的时候,检查点也会更新数据文件头以设置用于恢复时滚动后退阶段的SCN。如果发生故障时当前数据库的SCN是2345678,并且数据文件检查点的SCN是234500,那么重做日志中仅仅234500到2345678部分的改变才需要回退。检查点是数据库一致性的基本保证--它告诉我们数据库在某个点上一切都是一致的。
33.快速恢复区FRA
许多人倾向于使用较为缓慢的,较为廉价的存储设备来维护快速恢复区,根据您的实现方式,这可能会为您的环境引入一些潜在的性能问题。oracle建议用户在另一个磁盘阵列上有用于快速恢复的相等大小的一组磁盘。
1.如果将性能较慢的磁盘用作快速恢复区,重做操作的性能就会受到负面影响,因为所有的重做日志都存储子在快速恢复区中并且性能最慢的设备决定。
2.考虑是否需要非常大的快速恢复区,并且找出最适合于您的闪回需求或预算的快速恢复区尺寸
3.当备份和其他活动利用快速恢复区时,大型的快速恢复区会降低写性能。
4.由于快速恢复区只频繁地用于归档和闪回数据库写入,因此不会带给磁盘过多的负担
5.该配置仍然会维护冗余的重做区域
34.增加恢复的可能性:在每次批处理后提交
把大的事务隔离到他们自己的回滚段上
commit;
set transaction use rollback segment rb_big;
Transaction set.
delete from big_table
commit;
set transaction 必须用在commit语句或回滚进程之后
根据事务需要,回滚段大小可以动态扩展至它所在的表空间耳朵全部可用空间大小。
在回滚段上使用OPTIMAL存储选项可以动态把已扩展的回滚段缩小到指定大小。设置OPTIMAL选项,这样已经扩展的回滚段就能回到它的初始大小,同时释放磁盘空间。
alter rollback segment rb1 storage(optimal 15M);
还可以强制一个回滚段收缩到它的OPTIMAL设置或是指定大小
alter rollback segment rb1 shrink;
alter rollback segment rb1 shrink to 15M;
不要依赖这个,因为是以性能为代价的
如果UNDO设置为自动,但没有设置undo表空间就会使用system(最好不要这样)