mysql binLog redoLog undoLog
- redo log和undo log是在引擎層實(shí)現(xiàn)的逢倍,且是innodb引擎獨(dú)有的籽暇,主要和事務(wù)相關(guān)侍郭、
- binLog是服務(wù)層實(shí)現(xiàn)的
bin log中記錄的是整個(gè)mysql數(shù)據(jù)庫的操作內(nèi)容鸠珠,對所有的引擎都適用遗淳,包括執(zhí)行DDL、DML令哟,可以用來進(jìn)行數(shù)據(jù)庫的恢復(fù)及控制恼琼。
redo log中記錄的是要更新的數(shù)據(jù),比如一條數(shù)據(jù)已提交成功屏富,并不會立即同步到磁盤晴竞,而是記錄到redo log中,等待合適的時(shí)機(jī)再刷盤狠半,為了實(shí)現(xiàn)事務(wù)的持久性噩死。
undo log中記錄的是當(dāng)前操作的相反操作,如一條insert語句在undo log中會對應(yīng)一條delete語句神年,在任務(wù)回滾時(shí)會用到undo log,實(shí)現(xiàn)事務(wù)的原子性已维,同時(shí)會用在MVCC中,undo會有一條記錄的多個(gè)版本已日,用在快照讀中垛耳。
線程的生命周期包含5個(gè)階段,包括:新建飘千、就緒堂鲜、運(yùn)行、阻塞护奈、銷毀缔莲。
內(nèi)存溢出是指應(yīng)用系統(tǒng)中存在無法回收的內(nèi)存或使用的內(nèi)存過多,最終使得程序運(yùn)行要用到的內(nèi)存大于虛擬機(jī)能提供的最大內(nèi)存霉旗。
引起內(nèi)存溢出的原因有很多種痴奏,常見的有以下幾種:
1.內(nèi)存中加載的數(shù)據(jù)量過于龐大,如一次從數(shù)據(jù)庫取出過多數(shù)據(jù)厌秒;
2.集合類中有對對象的引用抛虫,使用完后未清空,使得JVM不能回收简僧;
3.代碼中存在死循環(huán)或循環(huán)產(chǎn)生過多重復(fù)的對象實(shí)體建椰;
4.使用的第三方軟件中的BUG叽赊;
5.啟動(dòng)參數(shù)內(nèi)存值設(shè)定的過幸黾浮;
內(nèi)存溢出的解決方案:
第一步庵楷,修改JVM啟動(dòng)參數(shù)啦逆,直接增加內(nèi)存伞矩。(-Xms,-Xmx參數(shù)一定不要忘記加夏志。)
第二步乃坤,檢查錯(cuò)誤日志,查看“OutOfMemory”錯(cuò)誤前是否有其它異常或錯(cuò)誤湿诊。
第三步狱杰,對代碼進(jìn)行走查和分析,找出可能發(fā)生內(nèi)存溢出的位置厅须。