MySQL——優(yōu)化

一缚陷、應(yīng)用優(yōu)化

在實際生產(chǎn)環(huán)境中,由于數(shù)據(jù)庫本身的性能局限往核,就必須要對前臺的應(yīng)用進行一些優(yōu)化箫爷,來降低數(shù)據(jù)庫的訪問壓力。

1.1聂儒、使用連接池

對于訪問數(shù)據(jù)庫來說虎锚,建立連接的代價是比較昂貴的,因為我們頻繁的創(chuàng)建關(guān)閉連接衩婚,是比較耗費資源的窜护,我們必須要使用數(shù)據(jù)庫連接池,以提高訪問的性能非春。

1.2柱徙、減少對MySQL的訪問

避免對數(shù)據(jù)進行重復(fù)檢索

在編寫應(yīng)用代碼時,需要能夠理清對數(shù)據(jù)庫的訪問邏輯税娜。能夠一次連接就獲取到結(jié)果的坐搔,就不用兩次連接,這樣可以大大減少對數(shù)據(jù)庫無用的重復(fù)請求敬矩。

比如 概行,需要獲取書籍的id 和name字段 , 則查詢?nèi)缦拢?/p>

select id , name from tb_book;

之后弧岳,在業(yè)務(wù)邏輯中有需要獲取到書籍狀態(tài)信息凳忙, 則查詢?nèi)缦拢?/p>

select id , status from tb_book;

這樣,就需要向數(shù)據(jù)庫提交兩次請求禽炬,數(shù)據(jù)庫就要做兩次查詢操作涧卵。其實完全可以用一條SQL語句得到想要的結(jié)果。

select id, name , status from tb_book;
增加cache層

在應(yīng)用中腹尖,我們可以在應(yīng)用中增加 緩存 層來達到減輕數(shù)據(jù)庫負擔的目的柳恐。緩存層有很多種,也有很多實現(xiàn)方式热幔,只要能達到降低數(shù)據(jù)庫的負擔又能滿足應(yīng)用需求就可以乐设。

因此可以部分數(shù)據(jù)從數(shù)據(jù)庫中抽取出來放到應(yīng)用端以文本方式存儲, 或者使用框架(Mybatis, Hibernate)提供的一級緩存/二級緩存绎巨,或者使用redis數(shù)據(jù)庫來緩存數(shù)據(jù)近尚,還可以使用基于Guava Cache的JVM級別的內(nèi)存緩存。

1.3场勤、負載均衡

負載均衡是應(yīng)用中使用非常普遍的一種優(yōu)化方法戈锻,它的機制就是利用某種均衡算法歼跟,將固定的負載量分布到不同的服務(wù)器上, 以此來降低單臺服務(wù)器的負載格遭,達到優(yōu)化的效果哈街。

利用MySQL復(fù)制分流查詢

通過MySQL的主從復(fù)制,實現(xiàn)讀寫分離如庭,使增刪改操作走主節(jié)點叹卷,查詢操作走從節(jié)點,從而可以降低單臺服務(wù)器的讀寫壓力坪它。

采用分布式數(shù)據(jù)庫架構(gòu)

分布式數(shù)據(jù)庫架構(gòu)適合大數(shù)據(jù)量骤竹、負載高的情況,它有良好的拓展性和高可用性往毡。通過在多臺服務(wù)器之間分布數(shù)據(jù)蒙揣,可以實現(xiàn)在多臺服務(wù)器之間的負載均衡,提高訪問效率开瞭。

可以采用MySQL的MMM或MHA架構(gòu)懒震,業(yè)界成熟和應(yīng)用比較廣的MHA架構(gòu)

MySQL集群高可用架構(gòu):http://www.reibang.com/p/14d1c07820ce

二、Mysql中查詢緩存優(yōu)化

寫在前面:查詢緩存從MySQL 5.7.20開始已被棄用嗤详,并在MySQL 8.0中被刪除个扰。

考慮到當前的局限性,在MySQL 5.7的生存期內(nèi)將繼續(xù)支持查詢緩存葱色。MySQL 8.0將不支持查詢緩存递宅,并且鼓勵用戶升級以使用服務(wù)器端查詢重寫或ProxySQL作為中間人緩存。

