優化 MySQL 3 個簡單的小調整

2021-08-15 19:14:01 字數 1728 閱讀 8982

我並不期望成為乙個專家級的 dba,但是,在我優化 mysql 時,我推崇 80/20 原則,明確說就是通過簡單的調整一些配置,你可以壓榨出高達 80% 的效能提公升。尤其是在伺服器資源越來越便宜的當下。

沒有兩個資料庫或者應用程式是完全相同的。這裡假設我們要調整的資料庫是為乙個「典型」的 web **服務的,優先考慮的是快速查詢、良好的使用者體驗以及處理大量的流量。

在你對伺服器進行優化之前,請做好資料庫備份!

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

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

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

12alter 

table 

table_name 

engine

=innodb;

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

你可以在my.cnf檔案中編輯你的 mysql 配置。使用innodb_buffer_pool_size引數去配置在你的伺服器上允許 innodb 使用物理記憶體數量。

對此(假設你的伺服器僅僅執行 mysql),公認的「經驗法則」是設定為你的伺服器物理記憶體的 80%。在保證作業系統不使用交換分割槽而正常執行所需要的足夠記憶體之後 ,盡可能多地為 mysql 分配物理記憶體。

因此,如果你的伺服器物理記憶體是 32 gb,可以將那個引數設定為多達 25 gb。

12innodb_buffer_pool_size

=25600m

*注意:(1)如果你的伺服器記憶體較小並且小於 1 gb。為了適用本文的方法,你應該去公升級你的伺服器。 (2) 如果你的伺服器記憶體特別大,比如,它有 200 gb,那麼,根據一般常識,你也沒有必要為作業系統保留多達 40 gb 的記憶體。 *

如果伺服器上的引數innodb_buffer_pool_size的配置是大於 1 gb,將根據引數innodb_buffer_pool_instances的設定, 將 innodb 的緩衝池劃分為多個。

擁有多於乙個的緩衝池的好處有:

在多執行緒同時訪問緩衝池時可能會遇到瓶頸。你可以通過啟用多緩衝池來最小化這種爭用情況:

對於緩衝池數量的官方建議是:

為了實現最佳的效果,要綜合考慮innodb_buffer_pool_instancesinnodb_buffer_pool_size的設定,以確保每個例項至少有不小於 1 gb 的緩衝池。

因此,在我們的示例中,將引數innodb_buffer_pool_size設定為 25 gb 的擁有 32 gb 物理記憶體的伺服器上。乙個合適的設定為 25600m / 24 = 1.06 gb

12innodb_buffer_pool_instances=24

在修改了my.cnf檔案後需要重啟 mysql 才能生效:

12sudo 

service 

mysql 

restart

還有更多更科學的方法來優化這些引數,但是這幾點可以作為乙個通用準則來應用,將使你的 mysql 伺服器效能更好。

優化 MySQL 3 個簡單的小調整

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

MySQL 3 資料表的基本操作

建立資料表 create table 表名 欄位名1,資料型別 列級別的約束條件 預設條件 表級別約束條件 在定義列的同時指定主鍵 欄位名 資料型別 primaey key 預設值 在定義完所有列之後指定主鍵 constrint 約束名 primary key 欄位名 定義多欄位聯合主鍵 prima...

mysql(3) 內連線 外連線的區別

先來看一下,內連線的語法 select from inner join on 內連線指的是把表連線時表與表之間匹配的資料行查詢出來,就是兩張表之間資料行匹配時,要同時滿足on語句後面的條件才行。左連線和右連線,又叫左外連線和右外連線。我們來看一下左連線的語法 select from left out...