簡易mysql優化 優化 MySQL 簡單三個技巧

2021-10-18 05:27:54 字數 2115 閱讀 8698

技巧#1:為臨時表分配足夠的記憶體

在某些情況下,伺服器在處理語句時會建立內部臨時表。臨時表用於內部操作如group by和distinct,還有一些order by查詢以及union和from子句(派生表)中的子查詢。這些都是在記憶體中建立的記憶體表。記憶體中臨時表的最大大小由tmp_table_size和max_heap_table_size中較小的值確定。如果臨時表的大小超過這個閾值,則將其轉換為磁碟上的innodb或myisam表。此外,如果查詢涉及blob或text列,而這些列不能儲存在記憶體表中,臨時表總是直接指向磁碟。

這種轉換的代價很大,所以考慮增加max_heap_table_size和tmp_table_size變數的大小來幫助減少在磁碟上建立臨時表的數量。請記住,這將需要大量記憶體,因為記憶體中臨時表的大小是基於「最壞情況」的。例如,記憶體表總是使用固定長度的列,所以字元列使用varchar(255)。這可以使記憶體中的臨時錶比想象的要大得多—事實上,這比查詢表的總大小要大很多倍!當增加max_heap_table_size和tmp_table_sizevariables的大小時,一定要監視伺服器的記憶體使用情況,因為記憶體中的臨時表可能會增加達到伺服器記憶體容量的風險。

一般來說,32m到64m是建議值,從這兩個變數開始並根據需要進行調優。

在monyog中的臨時表監測

臨時表的監測是許多預定義的monyog監測之一。它提供了一些臨時表使用的指標,包括:

允許的最大值:顯示tmp_table_size伺服器變數的值,它定義了在記憶體中建立的臨時表的最大大小。與max_heap_table_size一起,這個值定義了可以在記憶體中建立的臨時表的最大大小。如果記憶體臨時表大於此大小,則將其儲存在磁碟上。

記憶體表的最大大小:顯示max_heap_table_size伺服器變數的值,該值定義了顯式建立的memory儲存引擎表的最大大小。

建立的臨時表總數:顯示created_tmp_tables伺服器變數的值,它定義了在記憶體中建立的臨時表的數量。

在磁碟上建立的臨時表:顯示created_tmp_disk_tables伺服器變數的值,該變數定義了在磁碟上建立的臨時表的數量。如果這個值很高,則應該考慮增加tmp_table_size和max_heap_table_size的值,以便增加建立記憶體臨時表的數量,從而減少在磁碟上建立臨時表的數量。

磁碟:總比率:基於created_tmp_disk_tables除以created_tmp_tables的計算值。由於tmp_table_size或max_heap_table_size不足而在磁碟上建立的臨時表的百分比。monyog將這個數字顯示為乙個進度條和百分比,以便快速確定有多少磁碟用於臨時表,而不是記憶體。

趨勢圖可用於建立的總表,磁碟上建立的表和磁碟的總比值。這些讓我們看到了它們隨著時間的演變:

技巧#2:使用 innodb 儲存引擎

如果你還在使用 myisam 儲存引擎,那麼是時候轉換到 innodb 了。有很多的理由都表明 innodb 比 myisam 更有優勢,如果你關注效能,那麼,我們來看一下它們是如何利用物理記憶體的:

myisam:僅在記憶體中儲存索引。

innodb:在記憶體中儲存索引和資料。

結論:儲存在記憶體的內容訪問速度要比磁碟上的更快。

下面是如何在你的表上去轉換儲存引擎的命令:

alter table table_name engine=innodb;

注意:你已經建立了所有合適的索引,對嗎?為了更好的效能,建立索引永遠是第一優先考慮的事情。

除了上述指標以外,還應該監控以下內容:

innodb緩衝池大小: innodb緩衝池大小在使用innodb的mysql資料庫中起著至關重要的作用。緩衝池同時快取資料和索引。它的值應該盡可能的大,以確保資料庫使用記憶體而不是硬碟驅動器進行讀取操作。

臨時表大小: mysql使用max_heap_table_size和tmp_table_size中較小的乙個來限制記憶體中臨時表的大小。擁有較大的值可以幫助減少在磁碟上建立臨時表的數量,但也會增加伺服器記憶體容量的風險,因為這個指標適用於每個客戶端。一般來說,32m到64m是建議的值,從這兩個變數開始並根據需要進行調優。

innodb日誌緩衝區大小: mysql每次寫入日誌檔案時,它都會利用可用於處理銷售資料的重要系統資源。因此,將innodb日誌緩衝區大小設定為較大值才有意義。這樣,伺服器在大型事務中寫入磁碟的次數就減少了,從而最大限度地減少了這些耗時的操作。64m是這個變數的乙個很好的起點。

mysq基礎優化

skip name resolve skip locking skip innodb skip bdb key buffer 1g記憶體推薦設定為256m,2g記憶體推薦設定為512m wait timeout 3或者5 2g記憶體推薦設定為5 max connections 如果訪問量很大可以設定...

mysql效能優化 簡易版

mysql效能優化 開啟mysql慢查詢 show variables like slow query log set global slow query log file var mysql mysql log mysql slow.log set global log queries not u...

mysql多個密碼 3個小密碼優化MySQL

首頁 資訊 3個小密碼優化mysql 3個小密碼優化mysql 我並不期望成為乙個專家級的 dba,但是,在我優化 mysql 時,我推崇 80 20 原則,明確說就是通過簡單的調整一些配置,你可以壓榨出高達 80 的效能提公升。尤其是在伺服器資源越來越便宜的當下。警告1.沒有兩個資料庫或者應用程式...