mysql容器效能優化 MySQL高階 效能優化

2021-10-20 01:42:27 字數 2539 閱讀 8279

1.應用優化

1.1 使用資料庫連線池

使用資料庫連線池,避免資料庫連線頻繁的建立和銷毀,進而減少資源的消耗,提高資料庫的訪問效能。

1.2 減少對mysql的訪問

1.2.1 避免資料重複檢索

能一次檢索獲取到結果,就不要進行倆次檢索,減少對資料庫的無用重請求。

1.2.2 增加cache層

增加快取層來減輕資料庫負擔。可以使用orm框架提供的一級/二級快取,或者使用redis來快取資料。

1.3負載均衡

1.3.1 mysql讀寫分離

通過mysql的主從複製實現讀寫分離,增刪改走主伺服器 ,讀走從伺服器,降低單台mysql伺服器的讀寫壓力。

1.3.2 採用分布式資料庫架構

可以利用mycat等資料庫中介軟體對資料庫進行分庫分表。

2.mysql記憶體管理及優化

2.1 記憶體優化原則

在保證其它應用記憶體預留足夠的情況下,將盡量多的記憶體分配給mysql做快取。

對於myisam的表,要預留更多的記憶體給作業系統做io快取,因為myisam儲存引擎資料檔案的讀取依賴於作業系統自身的io快取。

排序區和連線區的快取是給每個資料庫會話專用的,其預設值需要根據最大連線數合理分配,如過分配過大不但會消耗資源,在高併發下會使物理機記憶體資源耗盡。

2.2 myisam記憶體優化

myisam儲存引擎使用key_buffer快取索引塊,加速索引的讀寫速度。myisam的資料塊完全依賴於作業系統的io快取。

key_buffer_size : 決定myisam索引塊快取區的大小,直接影響到myisam表的訪問效率。

read_buffer_size : 可以適當增大該引數值的大小來改善經常被順序掃瞄的myisam表的效能。

read_rnd_buffer_size : 對於需要做排序的myisam表的查詢,可以增大該引數的值,來提公升sql效能。

2.3 innodb記憶體優化

innodb用一塊記憶體區做io快取池,該快取池不僅快取innodb索引塊,還快取innodb的資料塊。

innodb_buffer_pool_size : 該引數決定了innodb表資料和索引資料的最大快取區大小,該引數越大,快取命中率越高,磁碟io越少,效能也就越高。

innodb_log_buffer_size :決定了重做日誌快取的大小,增加該引數的大小,可以避免在事務提交之前執行不必要的日誌寫入操作(磁碟io),提高效能。

3. mysql併發引數調整

mysql是多執行緒結構,包括後台執行緒和客戶服務執行緒。多執行緒可以有效利用服務資源,提高資料庫併發效能。

max_connections : 控制連線到mysql資料庫的請求最大數量,預設是151。如果狀態變數connection_errors_max_connections不為零,並且一直增大,則說明不斷有請求因請求連線數已經達到最大而連線失敗,此時可以增大max_connections的值。

back_log : 控制mysql監聽tcp埠時設定的積壓請求棧大小。如果mysql的請求數量超過max_connections,新來的mysql請求會先放在back_log堆疊中,來等待已連線資源的釋放。當等待的請求數量超過back_log的允許值,將不授予連線資源而報錯。5.6.6版本之前back_log預設值是50,之後版本預設值是50+(max_connections/5),最大不超過900 。如果需要在短時間內處理大量請求,可以適當增大back_log的值。

table_open_cache : 該引數用來控制所有sql語句執行執行緒可以開啟表快取的數量。由於每乙個sql執行執行緒至少開啟乙個表快取,所以該引數值的設定要根據最大連線數(max_connectios)以及每個連線執行關聯查詢中涉及到表的最大數量來設定。

thread_cache_size : 控制mysql快取客戶服務執行緒的數量。

innodb_lock_wait_timeout : 該引數用來設定innodb事務獲取行鎖的最大等待時間,預設值是50ms。對於需要快速返回結果的業務系統來說可以適當調小該引數的值,以避免事務被掛起,對於後台執行的批處理程式來說,可以適當調大該引數的值,以避免事務發生大的回滾操作。

4. mysql鎖

4.1 鎖概述

鎖是計算機協調多個程序和多個執行緒併發訪問某一共享資源的機制。

4.2 鎖分類

資料庫操作的粒度:

表鎖 :操作時,會鎖住整張表。

行鎖 :操作時,會鎖住操作行。

資料的操作型別:

共享鎖(讀鎖):對同乙份資料,多個讀操作可以同時進行。

排它鎖(寫鎖):當前寫操作執行完成前,其它讀寫操作將會因獲取不到讀寫鎖而被阻斷。

4.3 mysql鎖

在mysql資料庫中,不同的儲存引擎有不同的鎖機制。

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生成乙個執行計...