1、I/O調優ios
在進行 I/O調優時必須作出許多決策。是否使用原始設備或文件系統?是否使用直接 I/O?應該爲數據庫選取多大的塊尺寸? 若是正在嚴格地執行在線事務處理(其特徵爲小型的隨機讀/寫操做)工做負荷, 則應該選擇較小的塊尺寸如 2KB。 對於 DSS中長期運行的查詢操做而言,在實現了複雜的查詢優化器以及複雜的內存(分類/散列區域)參數控制的數據庫中, 更大的塊尺寸會提升數據庫掃描速度, 例如 8KB(若是數據庫支持, 或者可選更大尺寸)。在工做負荷同時包含 OLTP 和 DSS的狀況下該如何處理?這時須要對數據庫參數的調優加以仔細考慮。 在某些狀況下有必要作出折衷選擇, 也許4KB的塊大小比較合適。web
2、隊列長度與響應時間
數據庫
在Linux系統中, vmstat是很好的 I/O帶寬測量工具。該工具的「 I/O section」 結果中bi和bo兩列本來分別表示輸入到塊設備以及從塊設備中輸出的塊數,如vmstat的man幫助命令所述。然而,在各類 Linux發行版本中這些列實際上以 KBps爲單位報告字符設備或塊設備(文件系統)在測量期間的傳輸率。對於這兩種工做負荷,若是隊列長度大於 1, 則存在着某種衝突的可能性。 對於 OLTP來講, 超過 50ms的響應時間是須要解決的問題。緩存
[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的速度不會受到基準測試其餘方面的影響。
4GB內存中爲數據庫分配 2.5GB,所以 database_block_buffers取值爲 2684354560 /4096= 655360dom
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工做負荷經常須要執行大型表掃描操做並返回衆多表格行結果。 針對這類工做負荷, 經過爲大量sort和join操做分配內存,能夠避免在臨時磁盤空間上發生會損害高I/O帶寬/吞吐率(MBps)的溢出現象。這經過配置 hash和 sort尺寸這些數據庫參數來完成。這些工做負荷的全局緩存容量沒必要很大——能夠比 OLTP工做負荷所需的全局緩存小多個數量級。
[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
若是swpd值較大而且從 si 和 so列中可發現大量交換活動,則可能須要添加更多內存或減小爲數據庫分配的內存量,從而爲應用程序保留更多內存。要確保存在着可分配給數據庫的內存。另外,這還假定了Linux中已經考慮到鎖定數據庫的全局緩存區域。工具
也可使用 Linux的 top命令來得到關於佔用內存較多的進程的更詳細信息。在運行 top命令時輸入 h,能夠獲得選項列表;輸入 m可根據常駐內存使用狀況進行排序,從而肯定哪些進程消耗的內存最多。 Linux的/usr/bin/top工具比 vmstat具備更大的干擾,也佔用更多 CPU時間。所以首先應使用 vmstat,在須要額外信息時再使用 top工具。5、 日誌設備
當其餘全部瓶頸都被解決後,對日誌記錄設備的優化每每將最終決定 OLTP數據庫的性能。儘可能將日誌文件與全部其餘數據庫文件加以分離是很重要的。
下一步應決定使用原始設備仍是文件系統設備來運行日誌文件。歷史上,原始設備對於支持數據庫來講是首選的日誌記錄設備。有些數據庫使用了直接 I/O文件系統,其性能能夠達到原始設備的 5%。 另外一些(一般爲非商用的)數據庫則利用 Linux提供的緩衝機制來進行文件系統緩衝。建議在具體設定的環境中對這些方案進行直接比較。
性能