Oracle 存储优化

Oracle 存储优化

适用版本:Oracle Database 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07


1. 概述

Oracle 存储优化涉及[1]:

  • ASM
  • 表空间设计
  • 数据文件
  • I/O 调优
  • 压缩

2. ASM 优化

2.1 AU 大小

-- 创建磁盘组时
CREATE DISKGROUP data 
  AU SIZE 4M
  NORMAL REDUNDANCY ...;
AU适用
1M默认
4MOLTP
8-64M数据仓库

2.2 多磁盘组

+DATA - 数据文件
+FRA - 归档/备份
+REDO - Redo 日志
+OCR - OCR/Voting

2.3 Rebalance

-- 优化
ALTER DISKGROUP data REBALANCE POWER 32;

详细见:Oracle ASM 详解


3. 表空间设计

3.1 分离表空间

-- 系统表空间
SYSTEM  -- 数据字典
SYSAUX  -- AWR 等
UNDOTBS -- Undo
TEMP    -- 临时
USERS   -- 用户数据

3.2 业务分离

-- 不同业务不同表空间
CREATE TABLESPACE ts_oltp DATAFILE '...' SIZE 10G;
CREATE TABLESPACE ts_batch DATAFILE '...' SIZE 10G;
CREATE TABLESPACE ts_index DATAFILE '...' SIZE 5G;

3.3 大文件

-- Bigfile 简化管理
CREATE BIGFILE TABLESPACE ts_big DATAFILE '...' SIZE 100G;

4. Extent 管理

4.1 LOCAL 管理

-- 推荐
CREATE TABLESPACE ts_local 
  DATAFILE '...' SIZE 1G
  EXTENT MANAGEMENT LOCAL AUTOALLOCATE;
-- 或 UNIFORM SIZE 1M;

4.2 Segment 空间

-- ASSM(推荐)
CREATE TABLESPACE ts_assm 
  DATAFILE '...' SIZE 1G
  SEGMENT SPACE MANAGEMENT AUTO;

5. 块大小

5.1 选择

块大小适用
8KOLTP 默认
16KOLAP
32K大数据仓库
4K小记录

5.2 多块大小

-- 表空间不同块大小
CREATE TABLESPACE ts_16k 
  BLOCKSIZE 16K DATAFILE '...' SIZE 1G;

6. I/O 优化

6.1 数据文件分布

磁盘 1: 数据文件 1, 2
磁盘 2: 数据文件 3, 4
磁盘 3: Redo, 控制
磁盘 4: 归档

6.2 Redo 分离

-- Redo 在专用磁盘
ALTER DATABASE ADD LOGFILE GROUP 1 
  ('/redo1/redo01a.log', '/redo2/redo01b.log') SIZE 2G;

6.3 多临时文件

ALTER TABLESPACE temp ADD TEMPFILE '/u02/temp02.dbf' SIZE 5G;
ALTER TABLESPACE temp ADD TEMPFILE '/u03/temp03.dbf' SIZE 5G;

7. 压缩

7.1 表压缩

-- Basic
CREATE TABLE t ... COMPRESS BASIC;

-- OLTP
CREATE TABLE t ... COMPRESS FOR OLTP;

-- HCC (Exadata)
CREATE TABLE t ... COMPRESS FOR ARCHIVE HIGH;

详细见:Oracle 表压缩技术

7.2 LOB 压缩

CREATE TABLE t (
  id NUMBER,
  data CLOB
) LOB(data) STORE AS SECUREFILE (
  COMPRESS HIGH
  DEDUPLICATE
);

8. 行迁移/链接

8.1 检查

ANALYZE TABLE employees COMPUTE STATISTICS 
  FOR TABLE FOR ALL INDEXES;

SELECT chain_cnt FROM user_tables WHERE table_name = 'EMPLOYEES';

8.2 修复

-- 1. 增大 PCTFREE
ALTER TABLE employees PCTFREE 20;

-- 2. 重组
ALTER TABLE employees MOVE;
ALTER INDEX ... REBUILD;

9. 高水位

9.1 查看

SELECT 
  blocks AS hwm_blocks,
  empty_blocks,
  num_rows
FROM user_tables WHERE table_name = 'EMPLOYEES';

9.2 降低

-- 1. SHRINK
ALTER TABLE employees ENABLE ROW MOVEMENT;
ALTER TABLE employees SHRINK SPACE;

-- 2. MOVE
ALTER TABLE employees MOVE;

10. 监控

10.1 I/O

SELECT 
  df.file_name,
  fs.phyrds,
  fs.phywrts,
  fs.avgiotim
FROM v$filestat fs, dba_data_files df
WHERE fs.file# = df.file_id
ORDER BY phyrds + phywrts DESC;

10.2 表空间

SELECT 
  tablespace_name,
  ROUND(SUM(bytes) / 1024 / 1024) AS mb
FROM dba_data_files
GROUP BY tablespace_name;

10.3 段大小

SELECT 
  segment_name,
  segment_type,
  ROUND(bytes / 1024 / 1024) AS mb
FROM user_segments
ORDER BY bytes DESC
FETCH FIRST 10 ROWS ONLY;

11. 常见坑与排错

11.1 I/O 瓶颈

-- 1. 找热点文件
SELECT * FROM v$filestat ORDER BY phyrds + phywrts DESC;

-- 2. 分散数据文件
-- 3. ASM
-- 4. SSD

11.2 表空间满

-- 1. 增大数据文件
ALTER DATABASE DATAFILE '...' RESIZE 10G;

-- 2. AUTOEXTEND
ALTER DATABASE DATAFILE '...' AUTOEXTEND ON NEXT 1G;

-- 3. 添加数据文件
ALTER TABLESPACE ... ADD DATAFILE '...' SIZE 5G;

11.3 行迁移多

-- 1. PCTFREE
-- 2. MOVE
-- 3. SHUTDOWN/启动测试

12. 最佳实践

  1. ASM 专用:自动化
  2. 表空间分离:业务隔离
  3. EXTENT LOCAL:性能
  4. ASSM:并发
  5. 块大小匹配:场景
  6. Redo 专用磁盘:性能
  7. 压缩 OLTP/Archive:空间
  8. 降低 HWM:效率
  9. I/O 均衡:避免热点
  10. 监控 I/O:性能

13. 参考资料

[1] Oracle Database Administrator’s Guide 19c, “Storage” https://docs.oracle.com/en/database/oracle/oracle-database/19/admin/storage.html