數(shù)據(jù)庫畫像,怎么做?
點(diǎn)擊藍(lán)色“有關(guān)SQL”關(guān)注我喲
加個(gè)“星標(biāo)”,天天與10000人一起快樂成長(zhǎng)

圖 | L
2008年,阿里提出去[IOE]的口號(hào);
2014年,12306,去O上云;
2017年,聯(lián)通首次3省去O上云;
2019年,陸金所脫O;
這里的O是指 Oracle 數(shù)據(jù)庫。為什么脫[ O ],并不是本文重點(diǎn)。怎么脫才是!
大約2008年,那時(shí)我還在MES/ERP開發(fā)崗位上,做得熱火朝天。foxpro + sql server 2000 的編程玩得如魚得水。何止996,007我都愿意,單身有時(shí)間。
突然有一天,接到主管通知:
“ 大家準(zhǔn)備下,我們要換 Oracle 了”?
“啥子是 Oracle”?
“宇宙最強(qiáng)數(shù)據(jù)庫”
至今我還記得主管一臉憨笑。希望他也會(huì)記得我那張便秘的臉。
換就換咯,那怎么換呢,一張張表自己去建,自己去導(dǎo)數(shù)據(jù)么。后續(xù)我也不知道,誰拿錢誰做,反正我沒拿到。既然項(xiàng)目是遷移完了,那肯定是有人做了的。一個(gè)信息辦公室都你我大眼瞪小眼,別問了,誰都沒做,是外包公司干的。
切到Oracle之后,我也沒多想。反正不難吧。直到最近,看到這本書《Efficient Database Optimization -Architecture, Specification and SQL Skills》 又名《數(shù)據(jù)庫高效優(yōu)化》,我才想起來,異構(gòu)數(shù)據(jù)庫遷移,這事兒真沒想過,可能真不是原本我想的那么簡(jiǎn)單。
去 O,你想好了?
從2008年喊口號(hào)去IOE,到現(xiàn)在2021年了,13年過去了,你們的 Oracle 還活著嗎,如果要遷移,會(huì)做哪些工作呢?
評(píng)估遷移風(fēng)險(xiǎn)和工期 設(shè)計(jì)新架構(gòu) 邊設(shè)計(jì)邊測(cè)試邊上線
那這里面哪部分最重要呢?顯然沒第一步,往下都不能存在。如何有效評(píng)估風(fēng)險(xiǎn)和工期是難點(diǎn)。一定要遷移數(shù)據(jù)庫的話,數(shù)據(jù)庫畫像跑不了。
具體來說,數(shù)據(jù)庫畫像可以分為這三個(gè)部分:
數(shù)據(jù)庫物理結(jié)構(gòu) 運(yùn)行時(shí)統(tǒng)計(jì)信息 SQL 審核總結(jié)
干說,太抽象。我不想你們中途離場(chǎng),所以先放個(gè)圖,再解說。沒耐心的,看個(gè)大概就行。后面有代碼,直接上手?jǐn)]。
后臺(tái)回復(fù)“數(shù)據(jù)庫畫像”,拿Python代碼,自制畫像。該版權(quán)屬于PingCAP



說明:挑重點(diǎn)講,不廢話
數(shù)據(jù)庫物理結(jié)構(gòu):除了數(shù)據(jù)庫本身的存儲(chǔ)大小,尤其還要注意收集每日甚至每小時(shí)增量。增量統(tǒng)計(jì)信息,直接影響容量策略和備份策略
運(yùn)行時(shí)統(tǒng)計(jì)信息:都知道Oracle有強(qiáng)悍的RAC集群,如果新切換的數(shù)據(jù)庫不能支撐那么大的并發(fā),其實(shí)架構(gòu)是有很大必要調(diào)整的。比如分庫,分表,讀寫分離。
SQL審核總結(jié):這是預(yù)估工作量最難的地方。比如超長(zhǎng)的SQL數(shù)量,PL/SQL方言的SQL有多少,3個(gè)表以上Join的SQL有多少,等等,都將影響工作量的評(píng)估。
以下規(guī)則,來自于 PingCAP: https://github.com/bjbean/oracle-estimate-report 你有權(quán)自定義各類閾值。
規(guī)則說明?
·?*?大表判斷規(guī)則1_物理大小:?1000?M?
·?*?大表判斷規(guī)則2_記錄數(shù):?1000000?
·?*?SQL超長(zhǎng)標(biāo)準(zhǔn):?200?字符?
·?*?ANTI?SQL:?指包含關(guān)鍵字(not?in、not?exist)的語句?
·?*?Oracle?Syntax?SqL:?指包含關(guān)鍵字(rowid、rownum、decode、partition、rullup、cube、sampling、rank、percentile、ntitle、top、bottom、period、lead、lag的語句?
·?*?Join?3+?Table?SQL:?關(guān)聯(lián)3個(gè)及3個(gè)以上表的語句?
·?*?SubQuery?SQL:?包含子查詢的語句?
當(dāng)有一天,你的老板也向你提出,“哎,我們把Oracle換了吧,怎么樣?”我希望這篇文章,可以給你一些靈感。
往期精彩:
