linux系統數據庫服務器的性能調優方法論

1、I/O調優linux

在進行 I/O調優時必須作出許多決策。是否使用原始設備或文件系統?是否使用直接 I/O?應該爲數據庫選取多大的塊尺寸? 若是正在嚴格地執行在線事務處理(其特徵爲小型的隨機讀/寫操做)工做負荷, 則應該選擇較小的塊尺寸如 2KB。 對於 DSS中長期運行的查詢操做而言,在實現了複雜的查詢優化器以及複雜的內存(分類/散列區域)參數控制的數據庫中, 更大的塊尺寸會提升數據庫掃描速度, 例如 8KB(若是數據庫支持, 或者可選更大尺寸)。在工做負荷同時包含 OLTP 和 DSS的狀況下該如何處理?這時須要對數據庫參數的調優加以仔細考慮。 在某些狀況下有必要作出折中選擇, 也許4KB的塊大小比較合適。ios

2、隊列長度與響應時間golang

在Linux系統中, vmstat是很好的 I/O帶寬測量工具。該工具的「 I/O section」 結果中bi和bo兩列本來分別表示輸入到塊設備以及從塊設備中輸出的塊數,如vmstat的man幫助命令所述。然而,在各類 Linux發行版本中這些列實際上以 KBps爲單位報告字符設備或塊設備(文件系統)在測量期間的傳輸率。對於這兩種工做負荷,若是隊列長度大於 1, 則存在着某種衝突的可能性。 對於 OLTP來講, 超過 50ms的響應時間是須要解決的問題。數據庫

3、負載平衡緩存

Linux系統提供了多個工具來斷定數據庫系統是否須要負載平衡。完成這項工做的一種簡單方法是使用 iostat。服務器

下面給出了 iostat –x的輸出示例:架構

linux系統數據庫服務器的性能調優方法論

若是未使用軟件分條(striping)能力,則應該確保數據庫中所有的表都均勻地分佈到全部磁盤上。在該基準測試的這個只讀操做部分中,磁盤 sdi實際上正在執行寫操做,由於日誌顯然保存在該磁盤上。日誌應該位於單獨的帶卷(stripe volume)上,在可能的狀況下甚至位於單獨的磁盤上,以便磁盤 sdi的速度不會受到基準測試其餘方面的影響。工具

須要C/C++ Linux服務器架構師學習資料加羣812855908(資料包括C/C++,Linux,golang技術,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒體,CDN,P2P,K8S,Docker,TCP/IP,協程,DPDK,ffmpeg等),免費分享性能

linux系統數據庫服務器的性能調優方法論

4、全局內存學習

對於 OLTP工做負荷來講,一般應該利用數據庫的全局緩存將盡量多的 I/O操做移至內存中。多數數據庫都提供了工具來查看用戶事務是否被緩存,包括關於髒(dirty)緩衝區和已用緩衝區的統計數據。在 Oracle 中若要適當估測內存,須要設置參數database_block_ buffers。這隻需肯定數據庫專用的空閒內存量,而後將該值除以database_block_size便可,以下所示:

4GB內存中爲數據庫分配 2.5GB,所以 database_block_buffers取值爲 2684354560 /4096= 655360

下面給出一個 db_block_buffers公式的示例:

linux系統數據庫服務器的性能調優方法論

依賴於主關鍵字索引查詢的 OLTP/WEB工做負荷受益於經過大型緩衝池來緩存結果並減小I/O子系統的I/O吞吐率(每秒的I/O工做量)瓶頸。DSS工做負荷經常須要執行大型表掃描操做並返回衆多表格行結果。 針對這類工做負荷, 經過爲大量sort和join操做分配內存,能夠避免在臨時磁盤空間上發生會損害高I/O帶寬/吞吐率(MBps)的溢出現象。這經過配置 hash和 sort尺寸這些數據庫參數來完成。這些工做負荷的全局緩存容量沒必要很大——能夠比 OLTP工做負荷所需的全局緩存小多個數量級。

下面給出一個使用 vmstat來肯定空閒內存和已用內存的示例, 隨後對各個相關列加以描述。注意該例中包含vmstat在正常狀況下可返回的多個數據列。

linux系統數據庫服務器的性能調優方法論

  • free 列以千字節爲單位顯示。 若是仍存在着可用的空閒內存, 那麼這可能並非制約資源。
  • swpd 列以千字節爲單位顯示,報告所用的虛存量或被換出到磁盤上的內存量。
  • si 列給出在報告期間從磁盤上換入的內存量。
  • so 列給出在報告期間換出到磁盤(虛存)上的內存量。

若是swpd值較大而且從 si 和 so列中可發現大量交換活動,則可能須要添加更多內存或減小爲數據庫分配的內存量,從而爲應用程序保留更多內存。要確保存在着可分配給數據庫的內存。另外,這還假定了Linux中已經考慮到鎖定數據庫的全局緩存區域。

也可使用 Linux的 top命令來得到關於佔用內存較多的進程的更詳細信息。在運行 top命令時輸入 h,能夠獲得選項列表;輸入 m可根據常駐內存使用狀況進行排序,從而肯定哪些進程消耗的內存最多。 Linux的/usr/bin/top工具比 vmstat具備更大的干擾,也佔用更多 CPU時間。所以首先應使用 vmstat,在須要額外信息時再使用 top工具。

應記住, 在 32位 Linux系統上, 內存容量可能會超出數據庫軟件的尋址能力。 在這種狀況下, 若是出現 I/O問題, 應該尋找新型的空閒內存使用方式。 爲了減小 I/O操做,應儘可能使用內存。在某些狀況下, 能夠利用數據庫的臨時空間區域, 尤爲對於使用了 sort或 hash區域的具體進程(典型存在於 DSS工做負荷中)。要確保控制這些區域的數據庫參數被置爲最大值(除以數據庫代理的數目),同時仍不超過系統的內存(包括內核)範圍。

5、 日誌設備

當其餘全部瓶頸都被解決後,對日誌記錄設備的優化每每將最終決定 OLTP數據庫的性能。儘可能將日誌文件與全部其餘數據庫文件加以分離是很重要的。

下一步應決定使用原始設備仍是文件系統設備來運行日誌文件。歷史上,原始設備對於支持數據庫來講是首選的日誌記錄設備。有些數據庫使用了直接 I/O文件系統,其性能能夠達到原始設備的 5%。 另外一些(一般爲非商用的)數據庫則利用 Linux提供的緩衝機制來進行文件系統緩衝。建議在具體設定的環境中對這些方案進行直接比較。

相關文章
相關標籤/搜索