当前位置: 首页 > news >正文

Oracle数据块8KB、OS默认认块管理4KB,是否需调整大小为一致?

上班路上,脑中忽然闪现一个问题:Oracle数据库块大小(8KB)、操作系统文件系统块大小(4KB),为了减少IOPS,需不需要调整为一致?在数据块保持一致的情况下,针对频繁更新的日志文件如redo,archive反而会影响写入速率?

图片

本文将讨论Oracle数据块8KB、OS默认认块管理4KB,是否需调整大小为一致?今本文简要讨论下。

一、底层逻辑

1. 层级分工明确 

 数据库块:Oracle的最小I/O单元(8KB),负责数据存储结构(行、索引等)的管理。

 文件系统块:OS的最小磁盘分配单元(4KB),负责物理空间的映射与分配。

 二者本质是不同抽象层级,Oracle通过DBWR进程将数据库块拆分为多个OS块写入磁盘。

2. 性能影响场景 

场景

影响说明

随机读写

8KB数据库块需拆解为2个4KB OS块,增加I/O次数(轻微性能损耗,SSD可忽略)

顺序读写

预读机制(如Linux readahead)可合并请求,性能差距<5%

空间利用率

小文件可能浪费空间(Oracle块内碎片+OS块内碎片),但数据库文件通常较大

二、何时需要调整为一致?

推荐调整的两种情况:

1. OLTP高并发随机写 

 针对频繁更新的交易系统,8KB→4KB的拆分会导致写放大(Write Amplification)。 优化方案:将文件系统块大小设为8KB(与Oracle块对齐),减少I/O拆分。格式化XFS为8KB块(需备份数据后操作)。

mkfs.xfs -b size=8192 /dev/sdX

2. 超大块数据处理 

    如数据仓库中16KB+的大对象(LOB),文件系统块≥16KB时可提升扫描效率。文件系统块可设为16KB/64KB,Oracle块保持8KB(或增至16KB)。

无需调整的情况:

  1. 以读为主的OLAP系统(SSD随机读延迟低)

  2. 文件系统已启用压缩/去重(如ZFS)

  3. 使用Direct I/O(FILESYSTEMIO_OPTIONS=SETALL)绕过OS缓存

三、性能测试对比

通过fio模拟Oracle负载(8KB随机写):

文件系统块大小

IOPS (SATA SSD)

延迟(ms)

空间利用率

4KB

18,500

0.27

92%

8KB

24,100

0.21

95%

64KB

25,200

0.20

78%

结论:8KB对齐时性能提升30%,64KB因空间浪费不推荐常规使用。

四、生产环境最佳实践

1. 默认方案 

 文件系统块大小= Oracle块大小(8KB)  

# ext4示例

mkfs.ext4 -b 8192 /dev/oracle_data

2. 特殊场景优化 

 Redo Log文件:设文件系统块为 4KB(因redo条目小,对齐反而浪费空间)。

 大数据表空间:使用64KB文件系统块 + Oracle 16KB块(减少索引分裂)。

3. 必须验证的项目 

检查I/O统计(关注"small read/write"拆分)

SELECT * FROM v$filestat WHERE file# IN (SELECT file# FROM dba_data_files);

测试真实负载(使用Oracle SLOB或HammerDB)

五、建议

1.可考虑优先对齐为8KB:对95%的OLTP/混合负载是最安全选择。

2.不调整的妥协方案:若无法重格文件系统,通过以下措施弥补:

(1)启用ASM(自动管理I/O块)

(2)增加DB_FILE_MULTIBLOCK_READ_COUNT(提升全表扫描效率)

(3)使用NVMe SSD高性能硬件降低随机I/O延迟(SATA SSD:约 50 ~ 100 微秒(μs),NVMe SSD:约 10 ~ 20 微秒(μs),相较 HDD(ms 级)有 数量级差距

需注意的是:避免文件系统块(4KB)大于数据库块(8KB)(会导致不可拆分I/O),反向(如OS块16KB)可通过预读机制优化。

文章至此。

http://www.lryc.cn/news/599178.html

相关文章:

  • 弹性网:基于神经网络的多组分磁共振弹性成像波反演与不确定性量化|文献速递-医学影像算法文献分享
  • LeetCode 127:单词接龙
  • Hive-vscode-snippets
  • Hive【Hive架构及工作原理】
  • Oracle MCP本地部署测试
  • js实现宫格布局图片放大交互动画
  • [python][flask]flask接受get或者post参数
  • 【调试Bug】网络在训练中输出NaN
  • 关于网络模型
  • 基于深度学习的图像分类:使用DenseNet实现高效分类
  • Lua(数据库访问)
  • 全新轻量化PHP网盘搜索引擎系统源码
  • SAP在未启用负库存的情况下,库存却出现了负数-补充S4 1709 BUG
  • NVM踩坑实录:配置了npm的阿里云cdn之后,下载nodejs老版本(如:12.18.4)时,报404异常,下载失败的问题解决
  • Day31| 56. 合并区间、738.单调递增的数字、968.监控二叉树
  • Chromadb 1.0.15 索引全解析:从原理到实战的向量检索优化指南
  • 规则分配脚本
  • Django集成Swagger全指南:两种实现方案详解
  • k8s的存储之secerts
  • 从零开始:在 PyCharm 中搭建 Django 商城的用户注册与登录功能(轮播图+商品页-小白入门版)
  • Qt 与 SQLite 嵌入式数据库开发
  • mid360连接机载电脑,远程桌面连接不上的情况
  • FunASR实时多人对话语音识别、分析、端点检测
  • 当人机交互迈向新纪元:脑机接口与AR/VR/MR的狂飙之路
  • c++注意点(10)----设计模式(原型)
  • 安装pyarrow包
  • SAP-PP-MRPLIST
  • MyBatis高级应用实战指南
  • Movavi Video Editor v25.9.0 视频编辑软件中文特别版
  • 星图云开发者平台新功能速递 | 页面编辑器:全场景编辑器,提供系统全面的解决方案