數據庫服務器的性能調優

1、I/O調優ios

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


2、隊列長度與響應時間
數據庫

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


3、負載平衡
    Linux系統提供了多個工具來斷定數據庫系統是否須要負載平衡。完成這項工做的一種簡單方法是使用 iostat
    下面給出了
iostat –x的輸出示例:
[solarflar@localhost ~]$ iostat -x
Linux 3.10.0-327.el7.x86_64 (localhost.localdomain) 	2016年10月27日 	_x86_64_	(32 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.81    0.00    0.11    0.00    0.00   99.07

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     0.09    0.00    2.21     0.49    30.38    27.93     0.00    0.33    1.18    0.32   0.03   0.01
dm-0              0.00     0.00    0.00    2.17     0.48    17.98    16.97     0.00    0.08    1.17    0.08   0.03   0.01
dm-1              0.00     0.00    0.00    0.00     0.00     0.00    37.23     0.00    1.17    1.17    0.00   1.01   0.00
dm-2              0.00     0.00    0.00    0.12     0.01    12.40   200.85     0.00    4.67    2.06    4.67   0.08   0.00

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


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

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

    下面給出一個 db_block_buffers公式的示例:
Database heap (4KB) (DBHEAP) = 6654
Size of database shared memory (4KB)(DATABASE_MEMORY) = AUTOMATIC
Catalog cache size (4KB) (CATALOGCACHE_SZ) = 386
Log buffer size (4KB) (LOGBUFSZ) = 2048
Utilities heap size (4KB) (UTIL_HEAP_SZ) = 10000
Buffer pool size (pages) (BUFFPAGE) = 40000
Extended storage segments size (4KB) (ESTORE_SEG_SZ) = 16000
Number of extended storage segments (NUM_ESTORE_SEGS) = 0
Max storage for lock list (4KB) (LOCKLIST) = 16384
    依賴於主關鍵字索引查詢的 OLTP/WEB工做負荷受益於經過大型緩衝池來緩存結果並減小I/O子系統的I/O吞吐率(每秒的I/O工做量)瓶頸。DSS工做負荷經常須要執行大型表掃描操做並返回衆多表格行結果。 針對這類工做負荷, 經過爲大量sortjoin操做分配內存,能夠避免在臨時磁盤空間上發生會損害高I/O帶寬/吞吐率(MBps)的溢出現象。這經過配置 hashsort尺寸這些數據庫參數來完成。這些工做負荷的全局緩存容量沒必要很大——能夠比 OLTP工做負荷所需的全局緩存小多個數量級。
    下面給出一個使用 vmstat來肯定空閒內存和已用內存的示例, 隨後對各個相關列加以描述。注意該例中包含vmstat在正常狀況下可返回的多個數據列。

[solarflar@localhost ~]$ vmstat 4
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 68455376  13124 53729460    0    0     0     1    0    0  1  0 99  0  0
 0  0      0 68455720  13124 53729460    0    0     0     6   70  121  0  0 100  0  0
 0  0      0 68455856  13124 53729460    0    0     0     1   79  138  0  0 100  0  0
  • free 列以千字節爲單位顯示。 若是仍存在着可用的空閒內存, 那麼這可能並非制約資源。
  • swpd 列以千字節爲單位顯示,報告所用的虛存量或被換出到磁盤上的內存量。
  • si 列給出在報告期間從磁盤上換入的內存量。
  • so 列給出在報告期間換出到磁盤(虛存)上的內存量。

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

    也可使用 Linuxtop命令來得到關於佔用內存較多的進程的更詳細信息。在運行 top命令時輸入 h,能夠獲得選項列表;輸入 m可根據常駐內存使用狀況進行排序,從而肯定哪些進程消耗的內存最多。 Linux/usr/bin/top工具比 vmstat具備更大的干擾,也佔用更多 CPU時間。所以首先應使用 vmstat,在須要額外信息時再使用 top工具。
    應記住, 在
32Linux系統上, 內存容量可能會超出數據庫軟件的尋址能力。 在這種狀況下, 若是出現 I/O問題, 應該尋找新型的空閒內存使用方式。 爲了減小 I/O操做,應儘可能使用內存。在某些狀況下, 能夠利用數據庫的臨時空間區域, 尤爲對於使用了 sorthash區域的具體進程(典型存在於 DSS工做負荷中)。要確保控制這些區域的數據庫參數被置爲最大值(除以數據庫代理的數目),同時仍不超過系統的內存(包括內核)範圍。


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

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

相關文章
相關標籤/搜索