MySQL效能優化簡述

2020-07-16 10:05:25
簡而言之,效能優化就是在不影響系統能正確執行的前提下,執行速度更快,完成特定功能所需的時間更短。

我們可以通過某些有效的方法來提高 MySQL 資料庫的效能,目的是讓 MySQL 資料庫的執行速度更快、佔用的磁碟空間更小。

效能優化包括很多方面,例如優化查詢速度、優化更新速度和優化 MySQL 伺服器等。通過不同的優化方式達到提高 MySQL 資料庫效能的目的。優化資料庫是資料庫管理員和開發人員的必備技能。

下面將為讀者介紹優化的基本知識。

MySQL 資料庫的使用者和資料非常少時,很難判斷資料庫效能的好壞。只有當長時間執行,並且有大量使用者進行頻繁操作時,MySQL 資料庫的效能才能體現出來。

例如,一個每天有幾萬使用者同時線上的大型網站,它的資料庫效能的優劣就很明顯。這麼多使用者同時連線 MySQL 資料庫,並且進行查詢、插入和更新的操作。如果 MySQL 資料庫的效能很差,很可能無法承受如此多使用者的同時操作。另外,如果使用者查詢一條記錄需要花費很長時間,那麼使用者很難會喜歡這個網站。

因此,為了提高 MySQL 資料庫的效能,需要進行一系列的優化措施。一方面是找出系統的瓶頸,提高 MySQL 資料庫整體的效能,另一方面需要合理的資料庫結構設計和引數調整,來提高使用者操作響應的速度,同時還要盡可能節省系統資源,以便系統可以提供更大負荷的服務。

例如,通過優化檔案系統,提高磁碟 IO 的讀寫速度;通過優化作業系統排程策略,提高 MySQL 在高負荷情況下的負載能力;優化表結構、索引、查詢語句等使查詢響應更快。

如果 MySQL 資料庫中需要進行大量的查詢操作,那麼就需要對查詢語句進行優化。對於耗費時間的查詢語句進行優化,可以提高整體的查詢速度。如果連線 MySQL 資料庫的使用者很多,那麼就需要對 MySQL 伺服器進行優化。否則,大量的使用者同時連線 MySQL 資料庫,可能會造成資料庫系統崩潰。

那麼我們應該如何進行系統的分析,來盡快定位效率低下的 SQL 呢?主要有以下兩種方法:

1. 使用 SHOW STATUS 命令

資料庫管理員可以使用 SHOW STATUS 語句查詢 MySQL 資料庫的效能引數,了解各種 SQL 的執行頻率。語法形式如下:

SHOW STATUS LIKE 'value';

其中,value 引數是常用的幾個統計引數,常用引數介紹如下:
  • Connections:連線 MySQL 伺服器的次數;
  • Uptime:MySQL 伺服器的上線時間;
  • Slow_queries:慢查詢的次數;
  • Com_select:查詢操作的次數;
  • Com_insert:插入操作的次數,對於批次插入操作,只累加一次;
  • Com_update:更新操作的次數;
  • Com_delete:刪除操作的次數。

以上引數針對於所有儲存引擎的表,下面幾個引數只針對 InnoDB 儲存引擎。
  • Innodb_rows_read:表示 SELECT 語句查詢的記錄數;
  • Innodb_rows_inserted:表示 INSERT 語句插入的記錄數;
  • Innodb_rows_updated:表示 UPDATE 語句更新的記錄數;
  • Innodb_rows_deleted:表示 DELETE 語句刪除的記錄數。

比如,需要查詢 MySQL 伺服器的連線次數,可以執行下面的 SHOW STATUS 語句:

SHOW STATUS LIKE 'Connections';

查詢其它引數的方法和以上引數的查詢方法相同。

通過以上幾個引數,可以很容易的瞭解當前資料庫的應用是以插入為主還是以查詢為主,以及各種型別的 SQL 語句的大致執行比例。然後根據分析結果,進行相應的效能優化。

2. 使用慢查詢紀錄檔

慢查詢次數引數可以結合慢查詢紀錄檔,找出慢查詢語句,然後針對慢查詢語句進行表結構優化或者查詢語句優化。