您好,登錄后才能下訂單哦!
這篇“MySQL生產(chǎn)庫內(nèi)存異常增高怎么排查”文章的知識(shí)點(diǎn)大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價(jià)值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“MySQL生產(chǎn)庫內(nèi)存異常增高怎么排查”文章吧。
因?yàn)楣旧a(chǎn)環(huán)境使用的阿里云RDS,修改參數(shù)相對(duì)方便,performance_schema默認(rèn)為0,此次修改為1。修改之后提交參數(shù),數(shù)據(jù)庫會(huì)進(jìn)行重啟,建議在業(yè)務(wù)低峰進(jìn)行。
登錄MySQL數(shù)據(jù)庫,執(zhí)行如下SQL,打開內(nèi)存監(jiān)控。
update performance_schema.setup_instruments set enabled = 'yes' where name like 'memory%';
打開之后驗(yàn)證一下。
select * from performance_schema.setup_instruments where name like 'memory%innodb%' limit 5;
**注意:**該命令是在線打開內(nèi)存統(tǒng)計(jì),所以只會(huì)統(tǒng)計(jì)打開后新增的內(nèi)存對(duì)象,打開前的內(nèi)存對(duì)象不會(huì)統(tǒng)計(jì),建議您打開后等待一段時(shí)間再執(zhí)行后續(xù)步驟,便于找出內(nèi)存使用高的線程。
select event_name, SUM_NUMBER_OF_BYTES_ALLOC from performance_schema.memory_summary_global_by_event_name order by SUM_NUMBER_OF_BYTES_ALLOC desc LIMIT 10; +---------------------------------------+-------------------------------------+ | event_name | SUM_NUMBER_OF_BYTES_ALLOC | +---------------------------------------+-------------------------------------+ | memory/sql/Filesort_buffer::sort_keys | 763523904056 | | memory/memory/HP_PTRS | 118017336096 | | memory/sql/thd::main_mem_root | 114026214600 | | memory/mysys/IO_CACHE | 59723548888 | | memory/sql/QUICK_RANGE_SELECT::alloc | 14381459680 | | memory/sql/test_quick_select | 12859304736 | | memory/innodb/mem0mem | 7607681148 | | memory/sql/String::value | 1405409537 | | memory/sql/TABLE | 1117918354 | | memory/innodb/btr0sea | 984013872 | +---------------------------------------+-------------------------------------+
可以看到內(nèi)存消耗最高的event是Filesort_buffer,根據(jù)經(jīng)驗(yàn),這個(gè)應(yīng)該是排序有關(guān)。
select thread_id, event_name, SUM_NUMBER_OF_BYTES_ALLOC from performance_schema.memory_summary_by_thread_by_event_name order by SUM_NUMBER_OF_BYTES_ALLOC desc limit 10; +---------------------+---------------------------------------+-------------------------------------+ | thread_id | event_name | SUM_NUMBER_OF_BYTES_ALLOC | +---------------------+---------------------------------------+-------------------------------------+ | 105 | memory/memory/HP_PTRS | 69680198792 | | 183 | memory/sql/Filesort_buffer::sort_keys | 49210098808 | | 154 | memory/sql/Filesort_buffer::sort_keys | 43304339072 | | 217 | memory/sql/Filesort_buffer::sort_keys | 37752275360 | | 2773 | memory/sql/Filesort_buffer::sort_keys | 31460644712 | | 218 | memory/sql/Filesort_buffer::sort_keys | 31128994280 | | 2331 | memory/sql/Filesort_buffer::sort_keys | 28763981248 | | 106 | memory/memory/HP_PTRS | 27938197584 | | 191 | memory/sql/Filesort_buffer::sort_keys | 27701610224 | | 179 | memory/sql/Filesort_buffer::sort_keys | 25624723968 | +---------------------+---------------------------------------+-------------------------------------+
可以看到內(nèi)存消耗多的線程都跟Filesort_buffer
相關(guān)。
根據(jù)前邊我們查到的thread_id
去日志里查找對(duì)應(yīng)的SQL,阿里云RDS審計(jì)日志相對(duì)還是比較強(qiáng)大的。我們直接根據(jù)thread_id直接檢索。
我們?cè)谌罩纠锟吹酱罅窟@樣的SQL,掃描行數(shù)在幾千到幾萬不等。雖然每次查詢時(shí)間并不長,大概在幾十到幾百毫秒,但是并發(fā)量很大。
以上就是關(guān)于“MySQL生產(chǎn)庫內(nèi)存異常增高怎么排查”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對(duì)大家有幫助,若想了解更多相關(guān)的知識(shí)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。