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