为 Oracle 数据库设置 SSD 阵列,有什么建议吗?

为 Oracle 数据库设置 SSD 阵列,有什么建议吗?

我正在为一个小型但读取 I/O 密集型数据库配置服务器。它充当公共访问大型 Oracle RAC 数据库的主索引。在查看 I/O 要求时,确定 SSD 阵列将以比大量 SAS 15K 主轴更低的成本提供所需的性能。我有一台 HP 服务器,带有一个智能阵列 P400,它将仅连接到 SSD。控制器有 256MB 的 BBWC。SSD 是三星(我相信)制造的基于 60GB SLC 的 2.5 英寸 SATA。

我想知道是否有人了解 RAID 10 或 5 的最佳条带大小以及文件系统建议?我们将使用 Oracle 11g,因此我认为我需要一个文件系统,而不是使用 RAW 块设备。服务器将运行 RHEL 5.5。

过去几个月,我阅读了大量有关 SSD 的资料,我并不反对做更多,但我的谷歌搜索能力开始让我失望。我在 SSD RAID 上找到的大部分文档都是为那些在家用 PC 的启动驱动器上为消费级 SSD 做 RAID 0 以加快 Windows 7 启动和加载游戏速度的人准备的。我的意思是,我并不是想找人来做我的工作,只是提供他们曾经拥有的任何经验或他们在某处找到的文档的链接。

提前致谢!

编辑一些额外的信息而不是回复每一个单独的评论:

驱动器空间根本不是问题,因为数据库足够小,可以毫无问题地安装在其中一个 SSD 上。

作为一个读取量很大的数据库(4-8k 中 95% 以上的随机读取),我认为 RAID 5 可能会带来更好的性能,因为我可以从阵列中的 N-1 个驱动器读取,而不仅仅是镜像中的活动磁盘,因为我读过一些东西,表明 Smart Array P400 不支持从 RAID 10 组中镜像的两侧读取。话虽如此,我相当肯定,在担心这个问题之前,控制器最终会成为瓶颈。

关于 TRIM:我相当确定,即使这些驱动器支持 TRIM(我不相信它们支持),将 TRIM 命令通过 RAID 控制器推送到各个驱动器也会有些困难。操作系统支持也不确定,因为 Red Hat Enterprise Linux 5 仍然基于 2.6.18 内核树,尽管进行了大量自定义以引入更高内核版本的功能。EXT4 尚未得到官方支持,作为生产机箱,如果出现问题,我需要让自己处于 Red Hat 和 HP 会帮助我的范围内。不过,我确实相信驱动器级别正在进行某种垃圾收集。在不同的基准测试过程中,我已经多次填满磁盘,并没有看到写入速度明显下降,如果我必须等待擦除/编程周期而不仅仅是编程周期,我就会预期这种情况。

以下是 6 驱动器 RAID 10 阵列的一些基准测试数据,使用 256KB 条带大小。分区为 EXT3,对齐到 64 个扇区。使用 NOOP 调度程序,并在挂载时提供 NOATIME 选项。我还将操作系统读取缓存增加到 8MB(我相信默认值为 512K)。我使用 Iozone 3.347 进行此测试,记录大小为 4KB,基准文件大小为 25GB,希望可以消除缓存的影响并测量驱动器的实际性能。我还使用四个线程运行此测试(4 个子进程写入 4x25GB 文件以对驱动器施加压力。)

