問題描述
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長期合作伙伴,公司提供的服務(wù)項(xiàng)目有:申請域名、虛擬主機(jī)、營銷軟件、網(wǎng)站建設(shè)、施甸網(wǎng)站維護(hù)、網(wǎng)站推廣。最近有一臺MySQL5.6.21的服務(wù)器,在應(yīng)用發(fā)布后,并發(fā)線程Threads_running迅速升高,達(dá)到2000左右,大量線程處于等待Opening tables、closing tables狀態(tài),應(yīng)用端相關(guān)邏輯訪問超時(shí)。
【分析過程】
1、16:10應(yīng)用發(fā)布結(jié)束后,Opened_tables不斷增加,如下圖所示:
查看當(dāng)時(shí)故障期間抓取的pt-stalk日志文件,時(shí)間點(diǎn)2019-01-18 16:29:37,Open_tables 的值為3430,而table_open_cache的配置值為2000。
當(dāng)Open_tables值大于table_open_cache值時(shí),每次新的session打開表,有一些無法命中table cache,而不得不重新打開表。這樣反應(yīng)出來的現(xiàn)象就是有大量的線程處于opening tables狀態(tài)。
2、這個(gè)實(shí)例下的表,加上系統(tǒng)數(shù)據(jù)庫下總計(jì)851張,遠(yuǎn)小于table_open_cache的2000,為什么會導(dǎo)致Open_tables達(dá)到3430呢
從官方文檔中可以得到解釋,
https://dev.mysql.com/doc/refman/5.6/en/table-cache.html
table_open_cache is related to max_connections. For example, for 200 concurrent running connections, specify a table cache size of at least 200 * N, where N is the maximum number of tables per join in any of the queries which you execute.