本篇文章給大家?guī)?lái)的內(nèi)容是關(guān)于mysql中什么是大表?什么是大事務(wù)?該如何處理?有一定的參考價(jià)值,有需要的朋友可以參考一下,希望對(duì)你有所幫助。
前言
相對(duì)來(lái)說(shuō),什么情況下的數(shù)據(jù)庫(kù)表能夠稱(chēng)為“大表”呢?
-
當(dāng)一個(gè)表的數(shù)據(jù)超過(guò)千萬(wàn)行的時(shí)候,就會(huì)對(duì)數(shù)據(jù)庫(kù)造成影響
-
當(dāng)表數(shù)據(jù)文件巨大,表數(shù)據(jù)文件超過(guò)10G(數(shù)據(jù)值相對(duì)硬件而言)
大表的影響
大表對(duì)查詢(xún)的影響
慢查詢(xún):很難在一定的時(shí)間內(nèi)過(guò)濾出所需要的數(shù)據(jù)
(Eg:顯示訂單、來(lái)源少、區(qū)分度底、大量磁盤(pán)IO、降低磁盤(pán)效率、慢查詢(xún))
大表對(duì)DDL操作的影響
1、建立索引需要很長(zhǎng)時(shí)間
風(fēng)險(xiǎn):
mysql版本 MYSQL版本 >= 5.5 雖然不會(huì)鎖表但會(huì)引起主從延遲
2、修改表結(jié)構(gòu)需要長(zhǎng)時(shí)間鎖表
風(fēng)險(xiǎn):
會(huì)造成長(zhǎng)時(shí)間的主從延遲
影響正常的數(shù)據(jù)操作
如何處理數(shù)據(jù)庫(kù)中的大表
1、分庫(kù)分表把一張大表分成多個(gè)小表
難點(diǎn):
分表主鍵的選擇
分表后跨分區(qū)數(shù)據(jù)的查詢(xún)和統(tǒng)計(jì)
2、大表的歷史數(shù)據(jù)歸檔
優(yōu)點(diǎn):
減少對(duì)前后端業(yè)務(wù)的影響
難點(diǎn):
歸檔時(shí)間點(diǎn)的選擇
如何進(jìn)行歸檔的操作
什么是事務(wù)?
-
事務(wù)是數(shù)據(jù)庫(kù)系統(tǒng)區(qū)別于其他一切文件系統(tǒng)的重要特性之一
-
事務(wù)是一組具有原子性的SQL語(yǔ)句,或是一個(gè)獨(dú)立的工作單元
事務(wù)要求符合:原子性、一致性、隔離性、持久性
事務(wù)的原子性
一個(gè)事務(wù)必須被視為不可分離的最小工作單位,整個(gè)事務(wù)中的所有操作要么全部提交成功,要么全部失敗,對(duì)于一個(gè)事務(wù)來(lái)說(shuō),不可能只執(zhí)行其中的一部分操作。
Eg:
1、檢查理財(cái)賬戶(hù)中的余額是否高于2000元
2、從理財(cái)賬戶(hù)的余額中減去2000元
3、在活動(dòng)存款賬戶(hù)上增加2000元
整個(gè)事務(wù)中的所有操作要么全部提交成功,要么全部失敗回滾。
事務(wù)的一致性
一致性是指事務(wù)將數(shù)據(jù)庫(kù)從一種一致性狀態(tài)轉(zhuǎn)換到另外一種一致性狀態(tài),在事務(wù)開(kāi)始之前和事務(wù)結(jié)束后數(shù)據(jù)庫(kù)中數(shù)據(jù)的完整性沒(méi)有被破壞。
事務(wù)的隔離性
隔離性要求一個(gè)事務(wù)對(duì)數(shù)據(jù)庫(kù)中數(shù)據(jù)的修改,在未提交完成之前對(duì)于其他事務(wù)是不可見(jiàn)的。
SQL標(biāo)準(zhǔn)中定義的四種各類(lèi)級(jí)別(隔離性由低到高)(并發(fā)性由高到低)
未提交讀(READ UNCOMMITED)
已提交讀(READ COMMITED)
可重復(fù)讀(REPEATABLE READ)
可串行化(SERIALIZABLE)
事務(wù)的持久性
一旦事務(wù)提交,則其所做的修改就會(huì)永遠(yuǎn)保存到數(shù)據(jù)庫(kù)中,此時(shí)即使系統(tǒng)崩潰,已經(jīng)提交的修改數(shù)據(jù)也不會(huì)丟失。
什么是大事務(wù)?
運(yùn)行的時(shí)間比較長(zhǎng),操作的數(shù)據(jù)比較多的事務(wù)
風(fēng)險(xiǎn):
鎖定太多的數(shù)據(jù),造成大量的阻塞和鎖超時(shí)
回滾所需要的時(shí)間比較長(zhǎng)
執(zhí)行時(shí)間長(zhǎng),容易造成主從延遲
如何處理大事務(wù)?
-
避免一次處理太多的數(shù)據(jù)
-
移出不必要在事務(wù)中的select操作