mysql性能優化學習筆記


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM