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 | 默认 |
| 4M | OLTP |
| 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 选择
| 块大小 | 适用 |
|---|---|
| 8K | OLTP 默认 |
| 16K | OLAP |
| 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. 最佳实践
- ASM 专用:自动化
- 表空间分离:业务隔离
- EXTENT LOCAL:性能
- ASSM:并发
- 块大小匹配:场景
- Redo 专用磁盘:性能
- 压缩 OLTP/Archive:空间
- 降低 HWM:效率
- I/O 均衡:避免热点
- 监控 I/O:性能
13. 参考资料
[1] Oracle Database Administrator’s Guide 19c, “Storage” https://docs.oracle.com/en/database/oracle/oracle-database/19/admin/storage.html