mysql性能優化
硬件對數據庫的影響
CPU資源和可用內存大小
- 服務器硬件對mysql性能的影響
- 我們的應用是CPU密集型?
- 我們的應用的並發量如何?
數量比頻率更好
64位使用32位的服務器版本
32位不能使用超過4G的內容,因此選擇的時候需要注意。
myisam
innodb
磁盤的配置和選擇
-
機械硬盤:
存儲容量
傳輸速度
訪問時間
主軸轉速
物理尺寸 -
使用RAID增加傳統機器硬盤的性能
RAID:一系列小磁盤組成大磁盤,數據冗余
RAID 0 :成本最低,但是沒有數據冗余會造成數據丟失。
RAID 1 :磁盤鏡像,一個磁盤的數據鏡像到另外一個磁盤。數據冗余性好,讀性能好。
RAID 5 :分布式奇偶校驗磁盤陣列。如果單一一塊磁盤損壞可以通過其余磁盤值進行恢復,如果同時兩塊損壞則無法恢復。寫比較慢。讀比較快。
RAID 10 :是數據庫最好的選擇。又稱為分片鏡像。 -
使用固態存儲SSD或PCIe卡
相比傳統機械硬盤有更好的隨機讀寫性能
有更好的並發支持
但固態磁盤更容易損壞適用於大量隨機IO的情況
使用解決單線程IO負載的IO瓶頸
如果只有一個ssd硬盤,應該使用在從服務器上確保數據的安全。 -
使用網絡存儲SAN和NAS
SAN設備通過光纖連接到服務器上,設備通過塊接口訪問。服務器可以當作硬盤使用。可以使用大量的順序讀寫
隨機訪問和隨機寫比較慢NAS是通過網絡訪問協議進行訪問,有網絡訪問的延遲。
使用場景:
不適用於數據庫存儲
適用於數據庫備份
** CPU **
> * 64位的CPU運行64位的系統
> * 高並發的場景,cpu數量比頻率重要
> * CPU密集型的場景和復雜sql則頻率越高越好
** 內存 **
- 采用主板能使用的最高頻率的內存
- 內存盡可能大
** I/O **
- PCIe > SSD > Raid > 機械硬盤 > 網絡存儲(SAN)
操作系統對性能的影響-MySQL適合的操作系統
選擇服務器版本,而不是桌面版本。
CentOS系統參數優化
內核相關參數(/etc/sysctl.conf)
-
網絡性能設置
端口監聽隊列:net.core.somaxconn=65535
接受數據的速率:net.core.netdev_max_backlog=65535
未獲得連接的請求和保存在內存中的數量,超過時會被丟棄:net.ipv4.tcp_max_sync_backlog=65535
- 上述三個應該同時調大
tcp連接處理等待時間:net.ipv4.tcp_fin_timeout=10
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_tw_recycle=1
- 上述三個主要加快網絡連接的回收。
net.core.wmem_default=87380
net.core.wmem_max=16777216
net.core.rmem_default=87380
net.core.rmem_max=16777216
- 緩沖區接受和發送數據大小的最大值和默認值
探測的時間間隔(s): net.ipv4.tcp_keepalive_time=120
消息重發時的時間間隔(s): net.ipv4.tcp_keepalive_intvl=30
tcp連接超時前最多發送幾次: net.ipv4.tcp_keepalive_probes=3
- 內存
kernel.shmmax = 4292967295
- 這個參數應該設置得足夠大,以便於在一個共享內存段中容納下整個Innodb緩沖池的大小
- 這個值的大小對於64位linux系統,可以取內存最大值-1byte,建議大於物理內存的一半。一般大於Innodb緩沖池的大小即可。
vm.swappiness = 0 :當內存不足時會對系統性能產生比較大的影響。
Linux系統內存交換區(swap):
vm.swapppiness = 0
當系統內存不足時會將一些虛擬內存寫入磁盤交換區(swap)中。
由於使用swap會對mysql性能產生災難性的影響。因此對mysql服務器是否使用swap分區存在一些爭議。
如果禁用swap分區也會帶來一些影響:
- 降低操作系統的性能
- 容易造成內存溢出、崩潰或者被操作系統kill掉
就上述影響而言,保留swap分區還是必要。
vm.swapppiness是告訴操作系統,除非內存完全滿了,否則不使用swap。
增加系統資源限制(/etc/security/limit.conf)
打開文件數量的限制,加到/etc/security/limit.conf末尾即可:
* soft nofile 65535
* hard nofile 65535
*表示對所有用戶有效soft表示當前系統生效的配置hard表示系統中能設置的最大值nofile表示所限制的資源是打開文件的最大數量65535限制的數量
磁盤調度策略(/sys/block/devname/queue/scheduler)
cat /sys/block/devname/queue/scheduler
noop anticipatory deadline [cfq] # 完全公平隊列,一般用於桌面系統
noop:電梯式調度,餓死讀滿足寫
deadline:截至時間策略,`數據庫類型最好的選擇`
anticipatory:和deadline一樣,只是最后一次讀操作后要等待6毫秒。合並多次寫為一次寫,適合於文件服務器,對數據庫服務器表現很差。
將磁盤調度策略改為deadline
echo deadline > /sys/block/devname/queue/scheduler
文件系統對性能的影響
ext3、ext4、xfs(性能更高),上訴都具備日志功能,對數據安全性較好。
ext3、ext4系統掛載參數(/etcc/fstab)
- data=writeback(Innodb最好的選擇)|ordered|journal
- noatime,訪問時間
- nodiratime,目錄訪問時間
/dev/sda1/ext4 noatime,nodiratime,data=writeback 1 1
