mysql效能優化

2021-08-31 00:20:23 字數 2246 閱讀 9982

by mohamed aladdin

資料庫效能優化最重要的事是選擇正確的方式。你應該決定你的應用需要關係型或非關係型資料庫。甚至裡面的乙個型別,你都會有好幾個選擇。在關係型資料庫裡,你可以選擇oracle, mysql, sql server,和postgresql. 另一方面,非關係型資料庫例如mongodb, cassandra和couchdb. 你可能希望我建議用讀寫效能快的非關係型資料庫。然而,通過一些改進和調整,你可以把關係型資料推到超過它已知的限制。所以,在本文中,我將會介紹給你一些技巧來讓你的mysql資料庫更快。如果你想知道為什麼特別是mysql, 那麼答案是簡單的,因為它免費,開源在php社群很流行oracle 並沒有廣泛使用因為它很昂貴。其他的選擇並沒有像mysql這麼受歡迎。

首先你應該知道根據你的作業系統配置檔案是在**。在linux系統,它在 「/etc/mysql/my.cnf」.

是時候拿上你的引擎對比innodb和myisam了。為了讓選擇更簡單,你應該知道innodb成為預設引擎始於mysql5.5 因為它支援「行級鎖, 外來鍵和事務」 ,myisam不支援這裡提到的任何在現實應用中很少使用的特性。

選擇正確的引擎後,是時候設定一些在my.cnf 檔案裡的配置變數。

max_connection變數:

max_connection變數代表你的應用允許的連線數量。預設是151個連線,然而你可以輕鬆增加這個數量如果你獲得這樣乙個錯誤:「mysql error , too many connections…」

max_connections= 170

innodb_buffer_pool_size變數:

為了加速,mysql 將會快取資料在你的伺服器記憶體,這個變數告訴mysql能用多少gb。這個變數在你的資料庫裡儲存大的blobs時候非常有用。你可以設定為你伺服器80%,90%記憶體大小。所以你的伺服器記憶體是16gb, 你可以設定它為14gb.

innodb_buffer_pool_size= 14gb

innodb_io_capacity變數:

這個變數告訴mysql它可以用多少作業系統io,它受制於你的硬碟。例如,乙個單個7200 rpm 驅動限制200 i/o 乙個企業級ssd硬碟是 50000 i/o. 你可以通過你作業系統的命令列輕鬆發現io值和設定變數為可用io的90% , 這樣mysql將會使用太多的io操作。

innodb_io_capccity=21000

query_cache_limit 和 query_cache_size變數

mysql的快取也在記憶體裡,然而我們不能把它當做乙個快取系統,每次你的應用寫入乙個資料庫表,mysql將會重置查詢快取為全部表。所以,如果你的應用有乙個高比例負載,mysql 快取將會完全無用,在那種情況下,最好把這兩個引數設定為0來節省管理mysql快取的開銷,另外你可以用一些像redis這樣的管理快取。

query_cache_limit = 0

query_cache_size = 0

慢查詢日誌

慢查詢日誌將會展示哪個個查詢花費比設定更長的時間,不需要猜測哪個查詢慢。首先,你需要啟用慢查詢日誌在你的配置檔案。在linux上,開啟/etc/mysql/my.cnf 或者同樣的在你系統裡加入:

slow_query_log = 1

long_query_time = 1

log_output = 『table』
然後你就可以在乙個叫 「slow_log」 的表中檢視日誌,你將會看到所有關於花費超過1秒的執行查詢的資訊。資訊包括執行查詢的時間有多少行命中哪個使用者執行的它。

查詢優化

你獲得所有慢查詢之後,你需要尋找一種方法優化他們讓他們變得更快。所以你可以使用"explain"在查詢之前來獲得查詢的詳細資訊。例如: 「explain select * from users where active=1;」

explain 關鍵字能幫你定位哪個索引被你的查詢命中和你想要查詢的資料的行數。這個資訊能告訴你是否需要建立更多的索引或者重新組織你的資料庫表。

非規範化和約束

非規範方法可能導致 product表中的 category_name 過時,所以你需要定義乙個外來鍵」foreign key「 約束,但是你需要了解乙個 外來鍵將會讓寫效能慢了一點,因為mysql需要在寫資料之前檢查約束。所以它也常常是你的工作來決定怎樣才是提高資料效能的最好選擇。

mysql效能優化 mysql效能優化

優化方式 1.空間換時間 冗餘 2.時間換空間 字段優先使用型別 int date char varchar text 索引型別 btree索引 hash索引 索引的葉子下,存放乙個資訊指向所在行的資料位址。btree有利於範圍查詢,hash有利於精確查詢。btree用的更多一些。btree索引的常...

mysql的效能優化 mysql效能優化

檢視安裝指令碼 select version 非互動式超時時間,如jdbc show global variables like wait timeout 互動式超時時間,如資料庫工具 show global variables like interactive timeout show sessi...

mysql 效能優化 命令 mysql效能優化

發現問題 當發現程式執行比較慢的時候,首先排除物力資源問題之後,就將注意力轉向mysq資料庫 1 首先確定執行慢的sql語句 mysql show full processlist 2 確認低效的查詢 多次執行第一步發現time耗費大的sql語句。檢視耗費的時間。3 分析效能 為sql生成乙個執行計...