在 Joomla、WordPress、Drupal 和 Typo 3 等網站託管和 CMS 系統中,MySQL 和 MariaDB 是使用最廣泛的關係數據庫管理系統 (RDMS)。在本文中,我將解釋如何加快和優化您的網站MySQL 和 MariaDB 數據庫服務器。
將 MySQL 數據存儲在單獨的分區中
在優化和保證方面,將數據庫數據存儲在單獨的捲中始終是最好的主意。 這些卷專門用於快速存儲卷,例如 SSD、NVMe。 即使您的系統出現故障,您的數據庫也將是安全的。 由於分區卷由快速存儲卷組成,因此性能會更快。
設置 MySQL 最大連接數
MySQL/MariaDB 使用說明 最大連接數 它指定服務器中當前允許的並發連接數。 過多的連接會導致高內存消耗以及高 CPU 負載。 對於小型網站,連接數可以指定為 100-200,較大的網站可能需要 500-800 甚至更多。 這 最大連接數 可以使用 SQL 查詢動態更改。 在這 example,我已將值設置為 200。
$ mysql -u root -p mysql> 設置全局 max_connections=200;
輸出 :
啟用 MySQL 慢查詢日誌
記錄需要很長時間執行的查詢可以更輕鬆地解決數據庫問題。 可以通過在 MySQL/MariaDB 配置文件中添加以下幾行來啟用慢查詢日誌。
慢查詢日誌=1 慢查詢日誌文件= /var/lib/mysql/mysql-slow-query.log 長查詢時間=1
其中第一個變量啟用慢查詢日誌
第二個變量定義日誌文件目錄
第三個變量定義了完成一個 MySQL 查詢的時間
重啟mysql/mariadb服務並監控日誌
$ systemctl restart mysql $ systemctl restart mariadb $ tail -f /var/lib/mysql/mysql-slow-query.log
設置 MySQL 允許的最大數據包
數據在 MySQL 中被拆分為數據包。 Max_allowed_packet 定義了可以發送的數據包的最大大小。 將 max_allowed_packet 設置得太低會導致查詢速度太慢。 建議將數據包值設置為最大數據包的大小。
設置臨時表容量
tmp_table_size 是用於內置內存表的最大空間。 如果表的大小超過指定的限制,它將被轉換為磁盤上的 MyISAM 表。 在 MySQL/MariaDB 中,您可以在配置文件中添加以下變量來設置臨時表的大小。 建議在服務器上將此值設置為每 GB 內存 64M。
[mysqld]
tmp_table_size=64M
重啟mysql服務
$ systemctl 重啟mysql $ systemctl 重啟mariadb
設置最大內存表容量。
Max_heap_table_size 是 MySQL 中用來配置最大內存表容量的變量。 最大內存表容量的大小應與臨時表容量相同,以避免磁盤寫入。 建議在服務器上將此值設置為每GB內存64M。 在 MySQL 配置文件中添加以下行並重新啟動服務。
[mysqld]
max_heap_table_size=64M
要應用更改,請重新啟動數據庫服務器。
$ systemctl 重啟mysql $ systemctl 重啟mariadb
禁用 MySQL 的 DNS 反向查找
當收到新連接時,MySQL/MariaDB 將執行 DNS 查找以解析用戶的 IP 地址。 當 DNS 配置無效或 DNS 服務器出現問題時,這可能會導致延遲。 要禁用 DNS 查找,請在 MySQL 配置文件中添加以下行並重新啟動 MySQL 服務。
[mysqld]
跳過名稱解析
重啟服務:
$ systemctl 重啟mysql $ systemctl 重啟mariadb
避免在 MySQL 中使用 Swappiness
當系統用完物理內存時,Linux 內核會將部分內存移動到磁盤的一個稱為“交換”空間的特殊分區。 在這種情況下,系統將信息寫入磁盤而不是釋放一些內存。 由於系統內存比磁盤存儲快,建議禁用swappiness。 可以使用以下命令禁用 Swappiness。
$ sysctl -w vm.swappiness=0
輸出 :
增加 InnoDB 緩衝池大小
MySQL/MariaDB 有一個 InnoDB 引擎,它有一個緩衝池來緩存和索引內存中的數據。 緩衝池幫助 MySQL/MariaDB 查詢執行得相對更快。 選擇合適的 InnoDB 緩衝池大小需要一些系統內存知識。 最好的想法是將 InnoDB 緩衝池大小的值設置為 RAM 的 80%。
例子。
- 系統內存 = 4GB
- 緩衝池大小 = 3.2GB
在 MySQL 配置文件中添加以下行並重啟服務
[mysqld]
innodb_buffer_pool_size 3.2G
重啟數據庫:
$ systemctl 重啟mysql $ systemctl 重啟mariadb
處理查詢緩存大小
MySQL/MariaDB 中的查詢緩存指令用於緩存所有重複使用相同數據的查詢。 小網站建議設置為64MB,時間增加。 不建議將查詢緩存大小的值增加到 GB,因為這可能會降低數據庫性能。 在 my.cnf 文件中添加以下行。
[mysqld]
query_cache_size=64M
檢查空閒連接
資源由空閒連接消耗,因此需要盡可能終止或刷新。 這些連接保持在“睡眠”狀態,並且可能會停留很長時間。 使用以下命令檢查空閒連接。
$ mysqladmin processlist -u root -p | grep“睡眠”
該查詢將列出處於睡眠狀態的進程。 一般在PHP中,使用mysql_pconnect時會發生該事件。 這將打開 MySQL 連接,執行查詢,刪除身份驗證,並使連接保持打開狀態。 使用 等待超時 指令,空閒連接可以被中斷。 默認值為 等待超時 是 28800 秒,可以減少到最小時間範圍,如 60 秒。 在 my.cnf 文件中添加以下行
[mysqld]
等待超時=60
優化和修復 MySQL 數據庫
如果服務器意外關閉,則 MySQL/MariaDB 中的表可能會崩潰。 還有其他可能導致數據庫表崩潰的原因,例如在復製過程中訪問數據庫,文件系統突然崩潰。 在這種情況下,我們有一個特殊的工具叫做“mysql檢查”,它檢查、修復和優化數據庫中的所有表。
使用以下命令執行修復和優化活動。
對於所有數據庫:
$ mysqlcheck -u root -p –auto-repair –check –optimize –all-databases
對於特定數據庫:
$ mysqlcheck -u root -p –auto-repair –check –optimize dbname
將 dbname 替換為您的數據庫名稱
- 使用測試工具檢查 MySQL/MariaDB 性能
最好定期檢查 MySQL/MariaDB 數據庫性能。 這樣可以輕鬆獲得性能報告和改進點。 有很多可用的工具,其中mysqltuner 是最好的一種。
運行以下命令下載工具
$ wget https://github.com/major/MySQLTuner-perl/tarball/master
解壓文件
$ tar xvzf 大師
轉到項目目錄並執行以下腳本。
$ cd Major-MySQLTuner-perl-7aa57fa $ ./mysqltuner.pl
輸出:
結論
在本文中,我們學習瞭如何使用不同的技術優化 MySQL/MariaDB。 感謝您的閱讀。