MySQL 8.0:不再支持查詢緩存

2.1苍狰、概述

Query cache 作用于整個 MySQL办龄,主要用來緩存 MySQL 中的查詢結(jié)果集,也就是一條SQL語句執(zhí)行的結(jié)果集淋昭,所以僅僅只能針對select語句俐填。當我們打開了 Query Cache 功能,MySQL在接受到一條select語句的請求后翔忽,如果命中緩存英融,也就是說所需結(jié)果集已經(jīng)在緩存中了,后面一系列步驟都不用再執(zhí)行歇式,直接從緩存拿到結(jié)果集返回給客戶端矢赁,可以極大的提高查詢性能!

開啟Mysql的查詢緩存贬丛,當執(zhí)行完全相同的SQL語句的時候,服務(wù)器就會直接從緩存中讀取結(jié)果给涕,當數(shù)據(jù)被修改豺憔,之前的緩存會失效额获,修改比較頻繁的表不適合做查詢緩存。

2.2恭应、執(zhí)行步驟

sql 查詢數(shù)據(jù)庫 執(zhí)行步驟如下:


  • 1抄邀、客戶端發(fā)送一條查詢給服務(wù)器。
  • 2昼榛、服務(wù)器先會檢查查詢緩存境肾,如果命中了緩存,則立即返回存儲在緩存中的結(jié)果胆屿。否則進入下一階段奥喻。
  • 3、服務(wù)器端進行SQL解析非迹、預(yù)處理环鲤,再由優(yōu)化器生成對應(yīng)的執(zhí)行計劃。
  • 4憎兽、MySQL根據(jù)優(yōu)化器生成的執(zhí)行計劃冷离,調(diào)用存儲引擎的API來執(zhí)行查詢。
  • 5纯命、將結(jié)果返回給客戶端西剥。

2.3、查詢緩存配置

  • 1亿汞、查看當前的MySQL數(shù)據(jù)庫是否支持查詢緩存:
SHOW VARIABLES LIKE 'have_query_cache';
  • 2瞭空、查看當前MySQL是否開啟了查詢緩存 :
SHOW VARIABLES LIKE 'query_cache_type';
  • 3、查看查詢緩存的占用大小 :
SHOW VARIABLES LIKE 'query_cache_size';
  • 4留夜、查看查詢緩存的狀態(tài)變量:
SHOW STATUS LIKE 'Qcache%';

各個變量的含義如下:

參數(shù) 含義
Qcache_free_blocks 查詢緩存中的可用內(nèi)存塊數(shù)
Qcache_free_memory 查詢緩存的可用內(nèi)存量
Qcache_hits 查詢緩存命中數(shù)
Qcache_inserts 添加到查詢緩存的查詢數(shù)
Qcache_lowmen_prunes 由于內(nèi)存不足而從查詢緩存中刪除的查詢數(shù)
Qcache_not_cached 非緩存查詢的數(shù)量(由于 query_cache_type 設(shè)置而無法緩存或未緩存)
Qcache_queries_in_cache 查詢緩存中注冊的查詢數(shù)
Qcache_total_blocks 查詢緩存中的塊總數(shù)

2.4匙铡、開啟查詢緩存

MySQL的查詢緩存默認是關(guān)閉的,需要手動配置參數(shù) query_cache_type 碍粥, 來開啟查詢緩存鳖眼。
query_cache_type 該參數(shù)的可取值有三個 :

含義
OFF 或 0 查詢緩存功能關(guān)閉
ON 或 1 查詢緩存功能打開,SELECT的結(jié)果符合緩存條件即會緩存嚼摩,
否則钦讳,不予緩存,顯式指定SQL_NO_CACHE枕面,不予緩存
DEMAND 或 2 查詢緩存功能按需進行愿卒,顯式指定 SQL_CACHE 的SELECT
語句才會緩存;其它均不予緩存

在 /etc/my.cnf 配置中潮秘,增加以下配置 :

#開啟Mysql的查詢緩存琼开,決定是否緩存查詢結(jié)果。這個變量有三個取值:0,1,2枕荞,分別代表了off柜候、on搞动、demand。
query_cache_type = 1

配置完畢之后渣刷,重啟服務(wù)既可生效 鹦肿;
然后就可以在命令行執(zhí)行SQL語句進行驗證 ,執(zhí)行一條比較耗時的SQL語句辅柴,然后再多執(zhí)行幾次箩溃,查看后面幾次的執(zhí)行時間;獲取通過查看查詢緩存的緩存命中數(shù)碌嘀,來判定是否走查詢緩存们童。

2.5磷籍、查詢緩存SELECT選項

可以在SELECT語句中指定兩個與查詢緩存相關(guān)的選項 :

  • SQL_CACHE:如果查詢結(jié)果是可緩存的,并且 query_cache_type 系統(tǒng)變量的值為ON或 DEMAND ,則緩存查詢結(jié)果 荞彼。
  • SQL_NO_CACHE:服務(wù)器不使用查詢緩存尽爆。它既不檢查查詢緩存谣旁,也不檢查結(jié)果是否已緩存秦陋,也不緩存查詢結(jié)果。

例子:

SELECT SQL_CACHE id, name FROM customer;
SELECT SQL_NO_CACHE id, name FROM customer;

2.6导俘、查詢緩存失效的情況

  • 1峦耘、SQL 語句不一致的情況, 要想命中查詢緩存旅薄,查詢的SQL語句必須一致辅髓。
SQL1 : select count(*) from tb_item;
SQL2 : Select count(*) from tb_item;
  • 2、當查詢語句中有一些不確定的時少梁,則不會緩存洛口。如 : now()、current_date()凯沪、curdate()第焰、curtime()、rand()妨马、uuid()挺举、user()、database() 烘跺。
SQL1 : select * from tb_item where updatetime < now() limit 1;
SQL2 : select user();
SQL3 : select database();
  • 3湘纵、不使用任何表查詢語句。
select 'A';
  • 4滤淳、查詢 mysql梧喷, information_schema或 performance_schema 數(shù)據(jù)庫中的表時,不會走查詢緩存。
select * from information_schema.engines;
  • 5铺敌、在存儲的函數(shù)绊困,觸發(fā)器或事件的主體內(nèi)執(zhí)行的查詢。

  • 6适刀、如果表更改,則使用該表的所有高速緩存查詢都將變?yōu)闊o效并從高速緩存中刪除煤蹭。這包括使用 MERGE 映射到已更改表的表的查詢笔喉。一個表可以被許多類型的語句,如被改變 INSERT硝皂、UPDATE常挚、DELETE、TRUNCATE TABLE稽物、ALTER TABLE奄毡、DROP TABLE 或 DROP DATABASE 。

三贝或、MySQL內(nèi)存管理及優(yōu)化

3.1吼过、內(nèi)存優(yōu)化原則

  • 1、將盡量多的內(nèi)存分配給MySQL做緩存咪奖,但要給操作系統(tǒng)和其他程序預(yù)留足夠內(nèi)存盗忱。
  • 2、MyISAM 存儲引擎的數(shù)據(jù)文件讀取依賴于操作系統(tǒng)自身的IO緩存羊赵,因此趟佃,如果有MyISAM表,就要預(yù)留更多的內(nèi)存給操作系統(tǒng)做IO緩存昧捷。
  • 3闲昭、排序區(qū)、連接區(qū)等緩存是分配給每個數(shù)據(jù)庫會話(session)專用的靡挥,其默認值的設(shè)置要根據(jù)最大連接數(shù)合理分配序矩,如果設(shè)置太大,不但浪費資源芹血,而且在并發(fā)連接較高時會導(dǎo)致物理內(nèi)存耗盡贮泞。

3.2、MyISAM 內(nèi)存優(yōu)化

myisam存儲引擎使用 key_buffer 緩存索引塊幔烛,加速myisam索引的讀寫速度啃擦。對于myisam表的數(shù)據(jù)塊,mysql沒有特別的緩存機制饿悬,完全依賴于操作系統(tǒng)的IO緩存令蛉。

key_buffer_size

key_buffer_size決定MyISAM索引塊緩存區(qū)的大小,直接影響到MyISAM表的存取效率≈槭澹可以在MySQL參數(shù)文件中設(shè)置key_buffer_size的值蝎宇,對于一般MyISAM數(shù)據(jù)庫,建議至少將1/4可用內(nèi)存分配給key_buffer_size祷安。

