<p>ASSM通过用分散的二级位图块替代集中式freelist,从源头消除段头块争用,从而缓解buffer busy waits(P3=4)和enq: TX - allocation;它不直接减少缓冲池争用,而是降低段头块访问压力,间接改善缓存效率。</p>
oracle 12c 建议用 assm(automatic segment space management)不是因为它能直接“减少缓冲池争用”,而是它能从源头削弱导致 buffer busy waits 和 enq: tx - allocation 的根本诱因——段头块(segment header)的集中争用。缓冲池争用常是表象,assm 解的是底层空间分配瓶颈。
手动段空间管理(MSSM)依赖 freelist 链表,所有会话插入时都要修改段头块里的 freelist 指针,造成 buffer busy waits(P3=4 时明确指向段头块)。ASSM 用位图块(Bitmap Block)替代 freelist,把空间管理分散到多个二级位图块上:
enq: TX - allocation 等待显著减少——这不是缓存调优,是减少 latch 争抢点缓冲池里热块争用(buffer busy waits)常由两类块引发:业务热点块(如索引叶块)和系统管理块(如段头、位图块)。ASSM 不解决前者,但能压低后者:
v$session_wait 中大量等待 P3=4,先查 dba_tablespaces.segment_space_management,确认是否误配 MSSM启用 ASSM 后仍出现争用,问题往往不在 ASSM 本身,而在配套设计没跟上:
dba_lobs.segment_name 对应的表空间是否也是 ASSMALTER TABLE ... STORAGE (INITIAL 1M NEXT 1M) 控制初始区大小SELECT tablespace_name, segment_space_management FROM dba_tablespaces 返回 MANUAL 时,不能仅靠 ALTER DATABASE DEFAULT TABLESPACE 切换,必须重建表空间或迁移段真正容易被忽略的是:ASSM 只管段内空间分配,不解决高水位线(HWM)推进争用(enq: HW - contention)。如果看到大量 HWM 等待,再好的 ASSM 也救不了——得切分区、预分配 extent 或调整写入模式。