存储 频道

数据库与存储架构(二)

    文件系统和卷管理器

    架构决策中最重要的事情之一就是为每个数据库组件确定最理想的卷管理器和文件系统设置,对于每种类型的I/O,你可能希望进行不同的设置,请考虑以下的I/O类型:    

  • 长和短的连续块
  • 长和短的随机块
  • 长和短的多重数据流块
  • 所有的读
  • 所有的写
  • 多线程

     

        对所有这些类型的I/O来说,只有一组设置的文件系统表现得都不好,而且我敢说对于上述任何两种类型的I/O来说,只有一组可调参数的文件系统也无法做好,也不可能通过改变参数来提升性能。

        设计中要确定的两个关键因素是:

        1.对于所要处理的I/O类型,什么是最好的卷管理器和文件系统
        2.对于该文件系统和卷管理器,什么又是最好的可调参数

        几年前我曾做过一个数据库,由于一些原因而无法进行扩展,不过我认为其中最主要的原因是RAID缓存在进行索引查找时未得到有效利用。RAID的读访问率小于20%,而且我认为大部分是不规则的连续读(先对几个请求连续读,然后随机跳过几个,又开始连续读)。

        检查卷管理器后,我发现了问题所在。每个文件系统有32个LUN(逻辑单元号),每个LUN为8 GB。文件系统上的数据条设置为32 KB,与RAID分配相符。每个索引文件是2 GB。

        考虑到RAID缓存的工作方式,你必须先读两个连续块再读第三个块,这是常用的算法,因此在下一个I/O到达缓存之前,需要32 KB*32 LUN*2,即2 MB的连续读数据。

        RAID缓存利用率如此低下并不奇怪。客户被告知他们有两个办法提升性能,一是为卷管理器数据条分配2 GB,这样每个索引文件均被连续分配;二是使用另一种文件系统,可以使数据进行循环而不是条带化。循环状态下,每个开放的系统请求都会被分配给另一个LUN,并且被打开的文件中所有数据也都会被分配在那个LUN上。

        当我们使用循环分配方法和读缓存测试这种配置时,访问率从20%上升到80%,性能也超过了当时客户的要求。

        主机总线适配器(HBA)

        即使价值2,000美元的HBA也会对大型数据库的性能造成重大影响。对HBA要考虑两个地方:

        1.未处理的I/O请求量
        2.可以实现的最大请求量

        大多数HBA在驱动器软件中将未处理的请求量默认值设置为16,这就限制了发送给RAID设备的命令数,即使拥有很多的磁盘驱动器和随机I/O,这个数值也可能无法充分利用存储资源。

        许多操作系统和设备驱动器都限制了I/O请求的大小,使之小于从表空间读或向表空间写所需的请求量。应该将设备驱动器内所设的限制更改为允许更大的请求量。当然,对每个设备驱动器和操作系统要做不同的设置,而且有意思的是,这些设置常常改变。

        存储硬件

        存储硬件很可能是为数据库构建系统时最重要的部分之一。你也许希望拥有许多不同的LUN,以便用于数据库中将发生的各种类型的I/O。举例来说,一般情况下你希望:    

  • 重做日志文件拥有高带宽需求(64 KB),发送到重做日志的I/O大部分是写
  • 索引查找拥有高带宽小块随机I/O(8 KB),并且多数情况下对索引的I/O大部分是读
  • 表空间拥有大块I/O(256 KB),并且一般情况下对表空间的I/O大部分是读

     

        正如你所看到的,一种大小是无法满足所有需求的,因此你必须完成以下几组匹配工作:

        1.RAID级别与典型的读/写访问类型
        2.数据条宽度与请求大小
        3.带宽需求与RAID级别和请求大小
        4.缓存策略与所处理的I/O类型

        这些似乎都不太容易,不过如果你从最基本的问题着手,解决起来也不难。

        重做日志

        根据重做日志的大小和带宽量,你可能最初会认为需要RAID-5数据条。这其实要看情况而定,因为大多数10K RPM磁盘的数据传送速度为外磁道柱面每秒69 MB,内磁道柱面每秒39 MB,15K RPM的磁盘则更快。另外再加上RAID缓存的大小,你就无须使用RAID-5了。真正的决定因素在于:

        1.带宽需求――每秒多少MB的日志数据
        2.日志的大小――能够适应缓存吗?
        3.你的RAID速度

        你必须收集到上述三项重要信息,用各种不同的数据库和系统工具查看系统,确定重做日志的表现是否会限制数据库的性能和扩展,而如果是,那么重做日志的I/O需求又是什么。

        索引文件

        索引文件的结构相当简单。如果你需要速度快一些,就使用数据条带化值很小的RAID-1加上一块高性能15K磁盘。因为索引文件是小块读文件,并且常常是随机I/O,所以这是目前最快的方式。

        表空间

        根据表的大小及其被访问和查找的方式,RAID-1有时是更好的方法,不过其它时候RAID-5就是非常好的选择了。关键是决定表空间的I/O请求大小是多少,请求的大小常常取决于数据库中的可调参数。

        结论

        关于不同操作系统上的各种可调数据库有许多书籍和文献供参考,下面是我读过觉得有用的几本:

        《在Solaris平台上配置和调节数据库(Configuring and Tuning Databases on the Solaris Platform)》,作者:Allan N. Packer,Sun微系统公司出版社,出版商:Prentice Hall(2001年12月5日),ISBN:0130834173。

        《Oacle9i性能调节方法和技巧(erformance Tuning Tips & Techniques)》,作者:Richard J. Niemiec,出版商:McGraw-Hill Osborne Media(2003年5月12日),ISBN:0072224738。

        《创建一个自调节Oracle数据库:自动化Oracle9i动态SGA性能[Oracle焦点系列](Creating a Self-Tuning Oracle Database: Automating Oracle9i Dynamic SGA Performance [Oracle In-Focus series])》,作者:Donald K. Burleson,出版商:Rampant TechPress(2003年8月1日),ISBN:0972751327。

        数据库的构建正如其它应用一样,你需要确定数据库对文件系统/卷管理器、HBA和RAID的I/O模式,同时牢记性能需求和成本问题。由于数据库很复杂,调节起来有些难度,不过现在有很多工具供你查看数据,帮助你理解潜在的I/O问题。

  • 0
    相关文章