mysql
組件版本:
mysql:
5.7.25軟件架構(gòu):
兩主兩從
MySQL是一個關(guān)系型數(shù)據(jù)庫管理系統(tǒng),屬于Oracle旗下產(chǎn)品。MySQL是最流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)之一,在WEB應(yīng)用方面,MySQL是最好的RDBMS(Relational Database Management System,關(guān)系數(shù)據(jù)庫管理系統(tǒng))應(yīng)用軟件之一,MySQL所使用的SQL語言是用于訪問數(shù)據(jù)庫的最常用標(biāo)準(zhǔn)化語言。MySQL軟件采用了雙授權(quán)政策,分為社區(qū)版和商業(yè)版,由于其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點(diǎn),一般中小型網(wǎng)站的開發(fā)都選擇MySQL作為網(wǎng)站數(shù)據(jù)庫。
某業(yè)務(wù)系統(tǒng)采用mysql社區(qū)開源版本架構(gòu)為兩主兩從,排除人為因素故障,mysql常出現(xiàn)的故障是內(nèi)存溢出(OOM全稱"OutOfMemory",即內(nèi)存溢出),內(nèi)存溢出已經(jīng)是軟件開發(fā)歷史上存在了近40年的“老大難”問題。在操作系統(tǒng)上運(yùn)行各種軟件時,軟件所需申請的內(nèi)存遠(yuǎn)遠(yuǎn)超出了物理內(nèi)存所承受的大小,就叫內(nèi)存溢出。由于該業(yè)務(wù)系統(tǒng)采用了主從+VIP架構(gòu),當(dāng)主庫由于內(nèi)存溢出掛掉后,另外一個主庫負(fù)責(zé)業(yè)務(wù),所以業(yè)務(wù)有短暫幾十秒時間的故障期,但對整體業(yè)務(wù)未產(chǎn)生影響。
Mysql高可用大致架構(gòu)圖:
兩個實(shí)例互為主從,另外兩個實(shí)例分別為這兩個主實(shí)例的從庫實(shí)例,兩個主庫實(shí)例之間通過keepalived監(jiān)控實(shí)例以實(shí)現(xiàn)VIP高可用。
主庫實(shí)列發(fā)生OOM,實(shí)例進(jìn)程由于占用內(nèi)存達(dá)到linux系統(tǒng)的最大閾值,導(dǎo)致linux系統(tǒng)kill了mysql實(shí)例進(jìn)程,可以通過如下方式查看mysql使用了多少內(nèi)存:
查看每個線程占用多少內(nèi)存,然后乘以正在運(yùn)行的線程(也就是排查sleep的)。
SELECT( ( @@read_buffer_size + @@read_rnd_buffer_size + @@sort_buffer_size+ @@join_buffer_size + @@binlog_cache_size + @@thread_stack +@@tmp_table_size + @@bulk_insert_buffer_size + @@max_allowed_packet +@@net_buffer_length ) ) / (1024*1024) AS MEMORY_MB;
showglobal status like %threads%;
查看MySQL全局占用多少內(nèi)存
select(@@innodb_buffer_pool_size+@@innodb_log_buffer_size+@@key_buffer_size)/ 1024 /1024 AS MEMORY_MB;
查看performance_schema占用多少內(nèi)存
SELECTSUBSTRING_INDEX(event_name,/,2) AS code_area,sys.format_bytes(SUM(current_alloc)) AS current_alloc FROMsys.x$memory_global_by_current_bytes GROUP BYSUBSTRING_INDEX(event_name,/,2) ORDER BY SUM(current_alloc) DESC;
查看memory存儲引擎占用多少內(nèi)存
selectsum(max_data_length)/1024/1024 as MEMORY_MB from tables whereengine=memory;
通過以上方式查看當(dāng)前mysql數(shù)據(jù)庫具體占用多少內(nèi)存,從而找到占用內(nèi)存較多的對象,在根據(jù)對象的具體作用來調(diào)節(jié)數(shù)據(jù)庫配置:
如線程數(shù)過多,可以調(diào)整業(yè)務(wù)連接為長連接,長連接固定占用內(nèi)存,是業(yè)務(wù)連接重復(fù)使用內(nèi)存。
如innodbbuffer占用過多而業(yè)務(wù)所跑tps不大,可以通過調(diào)小innodbbuffer,減少內(nèi)存占用
如以上方式無法整改,可以通過添加物理內(nèi)存方式
由于該業(yè)務(wù)采用了高可用架構(gòu),所以mysql發(fā)生故障時,業(yè)務(wù)未產(chǎn)生影響。
1、mysql生產(chǎn)為了保證數(shù)據(jù)以及業(yè)務(wù)連續(xù)性,一定要使用高可用架構(gòu)
2、oom內(nèi)存溢出一定要仔細(xì)查看mysql是哪部分占用內(nèi)存較多,再根據(jù)不同部分調(diào)整業(yè)務(wù)生產(chǎn)庫的相關(guān)配置,包括硬件配置及軟件配置。
END
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/130046.html
摘要:那就只能是處理的數(shù)據(jù)超過了堆區(qū)內(nèi)存上限,按照這個猜測往下分析。主要暴增對象如上圖框出來的地方。符合對象內(nèi)存一篇文中分析的字節(jié)大小。優(yōu)化自己的程序,使其在運(yùn)行過程中占用內(nèi)存盡可能的少。針對異常的具體優(yōu)化措施。 前言 在正式開始講解關(guān)于OutOfMemoryError錯誤之前先來了解下,我在遇到這個異常的背景。 對數(shù)據(jù)充滿敬畏之心 我需要對hive中的數(shù)據(jù)進(jìn)行批量操作處理,對于沒有了解過h...
摘要:開發(fā)中經(jīng)常遇到這樣的場景產(chǎn)品汪我要在后臺做一個功能,可以導(dǎo)出自定義時間范圍的訂單信息。結(jié)果,第二天一上班產(chǎn)品汪過來就是拍桌子,我想把去年一整年的訂單都導(dǎo)出來,結(jié)果后臺直接就掛了開發(fā)小哥一查,原來是內(nèi)存溢出了,一年下來的的訂單量足足有條。 開發(fā)中經(jīng)常遇到這樣的場景 產(chǎn)品汪:我要在后臺做一個功能,可以導(dǎo)出自定義時間范圍的訂單信息。開發(fā)小哥二話不說,半天就把功能做完并上線了。結(jié)果,第二天一上...
閱讀 1353·2023-01-11 13:20
閱讀 1699·2023-01-11 13:20
閱讀 1211·2023-01-11 13:20
閱讀 1902·2023-01-11 13:20
閱讀 4161·2023-01-11 13:20
閱讀 2751·2023-01-11 13:20
閱讀 1397·2023-01-11 13:20
閱讀 3664·2023-01-11 13:20