在/etc/my.cnf 中做如下配置:

key_buffer_size=512M
read_buffer_size

如果需要經(jīng)常順序掃描myisam表姥芥,可以通過增大read_buffer_size的值來改善性能。但需要注意的是read_buffer_size是每個session獨占的汇鞭,如果默認值設(shè)置太大凉唐,就會造成內(nèi)存浪費。

read_rnd_buffer_size

對于需要做排序的myisam表的查詢霍骄,如帶有order by子句的sql台囱,適當增加 read_rnd_buffer_size 的值,可以改善此類的sql性能读整。但需要注意的是read_rnd_buffer_size 是每個session獨占的簿训,如果默認值設(shè)置太大,就會造成內(nèi)存浪費米间。

3.3强品、InnoDB 內(nèi)存優(yōu)化

innodb用一塊內(nèi)存區(qū)做IO緩存池,該緩存池不僅用來緩存innodb的索引塊车伞,而且也用來緩存innodb的數(shù)據(jù)塊择懂。

在內(nèi)部,innodb 緩存池邏輯上由 free list另玖、flush list 和 lru list 組成:

  • free list:空閑緩存塊列表
  • flush list:是需要刷新到此磁盤的緩存塊列表
  • lru list:是 innodb 正在使用的緩存塊困曙,它是 innodb buffer pool 的核心。

innodb 使用的 lru 算法與 myisam 的“中點插入策略”lru算法很類似谦去,大致原理是:將 lru list 分為 young sublist 和 old sublist慷丽,數(shù)據(jù)從磁盤讀入時,會將該緩存塊插入到 lru list 的“中點”鳄哭,即 old sublist 的頭部要糊;經(jīng)過一定時間的訪問(由 innodb_old_blocks_time 系統(tǒng)參數(shù)決定),該數(shù)據(jù)塊將會由 old sublist 轉(zhuǎn)移到 young sublist 的頭部妆丘,也就是整個lru list 的頭部锄俄;隨著時間推移,young sublist 和 old sublist 中較少被訪問的緩存塊將從各自鏈表的頭部逐漸向尾部移動勺拣;需要淘汰數(shù)據(jù)塊時奶赠,優(yōu)先從鏈表尾部淘汰。這種設(shè)計同樣是為了防止偶爾被訪問的索引塊將訪問頻繁的熱塊淘汰药有。

innodb_buffer_pool_size

該變量決定了 innodb 存儲引擎表數(shù)據(jù)和索引數(shù)據(jù)的最大緩存區(qū)大小毅戈。在保證操作系統(tǒng)及其他程序有足夠內(nèi)存可用的情況下苹丸,innodb_buffer_pool_size 的值越大,緩存命中率越高苇经,訪問InnoDB表需要的磁盤I/O 就越少赘理,性能也就越高。

在一個專用的數(shù)據(jù)庫服務(wù)器上可以將 80% 的物理內(nèi)存分配給 InnoDB buffer pool 扇单,需要注意避免設(shè)置過大而導(dǎo)致頁的交換商模。

#查看 buffer pool 的使用情況 
show global status like '%Innodb_buffer_pool%';

#計算 InnoDB 緩存池的命中率,如果命中率太低,則應(yīng)該考慮擴充內(nèi)存蜘澜、增加 innodb_buffer_pool_size 的值
(1-Innodb_buffer_pool_reads/Innodb_buffer_pool_read_requests)*100

?參考設(shè)置:

1)物理內(nèi)存小于 1 GB
innodb_buffer_pool_size=128M
innodb_log_file_size=48M

2)物理內(nèi)存為 1 GB ~ 4GB
innodb_buffer_pool_size=物理內(nèi)存*0.5
innodb_log_file_size=128M


3)物理內(nèi)存大于 4 GB
innodb_buffer_pool_size=物理內(nèi)存*0.75
innodb_log_file_size=1024M
innodb_log_buffer_size

決定了innodb重做日志緩存的大小阻桅,對于可能產(chǎn)生大量更新記錄的大事務(wù),增加innodb_log_buffer_size的大小兼都,可以避免innodb在事務(wù)提交前就執(zhí)行不必要的日志寫入磁盤操作。

