MySQL資料庫最佳化實踐--硬體方面
最近一段時間,我們整理了一些關於Percona,Linux,Flashcache,硬體裝置的最佳化經驗,分享給大家:
硬體
1.開啟BBWC
RAID卡都有寫cache(Battery Backed Write Cache),寫cache對IO效能的提升非常明顯,因為掉電會丟失資料,所以必須由電池提供支援。電池會定期充放電,一般為90天左右,當發現電量低 於某個閥值時,會將寫cache策略從writeback置為writethrough,相當於寫cache會失效,這時如果系統有大量的IO操作,可能 會明顯感覺到IO響應速度變慢。目前,新的RAID卡內建了flash儲存,掉電後會將寫cache的資料寫入flash中,這樣就可以保證資料永不丟 失,但依然需要電池的支援。
解決方案有兩種:1.人工觸發充放電,可以選擇在業務低谷時做,降低對應用的影響;2.設定寫cache策略為force write back,即使電池失效,也保持寫cache策略為writeback,這樣存在掉電後丟失資料的風險。
目前,有一些硬體廠家提供了電容供電的RAID卡,沒有電池充放電的問題,可以聯絡自己的硬體廠商。
2.RAID卡配置
關閉讀cache:RAID卡上的cache容量有限,我們選擇direct方式讀取資料,從而忽略讀cache。
關閉預讀:RAID卡的預讀功能對於隨機IO幾乎沒有任何提升,所以將預讀功能關閉。
關閉磁碟cache:一般情況下,如果使用RAID,系統會預設關閉磁碟的cache,也可以用命令強制關閉。
以上設定都可以透過RAID卡的命令列來完成,比如LSI晶片的RAID卡使用megacli命令。
3.開啟Fastpath功能
Fastpath是LSI的新特性,在RAID控制器為SSD做了了最佳化,使用fastpath特性可以最大程度發揮出SSD的能力。如果使用 SSD做RAID的方式,可以開啟fastpath功能。關於fastpath特性,可以從LSI官網下載資料,並諮詢自己的硬體提供商。
4.Fusionio引數調整
基本上,Fusionio無需做任何調整,下列三個引數可能會提升效能:
options iomemory-vsl use_workqueue=0
對於fusionio裝置,忽略Linux IO排程,相當於使用NOOP。
options iomemory-vsl disable-msi=0
開啟MSI中斷,如果裝置支援,則開啟。
options iomemory-vsl use_large_pcie_rx_buffer=1
開啟Large PCIE buffer,可能會提升效能。
作業系統
1.IO排程演算法
Linux有四種IO排程演算法:CFQ,Deadline,Anticipatory和NOOP,CFQ是預設的IO排程演算法。完全隨機的訪問環境 下,CFQ與Deadline,NOOP效能差異很小,但是一旦有大的連續IO,CFQ可能會造成小IO的響應延時增加,所以資料庫環境建議修改為 deadline演算法,表現更穩定。我們的環境統一使用deadline演算法。
IO排程演算法都是基於磁碟設計,所以減少磁頭移動是最重要的考慮因素之一,但是使用Flash儲存裝置之後,不再需要考慮磁頭移動的問題,可以使用 NOOP演算法。NOOP的含義就是NonOperation,意味著不會做任何的IO最佳化,完全按照請求來FIFO的方式來處理IO。
減少預讀:/sys/block/sdb/queue/read_ahead_kb,預設128,調整為16
增大佇列:/sys/block/sdb/queue/nr_requests,預設128,調整為512
2.NUMA設定
單機單例項,建議關閉NUMA,關閉的方法有三種:1.硬體層,在BIOS中設定關閉;2.OS核心,啟動時設定numa=off;3.可以用numactl命令將記憶體分配策略修改為interleave(交叉),有些硬體可以在BIOS中設定。
單機多例項,請參考:
3.檔案系統設定
我們使用XFS檔案系統,XFS有兩個設定:su(stripe size)和sw(stirpe width),要根據硬體層RAID來設定這兩個引數,比如10塊盤做RAID10,條帶大小為64K,XFS設定為su=64K,sw=10。
xfs mount引數:defaults,rw,noatime,nodiratime,noikeep,nobarrier,allocsize=8M,attr2,largeio,inode64,swalloc
資料庫
1.Flashcache引數
建立flashcache:flashcache_create -b 4k cachedev /dev/sdc /dev/sdb
指定flashcache的block大小與Percona的page大小相同。
Flashcache引數設定:
flashcache.fast_remove = 1:開啟fast remove特性,關閉機器時,無需將cache中的髒塊寫入磁碟。
flashcache.reclaim_policy = 1:髒塊刷出策略,0:FIFO,1:LRU。
flashcache.dirty_thresh_pct = 90:flashcache上每個hash set上的髒塊閥值。
flashcache.cache_all = 1:cache所有內容,可以用黑名單過濾。
flashecache.write_merge = 1:開啟寫入合併,提升寫磁碟的效能。
2.Percona引數
innodb_page_size:如果使用fusionio,4K的效能最好;使用SAS磁碟,設定為8K。如果全表掃描很多,可以設定為16K。比較小的page size,可以提升cache的命中率。
innodb_adaptive_checkpoint:如果使用fusionio,設定為3,提高重新整理頻率到0.1秒;使用SAS磁碟,設定為2,採用estimate方式重新整理髒頁。
innodb_io_capacity:根據IOPS能力設定,使用fuionio可以設定10000以上。
innodb_flush_neighbor_pages = 0:針對fusionio或者SSD,因為隨機IO足夠好,所以關閉此功能。
innodb_flush_method=ALL_O_DIRECT:公版的MySQL只能將資料庫檔案讀寫設定為DirectIO,對於 Percona可以將log和資料檔案設定為direct方式讀寫。但是我不確定這個引數對於 innodb_flush_log_at_trx_commit的影響,
innodb_read_io_threads = 1:設定預讀執行緒設定為1,因為線性預讀的效果並不明顯,所以無需設定更大。
innodb_write_io_threads = 16:設定寫執行緒數量為16,提升寫的能力。
innodb_fast_checksum = 1:開啟Fast checksum特性。
監控
1.fusionio監控:fio-status命令
Media status: Healthy; Reserves: 100.00%, warn at 10.00%
Thresholds: write-reduced: 96.00%, read-only: 94.00%
Lifetime data volumes:
Logical bytes written : 2,664,888,862,208
Logical bytes read : 171,877,629,608,448
Physical bytes written: 27,665,550,363,560
Physical bytes read : 223,382,659,085,448
2.flashcache監控:dmsetup status
read hit percent(99)
write hit percent(51)
dirty write hit percent(44)
ref
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7916042/viewspace-1056935/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【MySQL】資料庫最佳化MySql資料庫
- mysql資料庫最佳化MySql資料庫
- 資料庫實踐丨MySQL多表join分析資料庫MySql
- MySQL資料庫效能最佳化MySql資料庫
- MySQL 資料庫最佳化的具體方法說明MySql資料庫
- mysql資料庫最佳化彙總MySql資料庫
- 雲資料庫MySQL多人協同開發實踐資料庫MySql
- Mysql資料實時同步實踐MySql
- ag介面對接網站Mysql資料庫資源資料互動實踐網站MySql資料庫
- 資料庫查詢和資料庫(MySQL)索引的最佳化建議資料庫MySql索引
- 向量資料庫落地實踐資料庫
- DM資料庫操作實踐資料庫
- [JM_08]JMeter連線Mysql資料庫測試實踐JMeterMySql資料庫
- Python資料庫程式設計全指南SQLite和MySQL實踐Python資料庫程式設計SQLiteMySql
- MySQL匯入百萬資料實踐MySql
- 分散式資料庫中介軟體 MyCat | 分庫分表實踐分散式資料庫
- MySQL8.0效能最佳化(實踐)MySql
- Mysql資料庫大表最佳化方案和Mysql大表最佳化步驟MySql資料庫
- MySQL/Oracle資料庫最佳化總結(非常全面)MySqlOracle資料庫
- mysql資料庫最佳化需要遵守的原則MySql資料庫
- 醫院核心資料庫一體化建設實踐資料庫
- 金倉資料庫在 TPCE(dbt5,tpsE)測試框架方面的實踐和突破資料庫框架
- PHP最佳實踐之資料庫PHP資料庫
- MySQL資料庫初體驗_gwMySql資料庫
- MySQL 8.0 在關聯式資料庫方面有這些新特性MySql資料庫
- MySql資料庫最佳化的幾條核心建議MySql資料庫
- 開源資料庫中介軟體-MyCa初探與分片實踐資料庫
- 分散式系統硬體資源池原理和接入實踐分散式
- mysql資料庫的主從複製和主主複製實踐MySql資料庫
- MariaDB Spider 資料庫分庫分表實踐IDE資料庫
- LiquiBase 管理資料庫變更實踐UI資料庫
- Milvus向量資料庫入門實踐資料庫
- 資料庫治理的探索與實踐資料庫
- 資料庫安全最佳實踐:基本指南資料庫
- Mysql事務原理與最佳化最佳實踐MySql
- [資料庫]【MySQL】MySQL資料庫規範總結資料庫MySql
- Linux系統MySQL資料庫效能最佳化詳細教程。LinuxMySql資料庫
- 解析MySQL資料庫效能最佳化的六大技巧MySql資料庫
- 資料庫系列:MySQL慢查詢分析和效能最佳化資料庫MySql