本文主要翻譯自MariaDB官方文檔Optimization and Tuning中相關部分。

Hardware Optimization

MariaDB官方文檔 Hardware Optimization

更好的硬件是最簡單的提升性能的方式之一。 照例,硬件升級應按如下順序:

Better hardware is one of the easiest ways to improve performance.As a general rule of thumb, hardware should be improved in the following order:

Memory

memory(內存)是最重要的因素,它允許您調整服務器系統變量(Server System Variables)。更多的內存意味着可以存儲更大的索引和數據表緩存,以減少磁盤訪問。

如果沒有調整(set)服務器變量(server variables)以利用額外地可用內存,簡單地增加內存並不能立竿見影地(drastic)提升性能。

使用更多主板上的RAM槽(slot)會提高總線(bus)頻率,這將造成RAM和CPU之間更大地延遲。故每個slot使用最高地RAM大小是更好地選擇。

Using more RAM slots on the motherboard increases the bus frequency, and there will be more latency between the RAM and the CPU. So, using the highest RAM size per slot is preferable.

Disks

高速磁盤訪問(fast disk access)是至關重要的(critical),它是數據最終保存(reside)的地方。關鍵指標是磁盤搜尋時間(disk seek time),一種衡量手段,物理磁盤移動到訪問數據地時間,故儘可能選擇搜索時間短地磁盤。

Fast disk access is critical, as ultimately it’s where the data resides. The key figure is the disk seek time, a measurement of how fast the physical disk can move to access the data, so choose disks with as low a seek time as possible.

您也可以爲臨時文件(temporary file)和事務日誌(transaction log)添加專用磁盤(dedicated disk)。

You can also add dedicated disks for temporary files and transaction logs.

Fast Ethernet

高速網卡

CPU

儘管硬件瓶頸通常發生在其它地方,更快地處理器允許計算執行得更快,結果返回給客戶端(client)的速度也更快。除了處理器速度(processor speed),處理器的總線速度(bus speed)和緩存大小(cache size)也是需要考慮地重要因素。

Although hardware bottlenecks often fall elsewhere, faster processors allow calculations to be performed more quickly, and the results sent back to the client more quickly. Besides processor speed, the processor’s bus speed and cache size are also important factors to consider.

小結 * 硬件重要程度 內存 > 磁盤 > 網卡 > CPU * 增加內存後,需要對應更改Server System Variables以使用新增地內存,儘可能少地使用內存插槽,單個內存插槽使用儘可能多地內存 * 使用seek time短的磁盤,可爲臨時文件和事務日誌提供單獨地磁盤 * 使用高速網卡 * CPU處理器速度、總線速度、緩存大小

Operating System Optimizations

MariaDB官方文檔 Operating System Optimizations

Configuring Swappiness

MariaDB官方文檔 Configuring Swappiness

Why to avoid swapping

很明顯,從磁盤訪問swap memory要比直接從RAM訪問慢得多。這在數據庫服務器(database server)上是相當糟糕地,因爲:

  • MariaDB內部算法假定內存不是swap,它非常不高效。某些算法意圖拒絕(avoid)或延遲(delay)磁盤I/O,使用可能地內存(memory),使用swap執行可能比在磁盤上操作更糟糕。
  • swap的I/O負載超過使用磁盤,因爲 頁面(page)一直在swap中進、出交換。甚至像移除不再存儲在內存中的髒頁(dirty page),目的是提升效率,在swap中將消耗更多I/O
  • 數據庫鎖(database lock)在swap中相當低效。它們被設計用於快速獲取和釋放,暫停執行磁盤IO會嚴重影響它們的可用性。阻止swap的主要方式是確保運行在機器上地進程有足夠的RAM。系統變量(system variable)設置過高意味着在負載下,服務器運行內存不足,需要使用swap。所以理解設置什麼變量,以及這些變量是如何影響服務器內存使用的,是至關重要的。

Setting swappiness on Linux

Linux有swappiness設置,決定了swapping out page(內存塊)從RAM到磁盤上預配置的swap空間地平衡(balance)。設置範圍[0,100],值越小,swap的可能性越低。默認值是60,您可通過運行如下命令檢查