innodb_log_buffer_size=10M
innodb_old_blocks_pct

?innodb_old_blocks_pct (old sublist 的比例)稽寒,可以根據(jù) InnoDB Monitor的輸出信息來調(diào)整 innodb_old_blocks_pct 的值扮碧。如果 youngs/s 的值很低,可能需要適當增大innodb_old_blocks_pct 的值或減少 innodb_old_blocks_time 的值杏糙。

show engine innodb status\G;

*************************** 1. row ***************************
  Type: InnoDB
  Name:
Status:
=====================================
......
Pages made young 0, not young 0
0.00 youngs/s, 0.00 non-youngs/s
......

當然慎王,調(diào)整 old_sublist 的比例由系統(tǒng)參數(shù) innodb_old_blocks_pct 決定,其取值范圍是 5 ~ 95, 默認值是 37宏侍。

通過以下命令可以查看其當前設(shè)置:

show global variables like '%innodb_old_blocks_pct%';
innodb_old_blocks_time

?一個緩存數(shù)據(jù)塊被插入到 midpoint(old sublist)后赖淤,至少要在 old sublist 停留超過 innodb_old_blocks_time(ms)后,才有可能被轉(zhuǎn)移到 young sublist谅河。

?可以根據(jù) InnoDB Monitor的輸出信息來調(diào)整 innodb_old_blocks_time 的值咱旱。在進行表掃描時,如果 non-youngs/s 很低绷耍,youngs/s 很高吐限,就應(yīng)該考慮將 innodb_old_blocks_time 適當調(diào)大,以防止表掃描將真正的熱數(shù)據(jù)淘汰褂始。

show engine innodb status\G;

*************************** 1. row ***************************
  Type: InnoDB
  Name:
Status:
=====================================
......
Pages made young 0, not young 0
0.00 youngs/s, 0.00 non-youngs/s
......
innodb_buffer_pool_instances

?適當增加此參數(shù)的值诸典,可以降低并發(fā)導(dǎo)致的內(nèi)部緩存訪問沖突,改善性能崎苗。 InnoDB 緩存系統(tǒng)會將 innodb_buffer_pool_size 的大小平分為 innodb_buffer_pool_instances 個 buffer pool狐粱。

innodb_max_dirty_pages_pct
  • 1、控制緩沖池中臟頁的最大比例胆数,如果臟頁達到或超過該值肌蜻, InnoDB 后臺線程將開始緩存刷新。
  • 2幅慌、若 Innodb_buffer_pool_wait_free 的值增長較快宋欺,則說明 InnoDB 經(jīng)常在等待空閑緩存頁,如果無法增大緩存池,那么應(yīng)將 innodb_max_dirty_pages_pct的值調(diào)小或?qū)?innodb_io_capacity 的值提高齿诞,以加快臟頁的刷新酸休。
innodb_io_capacity

?* 1、代表磁盤系統(tǒng)的 I/O 能力祷杈,對于轉(zhuǎn)速較低的磁盤斑司;如 7200RPM 的磁盤,可將 innodb_io_capacity 的值降低到 100但汞;而對于固態(tài)硬盤和由多個磁盤組成的盤陣宿刮,innodb_io_capacity 的值可以適當增大。對于固態(tài)硬盤來說私蕾,建議設(shè)置為 2000 或者更高僵缺。

  • 2、innodb_io_capacity 決定一批刷新臟頁的數(shù)量踩叭,當緩存池臟頁的比例達到 innodb_max_dirty_pages_pct 時磕潮, InnoDB 大約將 innodb_io_capacity 個已改變的緩存頁刷新到磁盤。

  • 3容贝、當臟頁小于 innodb_max_dirty_pages_pct 時自脯,如果 innodb_adaptive_flushing=ON,InnoDB 將根據(jù)函數(shù) buf_flush_get_desired_flush_rate 返回的重做日志產(chǎn)生的速度來確定要刷新的臟頁數(shù)斤富。

  • 4膏潮、在合并插入緩存時,InnoDB 每次合并的頁數(shù)是 0.05*innodb_io_capacity

  • 5满力、若 Innodb_buffer_pool_wait_free 的值增長較快焕参,則說明 InnoDB 經(jīng)常在等待空閑緩存頁,如果無法增大緩存池油额,那么應(yīng)將 innodb_max_dirty_pages_pct的值調(diào)小或?qū)?innodb_io_capacity 的值提高龟糕,以加快臟頁的刷新。

