Tag Archives: LVM

Oracle 的 Btrfs 项目

Oracle 似乎越来越想直接填补 OS 与 RDBMS 之间的技术缝隙。之前的 ASM 已经向存储层跨了一大步,可以说是 Oracle 自己的 LVM 软件,而且,应该说也占据了一定的市场。然后是 OCFS (Oracle Cluster File System)更进一步–用于集群的文件系统,OCFS 的表现似乎还需要观察(主要是还不够稳定)。现在,Oracle 又准备开发新的文件系统了。这个项目名字叫做 Btrfs

这个 Btrfs 的特性中列表:

  • Extent based file storage (2的64次方 max file size)
  • Space efficient packing of small files 【 vs ZFS: Built in compression】
  • Space efficient indexed directories
  • Dynamic inode allocation
  • Writable snapshots
  • Subvolumes (separate internal filesystem roots)
  • Object level mirroring and striping 【对象级别的镜像与条带】
  • Checksums on data and metadata (multiple algorithms available)
  • Strong integration with device mapper for multiple device support 【似乎 Oracle 对当前 Linux 系统的 LVM 软件并不满意】
  • Online filesystem check 【 vs ZFS: Always consistent on disk】
  • Very fast offline filesystem check 【对于大文件系统十分有效】
  • Efficient incremental backup and FS mirroring 【 vs ZFS: Fast native backup and restore】

【】内是我的注释或猜测。看得出来,Btrfs 应该参考了 Sun ZFS 的很多设计思想,而 Btrfs 的设计目的是面向数据库的,所以有很多独特的面向数据库的特性在里面。Btrfs 目前还在设计中,所有关键特性都实现并且成熟稳定恐怕还真是有待时日,Oracle 软件代码的质量那可真是叫人没话说–可不是好的让人没话说。

或许很多人已经忘记了 Oracle 多年以前失败的 Raw Iron 项目,但现在,Oracle 似乎在用搭机木的方式重新实现这个目标。

EOF

Updated: Btrfs 0.16 版本在扩展性与稳定性上都有很大的提升。

Btrfs 读音为:”Better FS”

AIX RAW LVM 的 4k Offset 问题

这可能是 Oracle 在 AIX 平台上最重要的一个潜在问题。

一般情况下,AIX 的逻辑卷前 4k 用于存储 control block (LVCB),在 Oracle 9iR2 之前,Oracle 软件自动跳过这 4k 而不用。这带来了一个潜在的问题,当 Oracle 的 db_block_size 大于 4k 的时候,一个 Block 可能跨在两个 PV/LUN/磁盘 上(如果做了条带化,那么将总有数据块跨在两个条带上–其实也还是将跨在不同的 PV/LUN/磁盘上。这样当系统崩溃的时候,很有可能造成大量的 IO 不完整,一个 PV 上 IO 写入,另一边可能未完成,启动 Oracle 的时候将会看到 ORA-1578 错误,这几乎是致命的。

为了解决这个问题,AIX 推出了 Big Volume Groups 作为应对。建立 Big VG 后,创建 LV 的时候可以通过 -T O 的参数强制征用 LV 的前 4K 空间, LVCB 的信息保存在 VGDA(volume group describe area) 里面。前 4k 空间被使用的 LV 有了一个新的设备子类型(devsubtype)标记: DS_LVZ,通过 lslv 可以看到。(Oracle 也在 9.2.0.3 之后自动识别 AIX 的新 LV 类型,直接开始使用 LV 的前 4K 空间)

对于 AIX 的可扩展性 VG,则默认创建的 LV 就会 DS_LVZ 类型,不使用 -T O 也是这样子。Big VG 可能只是一个过度类型。

在 IBM 的系统手册中可以看到:

The IOCINFO ioctl operation returns the devinfo structure, as defined in the /usr/include/sys/devinfo.h file

如何知道当前裸设备创建的时候使用了 -TO ? Oracle 10g 的文档中说 $ORACLE_HOME/bin/offset 工具可以做到。可是我居然找不到这个工具。莫非是忽悠人来着? 通过另一个工具可以看到相关信息:

$ dbfsize /dev/rfoo01_pay
Database file: /dev/rfoo01_pay
Database file type: raw device without 4K starting offset
Database file size: 920 8192 byte blocks

要想得到完美的东西太难了, AIX 在 BIG VG 上仍然还有很多问题,目前已知的当属这个“MKLV -TO ON BIG VOLUME GROUPS FAILS TO PUT SOME LV INFORMATION”最为严重–得不到正确的devsubtype 类型,Oracle 则会报告读取数据文件头错误,这个更要人命。
DBA 这个工作,还真是脑袋悬在腰带上,风险莫测。
EOF
Updated: offset 命令工具需要安装 RAC 组件才可用,Oracle 另外提供了一个补丁来弥补这个问题,在 Patch 3242957 中可以找到,直接解压缩,把工具提取出来即可用。

RHEL AS 4,Which change a DBA should pay more attention ?

刚才聚会回来,看了一下昨天加在del.icio.us/Fenng中的红帽企业 Linux AS 4 发行注记.RHEL 4 还是不用ReiserFS.有一些变化对DBA来说应该加以注意,摘抄一点:

  • 首先关注一下内核相关变化:

    红帽企业 Linux 4 包括一个叫做 hugemem 的新内核。这个内核支持每进程 4GB 用户空间(其它内核只支持 3GB)和 4GB 直接内核空间。使用这个内核允许 红帽企业 Linux 在拥有大至 64GB 主内存的系统上运行。一般来说,配置了 16GB 内存以上的系统需要 hugemem。使用较少内存的环境也可以从这个内核中获益,特别是在运行能够从较大的用户空间中获益的应用程序的时候。

  • IO 相关的信息:

    虽然 红帽企业 Linux 4 包括对 rawio 的支持,但它已是一个过时的接口。如果您的应用程序使用这种接口,Red Hat 建议您改变您的应用程序,使它们通过 O_DIRECT 标志来打开块设备。rawio 接口会在当前的 红帽企业 Linux 4 中存在,但是它有可能会不再被包括在以后的发行版本中。
    文件系统的异步 I/O(AIO)当前只支持 O_DIRECT 或是非缓冲的模式。另外,异步拉 (asynchronous poll) 接口已不再出现,管道 (pipes) AIO 也不再被支持。

  • 红帽企业 Linux 4 仍然提供对 LinuxThreads 的支持,但是 红帽企业 Linux 5 将不再包括对 LinuxThreads 的支持
  • 默认使用LVM2,添加了新的图形化的 Logical Volume Manager (LVM) 配置工具 – system-config-lvm
  • e2fsprogs.ext2online 工具被添加用来在线地扩大已存在的 ext3 文件系统

    需要注意的是,ext2online 并不能扩大它所在的块设备本身 — 一定要有足够的未被使用的空间在这个设备上。最简单的方法是使用 LVM 卷并运行 lvresize 或 lvextend 来扩展这个设备。

继续阅读