數據存儲產業服務平臺

存儲新手學堂 數據庫與存儲架構

前言

決定應該賦予數據庫什么樣的存儲和配置,已經成為一項雜亂無章的工作,這種現象我見得多了。數據庫工程師一般都是數據庫的專家,而對于存儲配置的低層細節幾乎一無所知。另外存儲管理員和工程師也往往不知道數據庫如何利用下層的存儲,以及數據庫、索引文件、記錄文件,當然還有文件系統和卷管理器的需求和最佳配置又是什么。

    這往往造成了存儲資源利用率低,增加了整體成本,導致性能降低甚至可能無法滿足你的需求,此外預算也總是很緊張,而管理上又要求有效地利用可獲得的預算。本文將解決數據庫管理員和存儲工程師在解決架構問題而進行協作時的一些問題。

數據庫與存儲架構配置

組件

    大部分數據庫的端到端存儲架構所需硬件和軟件如下:

    

  • 數據庫
  •      * 控制文件(Control file)
    * 表空間(Table space)
    * 索引文件(Index file)
    * 重做日志(亦稱在線日志,Redo log)

        

  • 操作系統

  • 文件系統和卷管理器(如果數據庫運行在裸設備上,這一項可能沒有關系)

  • 主機總線適配器(HBA)

  • 存儲硬件
  •     以上每一部分都擁有多個組件,具有多種特性和功能,對整體性能影響顯著。

        數據庫

        數據庫應用本身具有多重特性和功能,必須加以考慮。Oracle的組件如下:

        

  • 控制文件??記錄數據庫的物理結構,用于激活數據庫

  • 表空間??來自數據庫各行各列的實際數據

  • 索引文件/空間??Oracle中并不需要索引,不過大型數據庫總會用到索引,因為在數據庫中進行查找時,索引可以大幅提升查找速度

  • 重做日志??被激活的數據庫請求,允許你在數據庫崩潰后進行重建并重新啟動(這些日志本質上類似于文件系統日志)
  •     因為上述組件都有不同類型的訪問模式,所以每種文件類型均被存儲在不同的文件系統中,并有調節選項。其它數據庫也擁有相似的文件類型,需要以相似的方式考慮。

        控制文件

        大部分數據庫都建議使用多個控制文件以確??煽啃???刂莆募⒉恍枰懗Wx,不過你必須確定各文件被放置在不同的RAID集上,適用于不同的RAID控制器。

        表空間

        表空間一般是數據庫中量最大的數據。當讀取列上的大表時,表空間可以由更大的I/O請求訪問。根據大小和更新頻率的不同,表空間常常位于更大的數據條帶化RAID-5上,以便獲得較RAID-1更高的密度和提升的性能。

        索引文件/空間

        在許多數據庫中,索引文件是被訪問頻率最高的數據。查找索引文件有可能需要很大的IOPS(每秒I/O操作)。另外,有時候數據庫被重新索引,這在計算上非常密集,并且需要大量的I/O帶寬。因為數據庫和所需的查找類型不同,索引空間也許會很大,一般來說,根據傳統的UNIX文件尺寸,索引文件的大小為2 GB。

        重做日志

        重做日志文件中存放了各種記錄,你可以撤銷對數據庫的各種操作,這些被稱為重做記錄。重做記錄用于循環緩沖器中,因為它一般是小I/O,所以用RAID-1就不錯。由于需要兩個或以上的重做日志文件,通常將日志文件放在不同的RAID-1卷上。

        操作系統

        數據庫一般都需要具備操作系統的一些特性和功能,如共享內存和標志等。另外,數據庫也經常利用計算機內大量的內存,這通常由改變數據庫中的可調參數來實現。

        在許多操作系統中,I/O請求的大小限制在256 KB或128 KB,不能改變,所以如果必須對存儲和操作系統完成更多的請求,就會影響到I/O性能。

        文件系統和卷管理器

        架構決策中最重要的事情之一就是為每個數據庫組件確定最理想的卷管理器和文件系統設置,對于每種類型的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問題。

    未經允許不得轉載:存儲在線-存儲專業媒體 » 存儲新手學堂 數據庫與存儲架構
    精品国产午夜肉伦伦影院,双性老师灌满浓jing上课h,天天做天天爱夜夜爽,攵女乱h边做边走