innodb_doublewrite

對于要求超高性能悔耘,有能容忍極端情況下少量數(shù)據(jù)丟失的應(yīng)用讲岁,可以通過在配置文件中增加 innodb_doublewrite=0 參數(shù)設(shè)置來關(guān)閉 innodb_doublewrite,以盡量滿足性能方面的要求衬以。

join_buffer_size & sort_buffer_size

?如果 Sort_merge_passes 的值很大缓艳,可以考慮調(diào)整參數(shù) sort_buffer_size 的值來增大排序緩存區(qū),以改善帶有 order by 子句或 group 子句 SQL 的性能看峻。

show global status like 'Sort_merge_passes';

注意:join_buffer_size 和 sort_buffer_size 都是面向用戶服務(wù)線程分配的阶淘,如果設(shè)置過大造成內(nèi)存浪費,甚至導(dǎo)致內(nèi)存交換互妓。尤其是 join_buffer_size溪窒,如果是多表關(guān)聯(lián)的復(fù)雜查詢坤塞,還可能會分配多個 join buffer,因此最好是設(shè)置較小的全局 join_buffer_size澈蚌,而對需要做復(fù)雜連接操作的 session 單獨設(shè)置較大的 join_buffer_size摹芙。

四、MySQL并發(fā)參數(shù)調(diào)整

從實現(xiàn)上來說宛瞄,MySQL Server 是多線程結(jié)構(gòu)浮禾,包括后臺線程和客戶服務(wù)線程。多線程可以有效利用服務(wù)器資源份汗,提高數(shù)據(jù)庫的并發(fā)性能盈电。在Mysql中,控制并發(fā)連接和線程的主要參數(shù)包括 max_connections杯活、back_log匆帚、thread_cache_size、table_open_cahce旁钧。

4.1卷扮、max_connections

采用max_connections 控制允許連接到MySQL數(shù)據(jù)庫的最大數(shù)量,默認值是 151均践。如果狀態(tài)變量 connection_errors_max_connections 不為零,并且一直增長摩幔,則說明不斷有連接請求因數(shù)據(jù)庫連接數(shù)已達到允許最大值而失敗彤委,這是可以考慮增大max_connections 的值。

Mysql 最大可支持的連接數(shù)或衡,取決于很多因素焦影,包括給定操作系統(tǒng)平臺的線程庫的質(zhì)量、內(nèi)存大小封断、每個連接的負荷斯辰、CPU的處理速度,期望的響應(yīng)時間等坡疼。在Linux 平臺下彬呻,性能好的服務(wù)器,支持 500-1000 個連接不是難事柄瑰,需要根據(jù)服務(wù)器性能進行評估設(shè)定闸氮。

注意:每一個 session 操作 MySQL 數(shù)據(jù)庫表都需要占用文件描述符,數(shù)據(jù)庫連接本身也要占用文件描述符教沾,因此在增大 max_connections 值時蒲跨,也要注意評估 open_files_limit 的設(shè)置是否夠用。

4.2授翻、back_log

back_log 參數(shù)控制MySQL監(jiān)聽TCP端口時設(shè)置的積壓請求棧大小或悲。如果MySql的連接數(shù)達到max_connections時孙咪,新來的請求將會被存在堆棧中,以等待某一連接釋放資源巡语,該堆棧的數(shù)量即back_log翎蹈,如果等待連接的數(shù)量超過back_log,將不被授予連接資源捌臊,將會報錯杨蛋。5.6.6 版本之前默認值為50,之后的版本默認為50 +(max_connections / 5)理澎, 但最大不超過900逞力。

如果需要數(shù)據(jù)庫在較短的時間內(nèi)處理大量連接請求, 可以考慮適當增大back_log 的值糠爬。

