提高查询性能02

--------------------------------数据块:
(1)每个数据块包含一个头,用于指定块中时何种数据类型,索引,或数据
(2)表目录,显示了具有块中行的表的相关信息。
(3)行目录,提供表的特定行或块中索引条目的细节
(4)空闲空间可用于新行或已有行的更新
块中的可用空间可用于新值的插入,直到块中可用空间的百分比小于pctfree参数定义的值,一旦块中具有少于pctfree指定值的空间,则不允许进行任何char。
如果使用空闲列表管理段块中的空间,则在块中的空闲空间低于pctused时允许在表上进行新的插入。
(5)行数据

-----------------------------------收缩段

数据库进一步扩展了ASSM特性集,并且为alter table和alter index语句提供了新的子句。
shink space子句从根本上合并段中的空闲空间,并且释放未使用的空间以减少段。
(这些操作可以改进对该段执行的查询的性能,并且比通过导出/导入/移动/重命名操作减少段尺寸更容易实现)

在段收缩期间,对于在块之间移动的行,rowid可能会改变,因此不可以对依赖于rowid的段执行收缩操作,例如rowid具体化视图。
对于将要进行收缩的表段,必须启用row movement(行移动)
通过指定alter table ....shrink space压缩段中行的存储,并且减少HWM
1.如果指定shrink space compact 则同样会收缩段,但是HWM保持不变。
2.如果指定shrink space cacade可以收缩段以及所有相关对象的段。

可以对普通表,索引(B树,位图)包含lob的段以及具体化视图指定段收缩。
不可以对集群表,具有long列的表,共享的lob段,临时段,撤销段执行段收缩。

在段收缩期间需要注意索引相关性。索引在收缩后不会处于不可用状态。段收缩的压缩过程实际上是通过对插入/删除操作实现的。通过联机完成段收缩,从而改进了对象的可用性。
在段收缩期间,数据作为压缩阶段的一部分移动,因此保持对单个的行和/或包含数据块的锁定。
这将造成并发的dml(例如更新和删除)在锁上串行化,当调整HWM时,以互斥的方式锁定段,直到调整完成才解除锁定。

---------------------------------------------链化现象

正确设定比例以避免链化现象 <大于oracle块大小的列>

链接会影响性能,因为它需要oracle查看多个物理位置,查找来自于相同逻辑行的数据,通过消除不必要的连接,可以减少从数据文件中返回数据所需的物理读取量。
创建数据段时,可以指定pctfree值,pctfree参数可告诉数据库每个数据块中应该保留多少空闲时间,通过update操作扩展存储在数据块中行的长度时,就需要使用空闲空间。
如果对行的update操作造成行不再可以完全容纳在一个数据块中,该行就可能移动到另一个数据块,或者行可能连接到另一个块。如果所存储行的长度大于oracle的块大小,则自动具有链接。
通过在数据库段创建期间 设置适当的pctfree值,可以避免连接。
如果要检查是否碰到了链化问题,可以执行oracle所提供的创建chained_rows表的utlchain.sql必须每周检查链化现象,并立即解决。
(1)analyze命令具有检测并记录表中链行的选项
    analyze table table_name list chained rows into chained_rows;
 (2)select named_rowid from chained_rows where table_name='';
    输出将显示所有链行的rowid,从而允许快速查看链接表中的行,如果链接在表中非常普通,则应该使用较大的pctfree值重新构建该表。

在视图v$sysstat中,table fetch continued row 同样可以表示链化行
每次oracle从链行中选择数据时,table fetch continued row统计的v$sysstat条目将增加。
每次oracle从跨越行中选择数据时,table fetch continued row统计的v$sysstat条目将增加。
跨越行指的是由于长度块长度而连接的行,具有long,blob,clob,nlob数据类型的表很可能具有跨越行。

----------------------------------------------行迁移

迁移行 <超出了块的可用空间>

除了连接行以外。oracle优势也会移动行,如果行超出它的块的可用空间,该行就可能插入到一个不同块中,将行从一个块移动到另一个块的过程称为“行迁移”,并且移动的行称为“迁移行”.
在行迁移期间,oracle必须动态管理多个块中的空间,并且访问空间列表(可用于insert操作的块列表)迁移行不会表现为链行。但它会影响事务的性能。
对块中行的更新可能使该行不再适合原始的块,从而oracle将整个行的数据迁移到新的块,并且在第一个块中留下一个指针,指向第二个块中存储更新行的位置。
可推断出,具有许多迁移行的段将造成I/O性能问题因为需要查询的块数量可能会加倍,在某些情况下,调整pctfree的值或重新构建表可能会获得较好的空间利用率和I/O性能。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值