高效能Mysql 2 效能優化

2021-08-02 17:03:13 字數 2281 閱讀 4688

基準測試:針對系統設計的一種壓力測試。

基準測試的原因:

1. 驗證基於系統的一些假設,確認這些假設是否符合實際情況。

2. 重現系統中的某些異常行為,已解決這些異常。

3. 測試系統當前的運**況。

4. 模擬比當前系統更高的負載,找出系統可能遇到的擴充套件性瓶頸。

5. 測試應用適應可變環境的能力。

6. 測試不同額硬體、軟體和作業系統的配置。

測試指標:吞吐量、響應時間或者延遲、併發性、可擴充套件性

伺服器效能剖析

最常遇見的三個效能相關的請求是:如何確認伺服器是否帶到效能最佳的狀態;找出某條語句為什麼執行不夠快;診斷被使用者描述成「停頓、卡死」某些間隙性疑難故障。

效能優化定義:效能即是響應時間,每個查詢花費的時間。

剖析mysql查詢:1. mysql可以捕獲慢查詢,目前5.1可以捕獲所有查詢,慢查詢是開銷最低,精度最高的測試查詢時間工具。

2. mysql還有另外一一直查詢日誌,稱為「通用日誌」,但是比較浪費時間和效能。

剖析單條查詢

使用show profile命令

schema與資料型別優化

選擇優化資料型別:1. 更小的通常更好:占用更少的磁碟、記憶體和cpu快取,並且處理時需要的cpu築起也更少。

2. 簡單就好:簡單資料型別的操作通常需要更少的cpu週期。比如:整型比字元操作代價更低。

3. 避免使用null。null使得索引和索引統計都變的更加複雜。

整數型別:包含整數和實數

整數型別包含 tinyint、smallint、mediumint、int、bigint。整數型別可選的unsigned屬性,表示不允許負數。

實數表示帶有小數的陣列。最好使用decimal比double和float好。

字串型別

varchar和char型別是最主要的字串型別。varchar型別是儲存可變長字串,最常見的的字串資料型別。比訂場型別更節省空間。如果mysql使用row_format-fixed建立,每一行都使用定長儲存,浪費空間。update花費的時間可能較長一點。

char:型別是定長的,適合儲存很短的字串或者所有字串都接近乙個長度。適合儲存md5密碼。對於經常變更的資料使用char較好。使用char時會刪除末尾的空格。

blob和text型別

blob和text都是為了儲存很大的資料而設計的字串資料型別,分表採用二進位制和字元方式儲存。

字元資料型別是:tinytext、smalltext、text、mediumitext、longtext

二進位制資料型別:tinyblob、smallblob、blob、mediumiblob、longblob

實際中盡量少用這兩種資料型別,可以使用列舉代替字串型別。

日期和時間型別

mysql提供兩種日期型別:datetime 和timestamp。datetime能過儲存大範圍的值,精度為秒,與時區無關。timestamp儲存了2023年一拉的秒數,和unix時間戳相同,儲存空間比datetime小的多。

選擇識別符號

可以選擇1. 整數型別,使用auto_increment自增。

2. enum和set型別:避免使用

3. 字串型別:uuid。 缺點:因為插入值會隨機的寫入到索引的不同位置,導致insert語句更慢;select語句變得更慢,因為邏輯相鄰的行會分布在磁碟和記憶體的不同地方;隨機值導致快取對所有型別的查詢語句效果都很差,因為會使得快取賴以生存的訪問區域性性原理失效。

正規化和反正規化

在正規化化的資料庫中,每個事實資料會出現並且出現一次。在反正規化的資料庫中,資訊時冗餘的,可能儲存在多個地方。

正規化優缺點:正規化化的更新操作快於反正規化;當資料較好的正規化化就會很少或者沒有重複的資料,只需要修改更少的資料庫;正規化化的表更小,可以恨到的放在記憶體裡,執行操作會更快;很少有多餘的資料意外檢索列表資料時更少需要使用distinct和group by語句。

缺點:需要關聯。複雜的語句需要更多的關聯,導致索引策略無效。

反正規化優缺點:所有資料都在一張表中,可以很好的避免關聯。如果資料比記憶體大時這可能比關聯要快很多,避免了隨機io.

混合使用正規化化和反正規化化

高效能的MySQL(2)單條SQL效能

實際應用中,分析單條查詢sql效能,有3種方法 show status show profile和慢查詢日誌。一 使用show profile 1 預設是禁用的,在會話中開啟 開啟profile set profiling 1 2 當乙個查詢到達伺服器時,此工具會把分析資訊記錄到一張臨時表,並且給查...

《高效能MySQL》之MySQL查詢效能優化

響應時間過長。如果把查詢看做是乙個任務,那麼它由一系列子任務組成,每個子任務都會消耗一定的時間。如果要優化查詢,實際上優化其子任務,要麼消除其中一些子任務,要麼減少子任務的執行次數,要麼讓子任務執行得更快。查詢的生命週期 客戶端 伺服器 伺服器上解析 生成執行計畫 執行 返回結果給客戶端。其中 執行...

高效能Mysql筆記 優化

了解查詢的整個生命週期,清楚每個階段的時間消耗情況 參考select profiling 檢視profiling是否開啟 set profiling 1 開啟profiling show profiles 檢視每條查詢的效能 show profile for query id 檢視query id的...