运行开始时间:2010 年 8 月 30 日星期一 12:09:57

    Record Size 4 KB
    File size set to 26214400 KB
    Command line used: /opt/iozone/bin/iozone -b /root/4k25g4t.xls -r 4k -s 25g -t 4 -i 0 -i 1 -i 2
    Output is in Kbytes/sec
    Time Resolution = 0.000001 seconds.
    Processor cache size set to 1024 Kbytes.
    Processor cache line size set to 32 bytes.
    File stride size set to 17 * record size.
    Throughput test with 4 processes
    Each process writes a 26214400 Kbyte file in 4 Kbyte records

    Children see throughput for  4 initial writers  =  253416.93 KB/sec
    Parent sees throughput for  4 initial writers   =  229461.66 KB/sec
    Min throughput per process                      =   61416.07 KB/sec
    Max throughput per process                      =   64604.90 KB/sec
    Avg throughput per process                      =   63354.23 KB/sec
    Min xfer                                        = 24924492.00 KB

    Children see throughput for  4 rewriters        =  259375.90 KB/sec
    Parent sees throughput for  4 rewriters         =  234136.11 KB/sec
    Min throughput per process                      =   63879.16 KB/sec
    Max throughput per process                      =   65675.30 KB/sec
    Avg throughput per process                      =   64843.97 KB/sec
    Min xfer                                        = 25497648.00 KB

    Children see throughput for  4 readers          =  490873.09 KB/sec
    Parent sees throughput for  4 readers           =  490830.09 KB/sec
    Min throughput per process                      =  119007.65 KB/sec
    Max throughput per process                      =  124878.35 KB/sec
    Avg throughput per process                      =  122718.27 KB/sec
    Min xfer                                        = 24984912.00 KB

    Children see throughput for 4 re-readers        =  477533.65 KB/sec
    Parent sees throughput for 4 re-readers         =  477503.03 KB/sec
    Min throughput per process                      =  115802.55 KB/sec
    Max throughput per process                      =  121579.46 KB/sec
    Avg throughput per process                      =  119383.41 KB/sec
    Min xfer                                        = 24973364.00 KB

    Children see throughput for 4 random readers    =   35728.62 KB/sec
    Parent sees throughput for 4 random readers     =   35728.53 KB/sec
    Min throughput per process                      =    8926.97 KB/sec
    Max throughput per process                      =    8937.35 KB/sec
    Avg throughput per process                      =    8932.16 KB/sec
    Min xfer                                        = 26183936.00 KB

    Children see throughput for 4 random writers    =   23527.42 KB/sec
    Parent sees throughput for 4 random writers     =   20701.37 KB/sec
    Min throughput per process                      =    5757.43 KB/sec
    Max throughput per process                      =    6035.68 KB/sec
    Avg throughput per process                      =    5881.86 KB/sec
    Min xfer                                        = 25011236.00 KB



"Throughput report Y-axis is type of test X-axis is number of processes"
"Record size = 4 Kbytes "
"Output is in Kbytes/sec"

"  Initial write "  253416.93

"        Rewrite "  259375.90

"           Read "  490873.09

"        Re-read "  477533.65

"    Random read "   35728.62

"   Random write "   23527.42

答案1

到目前为止我在其他答案中没有看到的一些观点:

  • 高端服务器 SSD 可处理约 30,000 IO。RealSSD 最高可达 50,000
  • 因此,您可以使用 RAID 5。要点。您的瓶颈很可能是 RAID 控制器,它在设计时根本没有考虑 SSD IOPS,因此它将最大限度地利用其 CPU。

总体而言,SSD 的随机 IO 速度大约是 SAS 驱动器的 100 倍。甚至更多。根据您的要求,完全可以将 SAS 的 RAID 10 替换为 SSD 的 RAID 5,并且仍然可以在 IOPS 和价格方面取得显著的领先。

最佳条带大小通常是 64k 的倍数 - 尤其是当 SSD 在这些段中读取/写入时。那么不一定需要 TRIM(没有部分写入)... 但如果能有 TRIM 那就太好了。

MS 有一些关于数据库中 SSD 的论文,也适用于 Oracle(同样的原理 - 优化 IOPS)。Oracle 应该也有一些。

答案2

RAID-10 是理想的。

考虑到典型的英特尔 64GB SLC SSD 的成本约为 700 美元,并且您需要 4 个这样的 SSD 来创建 RAID-10,而 64GB DDR3 Registered ECC RAM 的成本约为 1600 美元(除非您从戴尔购买),购买 RAM 可能是一个更明智的投资,它比任何 SSD 都更快,使用寿命更长。

这个想法是将整个数据库托管在 RAM 中,假设您的数据库大小加上它的索引不超过 64GB。

答案3

除非您需要 RAID5 可以提供的驱动器空间,否则请使用 RAID10。大多数情况下,RAID10 的性能更佳。

就像 Amala 所说的那样,确保驱动器和操作系统支持 TRIM。使用与操作系统的块大小一致的条带大小(对于 DB 服务器来说 64k 很常见),并确保分区偏移量是该大小的倍数(1MB 偏移量很常见)。

答案4

我觉得这不是什么问题,因为即使使用 R5/R6,您也会获得超过 15k SAS 的惊人数量。我考虑做一个 R6 阵列 22 SSD +2 作为热备用。

相关内容