4.3寇荧、table_open_cache

  • 1、該參數(shù)用來控制所有SQL語句執(zhí)行線程可打開表緩存的數(shù)量执隧。
  • 2揩抡、每一個 SQL 執(zhí)行線程至少都要打開 1 個表緩存,這個參數(shù)可以根據(jù) max_connections(最大連接數(shù)) * N(每個連接關(guān)聯(lián)查詢中所涉及表的最大個數(shù)) 來設(shè)定镀琉。
  • 3峦嗤、在未執(zhí)行 flush tables 命令的情況下,如果 MySQL 狀態(tài)變量 Opened_tables 的值較大,說明 table_open_cache 設(shè)置的過小,應(yīng)適當增大。
  • 4屋摔、注意:增大 table_open_cache 的值烁设,會增加 MySQL 對文件描述符的使用量,因此钓试,需要注意評估 open_files_limit 的設(shè)置是否夠用装黑。

4.4 thread_cache_size

為了加快連接數(shù)據(jù)庫的速度,MySQL 會緩存一定數(shù)量的客戶服務(wù)線程以備重用弓熏,通過參數(shù) thread_cache_size 可控制 MySQL 緩存客戶服務(wù)線程的數(shù)量恋谭。

通過計算線程 cache 的失效率 Threads_created/Connections 來調(diào)整 thread_cache_size 值。該值越接近1挽鞠,說明線程 cache 命中率越低疚颊,應(yīng)該考慮 適當增加 thread_cache_size 的值。

innodb_lock_wait_timeout

  • 1信认、該參數(shù)是用來設(shè)置InnoDB 事務(wù)等待行鎖的時間串稀,默認值是50ms , 可以根據(jù)需要進行動態(tài)設(shè)置狮杨。
  • 2母截、對于需要快速反饋的業(yè)務(wù)系統(tǒng)來說,可以將行鎖的等待時間調(diào)小橄教,以避免事務(wù)長時間掛起清寇。
  • 3喘漏、對于后臺運行的批量處理程序來說,可以將行鎖的等待時間調(diào)大华烟, 以避免發(fā)生大的回滾操作翩迈。

參考:
MySQL集群高可用架構(gòu)

https://blog.51cto.com/11286233/2043902

https://www.cnblogs.com/Mr-Echo/p/12155461.html

https://blog.csdn.net/qq_33033819/article/details/106581728

https://blog.csdn.net/qq_33033819/article/details/106581756

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市盔夜,隨后出現(xiàn)的幾起案子负饲,更是在濱河造成了極大的恐慌,老刑警劉巖喂链,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件返十,死亡現(xiàn)場離奇詭異,居然都是意外死亡椭微,警方通過查閱死者的電腦和手機洞坑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蝇率,“玉大人迟杂,你說我怎么就攤上這事”灸剑” “怎么了排拷?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長锅尘。 經(jīng)常有香客問我监氢,道長,這世上最難降的妖魔是什么鉴象? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮何鸡,結(jié)果婚禮上纺弊,老公的妹妹穿的比我還像新娘。我一直安慰自己骡男,他們只是感情好淆游,可當我...
    茶點故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著隔盛,像睡著了一般犹菱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上吮炕,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天腊脱,我揣著相機與錄音,去河邊找鬼龙亲。 笑死陕凹,一個胖子當著我的面吹牛悍抑,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播杜耙,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼搜骡,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了佑女?” 一聲冷哼從身側(cè)響起记靡,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎团驱,沒想到半個月后摸吠,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡店茶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年蜕便,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贩幻。...
    茶點故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡轿腺,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出丛楚,到底是詐尸還是另有隱情族壳,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布趣些,位于F島的核電站仿荆,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏坏平。R本人自食惡果不足惜拢操,卻給世界環(huán)境...
    茶點故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望舶替。 院中可真熱鬧令境,春花似錦、人聲如沸顾瞪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽陈醒。三九已至惕橙,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間钉跷,已是汗流浹背弥鹦。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留爷辙,地道東北人惶凝。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓吼虎,卻偏偏與公主長得像,于是被迫代替她去往敵國和親苍鲜。 傳聞我的和親對象是個殘疾皇子思灰,可洞房花燭夜當晚...
    茶點故事閱讀 43,543評論 2 349

推薦閱讀更多精彩內(nèi)容