sysctl vm.swappiness

默認設置鼓勵服務器使用swap,由於數據庫服務器上除了MariaDB進程,沒有其它服務會使用swap,您可能想將該值減少到0,以儘可能地避免使用使用swap。可在文件sysctl.conf (文件位置/etc/sysctl.conf)中添加一行

vm.swappiness = 0

通常在重啓後生效,不過您可以使用如下命令更改而不用重啓。

sysctl -w vm.swappiness=0

操作過程

[flying@lemp ~]$ sysctl vm.swappiness
vm.swappiness = 60
[flying@lemp ~]$ sudo vim /etc/sysctl.conf
[flying@lemp ~]$ tail -1 /etc/sysctl.conf
vm.swappiness = 0
[flying@lemp ~]$ sudo sysctl -p
vm.swappiness = 0
[flying@lemp ~]$ sysctl vm.swappiness
vm.swappiness = 0
[flying@lemp ~]$

Disabling swap altogether

當完全禁用swap,同時娘確定想避免任何數據庫進程使用它,可謹慎的留一些swap空間以允許內核 fall over gracefully should a spike occur。有可用地緊急swap允許您有停止(kill)任何失控進程(runaway process)的餘地(scope)。

While some disable swap altogether, and you certainly want to avoid any database processes from using it, it can be prudent to leave some swap space to at least allow the kernel to fall over gracefully should a spike occur. Having emergency swap available at least allows you some scope to kill any runaway processes.

Filesystem Optimizations

MariaDB官方文檔 Filesystem Optimizations

Which filesystem is best?

於MariaDB性能而言,文件系統(filesystem)不是最重要的。更重要的是可用RAM、磁盤速度、系統變量設置 (參見 Hardware OptimizationSystem Variables)。

The filesystem is not the most important aspect of MariaDB performance. Far more important are available RAM, drive speed, the system variable settings.

優化文件系統在某些場景中可能會有明顯區別。目前,最好地Linux文件系統是ext4XFSBtrfs。它們都包含在主線Linux內核中,被廣泛支持,在大多數的Linux發行版中可用。Red Hat視Brtfs爲技術預覽(technology preview),還不能用於生產系統(production system)。

以下是理論文件大小和文件系統大小極值:

. ext4 XFS Brtfs
Max file size 16TB 8EB 16EB
Max filesystem size 1 EB 8EB 16EB

Each has unique characteristics that are worth understanding to get the most from.

Disabling access time

在數據庫服務器中,您不太可能需要記錄文件訪問時間,在掛載文件系統時禁用可在性能上有提升。使用選項 noatime

如果您想爲log files或其它系統文件保留訪問時間(access time),可將其存儲在單獨地磁盤上。

如何使用,參見 * mount noatime参数提高IO性能 * 使用noatime属性优化Linux文件系统读取性能

小結 * 禁止使用swap * 掛載文件系統時使用參數 noatime

Linux performance tuning tips for MySQL

Linux performance tuning tips for MySQL

Filesystem

  • ext4 (or xfs), mount with noatime
  • Scheduler – use deadline or noop #add "elevator=deadline" to grub.conf echo deadline >/sys/block/sda/queue/scheduler

Memory

  • Swappiness and NUMA:

    #add "vm.swappiness = 0" to /etc/sysctl.conf
    echo 0 > /proc/sys/vm/swappiness
    
  • Set numa interleave all

numactl --interleave=all
Available Packages
Name        : numactl
Arch        : x86_64
Version     : 2.0.9
Release     : 6.el7_2
Size        : 65 k
Repo        : updates/7/x86_64
Summary     : Library for tuning for Non Uniform Memory Access machines
URL         : ftp://oss.sgi.com/www/projects/libnuma/download
License     : GPLv2
Description : Simple NUMA policy support. It consists of a numactl program to
            : run other programs with a specific NUMA policy.

CPU

與超頻相關

ps ax| grep -c kondemand

cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

References

Change Log

  • 2016.03.20 18:17 Sun Asia/Beijing
    • 初稿完成

  • 2016.03.20 18:17 Sun
  • Note Location: Asia/Beijing
  • Writer: lempstacker