技術(shù)小能手2017-11-27 14:01:03瀏覽128評論0發(fā)表于:數(shù)據(jù)和云
架構(gòu)服務(wù)器mysqlOracleSQL日志線程高可用數(shù)據(jù)庫互聯(lián)網(wǎng)查詢優(yōu)化磁盤傳統(tǒng)企業(yè)存儲
摘要:身處數(shù)據(jù)驅(qū)動快速變革的時代谢澈,數(shù)據(jù)庫系統(tǒng)的選型和架構(gòu)設(shè)計對于整個IT基礎(chǔ)架構(gòu),甚至企業(yè)的發(fā)展都起到至關(guān)重要的作用。那么今天,如果您的企業(yè)需要搭建一套新的應(yīng)用系統(tǒng),你會選擇什么數(shù)據(jù)庫類型贷盲?如果當(dāng)前的系統(tǒng)不能滿足業(yè)務(wù)需求氧骤,面臨系統(tǒng)遷移莱坎,你又會如何選擇? 在2017年初檐什,我們分享過一份國外的報告“開發(fā)人員是如何使用數(shù)據(jù)庫的?”碴卧,并且進(jìn)行了一次調(diào)查『中國數(shù)據(jù)庫愛好者的選擇和背離』,其中的一些數(shù)據(jù)展示了用戶對于數(shù)據(jù)庫的選擇乃正,非常具有參考價值螟深,鏈接可以直接參考分析報告。
身處數(shù)據(jù)驅(qū)動快速變革的時代烫葬,數(shù)據(jù)庫系統(tǒng)的選型和架構(gòu)設(shè)計對于整個IT基礎(chǔ)架構(gòu)界弧,甚至企業(yè)的發(fā)展都起到至關(guān)重要的作用。那么今天搭综,如果您的企業(yè)需要搭建一套新的應(yīng)用系統(tǒng)垢箕,你會選擇什么數(shù)據(jù)庫類型?如果當(dāng)前的系統(tǒng)不能滿足業(yè)務(wù)需求兑巾,面臨系統(tǒng)遷移条获,你又會如何選擇?
在2017年初蒋歌,我們分享過一份國外的報告“開發(fā)人員是如何使用數(shù)據(jù)庫的”帅掘,并且進(jìn)行了一次調(diào)查『中國數(shù)據(jù)庫愛好者的選擇和背離』,其中的一些數(shù)據(jù)展示了用戶對于數(shù)據(jù)庫的選擇堂油,非常具有參考價值修档,鏈接可以直接參考分析報告。
隨著互聯(lián)網(wǎng)+時代的到來府框,企業(yè)的業(yè)務(wù)發(fā)展對IT架構(gòu)提出了更高的要求吱窝,傳統(tǒng)的架構(gòu)往往運維復(fù)雜、成本高、不易擴(kuò)展院峡,在很大程度上制約了企業(yè)的快速發(fā)展兴使。隨著領(lǐng)先互聯(lián)網(wǎng)企業(yè)的開源架構(gòu)嘗試和探索,人們開始逐漸接受并嘗試『非IOE』架構(gòu)和組件照激,尤其是一些勇于創(chuàng)新的傳統(tǒng)行業(yè)企業(yè)发魄,如金融、保險俩垃、證券等欠母,他們正在快速跟上極速變革的技術(shù)新時代。
而在數(shù)據(jù)庫領(lǐng)域加速這一過程的吆寨,便是以MySQL為代表的開源數(shù)據(jù)庫的應(yīng)用赏淌。MySQL在近幾年發(fā)展迅速,以其體積小啄清、速度快六水、成本低,尤其是開放源碼等優(yōu)勢受到廣大用戶的喜愛辣卒。
同時掷贾,在 DB-Engines 的排名上,Oracle 和 MySQL 兩個產(chǎn)品長期霸占了前兩名的位置荣茫。但根據(jù)近幾年的增長趨勢想帅,MySQL 在這個榜單上超越Oracle數(shù)據(jù)庫是遲早的事,而且這一時點可能很快到來啡莉。
近期港准,云和恩墨為某證券公司進(jìn)行了從DB2到MySQL數(shù)據(jù)庫系統(tǒng)的遷移論證、驗證咧欣,對兩類數(shù)據(jù)庫展開全方位多角度的對比分析浅缸,并根據(jù)用戶的業(yè)務(wù)現(xiàn)狀進(jìn)行了相關(guān)架構(gòu)、性能魄咕、備份恢復(fù)及高可用驗證衩椒。
在以下的系列文章中,我們將把來自于實踐的分析哮兰、論證毛萌、驗證數(shù)據(jù)分享給大家,從商用到開源喝滞,從DB2到MySQL阁将,從傳統(tǒng)業(yè)務(wù)到互聯(lián)網(wǎng)架構(gòu),一切正在發(fā)生囤躁。
為什么是MySQL不是DB2冀痕?
我們知道,IT架構(gòu)通常由業(yè)務(wù)架構(gòu)狸演、數(shù)據(jù)架構(gòu)言蛇、IT基礎(chǔ)架構(gòu)和應(yīng)用架構(gòu)構(gòu)成,而數(shù)據(jù)架構(gòu)則是整個IT架構(gòu)的中心宵距,企業(yè)最核心的資產(chǎn)就是數(shù)據(jù)腊尚。
很多傳統(tǒng)的企業(yè)比如金融證券等行業(yè)的IT軟硬件架構(gòu)都是IBM系列產(chǎn)品,比如IBM小型機(jī)/DB2數(shù)據(jù)庫/DS8000高端存儲等產(chǎn)品满哪,這種IT架構(gòu)被業(yè)界稱為“IOE”架構(gòu)婿斥,其特點是基于向上擴(kuò)展(Scale Up)技術(shù)的高端設(shè)備以及圍繞它們開發(fā)的專有硬件、大型商業(yè)數(shù)據(jù)庫和中間件組合哨鸭。
有人說民宿,DB2在金融證券保險行業(yè)有絕對不可替代的優(yōu)勢!
的確像鸡,DB2擁有悠久的歷史并且被很多人認(rèn)為是最早使用SQL的數(shù)據(jù)庫產(chǎn)品活鹰。主要應(yīng)用于大型應(yīng)用系統(tǒng),具有較好的可伸縮性只估,可支持從大型機(jī)到單用戶環(huán)境志群,應(yīng)用于所有常見的服務(wù)器操作系統(tǒng)平臺下。然而隨著時代的進(jìn)步蛔钙,開源產(chǎn)品和技術(shù)也已經(jīng)被證明具備支撐企業(yè)核心業(yè)務(wù)的能力锌云。
時代導(dǎo)向
在移動互聯(lián)網(wǎng)時代,各組織都在試圖構(gòu)建面向互聯(lián)網(wǎng)+的安全可控的技術(shù)架構(gòu)吁脱,在互聯(lián)網(wǎng)轉(zhuǎn)型升級壓力下桑涎,需要對IT系統(tǒng)重構(gòu)、而數(shù)據(jù)架構(gòu)是IT重構(gòu)的基礎(chǔ)和核心兼贡。因此上述傳統(tǒng)的IOE架構(gòu)正在逐漸演化為新一代以X86架構(gòu)石洗、開源應(yīng)用平臺、數(shù)據(jù)平臺等為技術(shù)基礎(chǔ)的新一代技術(shù)架構(gòu)紧显。
MySQL數(shù)據(jù)庫作為互聯(lián)網(wǎng)行業(yè)IT架構(gòu)的標(biāo)配讲衫,在長期的實踐中積累了大量的高可用、分布式架構(gòu)和災(zāi)備經(jīng)驗孵班。
因此涉兽,潮流的改變IT傳統(tǒng)架構(gòu)的演變。越來越多的DB2數(shù)據(jù)庫客戶轉(zhuǎn)向開源數(shù)據(jù)庫篙程,而 MySQL 作為當(dāng)前最火的開源數(shù)據(jù)庫枷畏,也常常是受到老DB2用戶關(guān)注最多的。
政策驅(qū)動
將DB2遷移到MySQL并不是一件容易的事虱饿,更不可能受單一的時代潮流影響而一蹴而就拥诡,對于傳統(tǒng)企業(yè)來說是一個逐步試水嘗試的過程触趴;數(shù)據(jù)是企業(yè)IT架構(gòu)的核心資產(chǎn),數(shù)據(jù)的任何丟失都是難以接受的渴肉。而受國家信息安全“自主可控”政策的號召冗懦,更加堅定了傳統(tǒng)企業(yè)作將DB2遷移到MySQL的嘗試。比如著名的銀監(jiān)會39號文要求各銀行業(yè)金融機(jī)構(gòu)對安全可控信息技術(shù)的應(yīng)用以不低于15%的比例逐年增加仇祭,直至2019年達(dá)到不低于75%的總體占比披蕉。
成本驅(qū)動
為了穩(wěn)定運行,很多客戶的 DB2 數(shù)據(jù)庫都是運行在全套 IBM 平臺中乌奇,成本高昂没讲;那么將DB2遷移到以X86架構(gòu)為主的MySQL數(shù)據(jù)庫當(dāng)中,數(shù)據(jù)庫運行的底層基礎(chǔ)架構(gòu)的要求大大降低礁苗,每年需要給原廠商的商業(yè) License 費用也會隨之減少爬凑。
隨著大數(shù)據(jù)和云時代的到來,企業(yè)的新業(yè)務(wù)和應(yīng)用變更非呈曰铮快贰谣,此時,以低成本的方式進(jìn)行系統(tǒng)擴(kuò)展和維護(hù)便是首要考慮的問題迁霎。
自主可控
由于互聯(lián)網(wǎng)行業(yè)的薪資和職業(yè)前景吸引了大量技術(shù)人才涌入互聯(lián)網(wǎng)公司從事開發(fā)運維等工作吱抚,使得原廠技術(shù)支持團(tuán)隊人才流失嚴(yán)重,而且服務(wù)體制僵化考廉,服務(wù)響應(yīng)流程慢等弊端秘豹,導(dǎo)致了服務(wù)質(zhì)量的下降,從而拉低了客戶滿意度昌粤。
將DB2數(shù)據(jù)庫遷移到MySQL既绕,那么可以很大程度降低對原廠服務(wù)的依賴性;轉(zhuǎn)而使用“最受歡迎的開源數(shù)據(jù)庫”——MySQL涮坐,首先一點是國內(nèi)MySQL從業(yè)人員多凄贩,而且深入代碼研究的MySQL DBA也不少,第三方服務(wù)運維水平也比較高袱讹,是現(xiàn)在傳統(tǒng)企業(yè)擁抱互聯(lián)網(wǎng)時備受青睞的選擇疲扎。
社區(qū)生態(tài)
整個行業(yè)DB2技術(shù)從業(yè)人員相對較少,圈子也在不斷縮小捷雕,存在人才斷崖風(fēng)險椒丧。一方面很多10多年前培養(yǎng)起來的經(jīng)驗豐富的DB2 DBA,或者去了大型甲方單位像大型銀行救巷、券商等IT建設(shè)投入相對比較大的企業(yè)壶熏,另一方面很多人才轉(zhuǎn)行到開源領(lǐng)域,或者轉(zhuǎn)行到大數(shù)據(jù)云計算等行業(yè)浦译,社區(qū)生態(tài)持續(xù)收縮棒假。
因此溯职,由于DB2數(shù)據(jù)庫技術(shù)人才儲備的嚴(yán)重不足以及業(yè)內(nèi)人才梯隊斷層,導(dǎo)致很多企業(yè)招人難帽哑,特別是很多中小型企業(yè)谜酒,社區(qū)和產(chǎn)品是相互促進(jìn)、相互推動祝拯,人才必然影響到產(chǎn)品的應(yīng)用甚带。
推薦使用MySQL的原因
在社區(qū)成熟度上她肯,MySQL數(shù)據(jù)庫在開源業(yè)界可以說“炙手可熱”佳头,便捷靈活,已經(jīng)廣泛被業(yè)內(nèi)看好晴氨,而且被Oracle公司接管后康嘉,其開發(fā)不再像以前典型的開源項目那樣開發(fā)人員散落世界各地,而是由Oracle公司專門組建了一個MySQL開發(fā)團(tuán)隊籽前,團(tuán)隊中有的小組在做集群化軟件亭珍,有的在做數(shù)據(jù)庫算法,有的在做備份功能枝哄,整體上提供了更加成熟的工程模式肄梨,未來提升的空間巨大。
從市場占有率看挠锥,MySQL排名今年連續(xù)攀升众羡,大有趕超數(shù)據(jù)庫龍頭“Oracle”的趨勢。從如數(shù)據(jù)庫下排名可以看出蓖租,市場還是比較青睞MySQL開源數(shù)據(jù)庫的粱侣。
全球數(shù)據(jù)庫熱度排名中,MySQL穩(wěn)居第二名直逼第一名蓖宦。參考鏈接:https://db-engines.com/en/ranking
在性能上齐婴,從我們與PG等其他數(shù)據(jù)庫的benchmark測試結(jié)果看,MySQL數(shù)據(jù)庫相對OLTP性能高稠茂、簡易又靈活柠偶、易用性好,比較適用于響應(yīng)時間靈敏的業(yè)務(wù)場景睬关。
要注意的事項
當(dāng)然嚣州,在考慮將DB2遷移到MySQL之前,也應(yīng)該充分認(rèn)識到MySQL在功能上的一些缺陷共螺。
比如在多表查詢方面该肴,MySQL只支持NL JOIN,不支持表的全外連接,也不支持HS JOIN和MG JOIN藐不;MySQL的存儲過程和觸發(fā)器的功能比較弱匀哄,甚至不建議在MySQL數(shù)據(jù)庫中對存儲過程的使用等秦效。
總之,從功能上涎嚼,MySQL適合拿來存放數(shù)據(jù)阱州、不適合做運算場景,實際中大部分互聯(lián)網(wǎng)公司也只是把它當(dāng)做數(shù)據(jù)存儲器來使用法梯,把需要的數(shù)據(jù)取出來然后在應(yīng)用程序中進(jìn)行運算苔货,這一點和DB2/Oracle那種商業(yè)數(shù)據(jù)庫盡量什么都放到數(shù)據(jù)庫里面的使用風(fēng)格很不一樣。
因此立哑,將DB2遷移到MySQL的話夜惭,需要認(rèn)清MySQL適用于OLTP場景,不建議在OLAP場景中運用铛绰;而且必須考慮將原先放在DB2中的某些業(yè)務(wù)邏輯在遷移到MySQL后诈茧,從數(shù)據(jù)庫中剝離出來放到應(yīng)用中去實現(xiàn);需要加強(qiáng)對應(yīng)用架構(gòu)的管控捂掰。
如何實現(xiàn)DB2遷移至MySQL的最佳實踐
基于上述的遷移驅(qū)動力敢会,你是不是也決定要把你的DB2系統(tǒng)遷移至MySQL了呢?那么如何才能規(guī)避遷移中的系列問題呢这嚣?這需要我們完全把握兩個數(shù)據(jù)庫的特點鸥昏,各自的優(yōu)勢和不足,在遷移中做合理規(guī)劃設(shè)計姐帚。
為此吏垮,本系列接下來會包含(但不限于)以下內(nèi)容,帶領(lǐng)大家全面認(rèn)識DB2遷移至MySQL的實踐卧土。
遷移準(zhǔn)備
1惫皱、DB2與MySQL數(shù)據(jù)庫對比分析。包含:數(shù)據(jù)庫架構(gòu)對比尤莺,數(shù)據(jù)類型對比旅敷,數(shù)據(jù)庫對象對比,SQL對比等颤霎。
2媳谁、測試。包含DB2與MySQL兼容性測試友酱,MySQL性能測試晴音,MySQL基于OLPT的測試等等。
遷移過程
1缔杉、應(yīng)用設(shè)計與改造锤躁。
2、MySQL高可用設(shè)計與部署
3或详、MySQL備份與恢復(fù)設(shè)計
4系羞、遷移中的重點問題和注意事項
遷移優(yōu)化
1郭计、性能測試
2、系統(tǒng)優(yōu)化
一場從DB2遷移至MySQL的數(shù)據(jù)庫風(fēng)暴即將襲來椒振,你準(zhǔn)備好了嗎昭伸?
MySQL vs DB2 ?Part 1: 體系架構(gòu)
我們來對比一下DB2與MySQL體系架構(gòu)有什么不同。
MySQL體系架構(gòu)
首先我們對圖中的組件進(jìn)行說明澎迎。
由連接池組件庐杨、管理服務(wù)和?工具組件、SQL接口組件夹供、查詢分析器組件灵份、優(yōu)化器組件、緩沖組件罩引、插件式存儲引擎各吨、物理?文件組成枝笨。MySQL是獨有的插件式體系結(jié)構(gòu),各個存儲引擎有自己的特點袁铐。
1、Connectors:指的是不同語言中與SQL的交互
2横浑、ManagementServeices & Utilities: 系統(tǒng)管理和控制工具
3剔桨、Connection Pool:連接池:管理緩沖用戶連接,線程處理等需要緩存的需求
4徙融、SQL Interface:SQL接口:接受用戶的SQL命令洒缀,并且返回用戶需要查詢的結(jié)果。比如select from就是調(diào)用SQL Interface
5欺冀、Parser: 解析器:SQL命令傳遞到解析器的時候會被解析器驗證和解析树绩。解析器是由Lex和YACC實現(xiàn)的,是一個很長的腳本隐轩。
主要功能
a . 將SQL語句分解成數(shù)據(jù)結(jié)構(gòu)饺饭,并將這個結(jié)構(gòu)傳遞到后續(xù)步驟,以后SQL語句的傳遞和處理就是基于這個結(jié)構(gòu)的
b.? 如果在分解構(gòu)成中遇到錯誤职车,那么就說明這個sql語句是不合理的瘫俊。
6、Optimizer: 查詢優(yōu)化器:SQL語句在查詢之前會使用查詢優(yōu)化器對查詢進(jìn)行優(yōu)化悴灵。他使用的是“選取-投影-聯(lián)接”策略進(jìn)行查詢扛芽。
舉例: selectuid,name from user where gender = 1;
這個select 查詢先根據(jù)where 語句進(jìn)行選取,而不是先將表全部查詢出來以后再進(jìn)行g(shù)ender過濾积瞒,這個select查詢先根據(jù)uid和name進(jìn)行屬性投影川尖,而不是將屬性全部取出以后再進(jìn)行過濾將這兩個查詢條件聯(lián)接起來生成最終查詢結(jié)果
7、Cache和Buffer: 查詢緩存茫孔。
如果查詢緩存有命中的查詢結(jié)果叮喳,查詢語句就可以直接去查詢緩存中取數(shù)據(jù)庐船。
這個緩存機(jī)制是由一系列小緩存組成的。比如表緩存嘲更,記錄緩存筐钟,key緩存氨距,權(quán)限緩存等
8霎桅、Engine :存儲引擎供炼。存儲引擎是MySql中具體的與文件打交道的子系統(tǒng)聚凹。也是Mysql最具有特色的一個地方莹痢。
Mysql的存儲引擎是插件式的蕴侧。它根據(jù)MySql AB公司提供的文件訪問層的一個抽象接口來定制一種文件訪問機(jī)制(這種訪問機(jī)制就叫存儲引擎)
現(xiàn)在有很多種存儲引擎府蛇,各個存儲引擎的優(yōu)勢各不一樣腺怯,最常用的MyISAM,InnoDB,BDB
默認(rèn)下MySql是使用MyISAM引擎毛嫉,它查詢速度快诽俯,有較好的索引優(yōu)化和數(shù)據(jù)壓縮技術(shù)。但是它不支持事務(wù)承粤。
InnoDB支持事務(wù)暴区,并且提供行級的鎖定,應(yīng)用也相當(dāng)廣泛辛臊。
Mysql也支持自己定制存儲引擎仙粱,甚至一個庫中不同的表使用不同的存儲引擎,這些都是允許的彻舰。
MySQL不是通過多進(jìn)程來完成其功能的伐割,MySQL只有一個進(jìn)程,進(jìn)程里有多個線程刃唤。
MySQL的體系架構(gòu)可劃分為以下三個邏輯層:
應(yīng)用層(Application Layer)
邏輯層(Logical Layer)
物理層(Physical Layer)
(1)應(yīng)用層(ApplicationLayer)
MySQL管理工具和應(yīng)用實例(Administrator&Utilities)
主要是連接到MySQL服務(wù)器檢索隔心、修改或增加數(shù)據(jù),有以下常見MySQL管理工具或?qū)嵱贸绦颉?/p>
本地查詢接口(Query Interface)
MySQL查詢接口主要指mysql腳本尚胞,使用mysql工具可以直接與MySQL服務(wù)器交互硬霍,是日常與MySQL服務(wù)器打交道最頻繁的工具。
客戶端應(yīng)用接口(Client API)
客戶端應(yīng)用接口主要是使用MySQL服務(wù)器對外公布的一些API調(diào)用訪問數(shù)據(jù)庫辐真,主要有CAPI须尚、PythonAPI以及JavaAPI。
(2)邏輯層(LogicalLayer)
MySQL邏輯層主要是包括以下幾個功能:
SQL引擎編譯SQL語句
將客戶端發(fā)送的SQL語句請求通過SQL引擎將SQL語句編譯成MySQL服務(wù)器內(nèi)部存取數(shù)據(jù)的指令的過程侍咱,編譯過程包括查詢解析(QueryParser)耐床、查詢檢查(Query check),查詢優(yōu)化(QueryOptimizer)以及查詢執(zhí)行(Query Excution)四個階段楔脯。
事務(wù)控制
事務(wù)(Transaction)是由一組SQL語句組成的邏輯處理單元撩轰,這個邏輯處理單元被原子性地處理,即要么其中的所有SQL語句全部執(zhí)行成功,要么全部失敗堪嫂,沒有第三種可能偎箫。那么MySQL是怎么保證事務(wù)被原子性地處理呢?這就是Transactionmanagement組件的功能了皆串。當(dāng)事務(wù)全部處理完畢時淹办,通過該組件完成決定commit還是rollback操作。
日志管理
數(shù)據(jù)庫需要將所有對數(shù)據(jù)變更的操作記錄下來恶复,以便當(dāng)數(shù)據(jù)庫發(fā)生crash時做Redo或Undo操作怜森,或者在分布式結(jié)構(gòu)中將操作通過從一個計算節(jié)點共享到其他計算節(jié)點,這些功能都是通過事務(wù)日志來控制的谤牡。
MySQL的事務(wù)日志管理系統(tǒng)是Recoverymanagement組件副硅,主要功能是持久化事務(wù)日志以及當(dāng)數(shù)據(jù)庫crash時將數(shù)據(jù)庫恢復(fù)到crash之前的一致性狀態(tài)。
存儲管理
數(shù)據(jù)庫中操作數(shù)據(jù)的主要場所是bufferpools翅萤,怎么控制數(shù)據(jù)頁和索引頁在bufferpool中的狀態(tài)就是通過storagemanagement完成的恐疲,該組件主要還是對Page層面的管理,包括將頁讀入內(nèi)存套么、頁的清理等培己。
值得一提的是,MySQL的邏輯層的上述幾個組件功能并不是MySQL特有的违诗,而是普遍適用于DB2/Oracle等常見關(guān)系型數(shù)據(jù)庫漱凝。
(3)物理層
數(shù)據(jù)庫的物理層主要關(guān)注的是數(shù)據(jù)怎么落地存儲以及被有效訪問的問題疮蹦,MySQL的物理層設(shè)計比較特殊诸迟,MySQL提供了多種存儲引擎供用戶選擇,而且這些存儲引擎是可插拔的(Pluggable),這是區(qū)別于業(yè)內(nèi)其他關(guān)系型數(shù)據(jù)庫的一個很重要的特征愕乎。MySQL數(shù)據(jù)庫為用戶提供了20多種可插拔的存儲引擎阵苇,比較常見的有如下列表所示幾種:
如上圖的存儲引擎中,從功能上比較接近商業(yè)數(shù)據(jù)庫功能的是InnoDB存儲引擎感论。從MySQL5.5開始绅项,InnoDB成為MySQL服務(wù)器的默認(rèn)存儲引擎;而早在SunMicroSystem被Oracle收購之前的2005年比肄,InnoDB存儲引擎就被Oracle收購快耿。
相比較于其他MySQL存儲引擎,MySQLInnoDB存儲引擎支持以下關(guān)鍵特性:
多版本并發(fā)控制(MVCC)
行級鎖(Row-level Locking)
外鍵支持(Foreign key support)
群集索引(Cluster Indexing)
可自由分配的bufferpools
在線數(shù)據(jù)庫備份
以下以InnoDB內(nèi)部是怎么和磁盤文件交互的詳細(xì)架構(gòu)示意圖芳绩。
如下圖是支持訪問MySQL數(shù)據(jù)庫服務(wù)器的API接口類型掀亥,可以通過編寫程序調(diào)用四種API接口訪問MySQL數(shù)據(jù)庫:
JDBC with Connector/J
通過Java程序訪問MySQL服務(wù)器
.NET with Connector/NET
使用.NET程序訪問MySQL服務(wù)器
ODBC with Connector/ODBC
Other APIs with C Library
使用基于C語言庫的編程語言,比如C/C++語言妥色、Python/PHP/Perl/Ruby語言等訪問MySQL數(shù)據(jù)庫搪花。總之,MYSQL支持通過當(dāng)前最流行的幾種主流語言訪問。
DB2體系架構(gòu)
DB2 for LUW進(jìn)程模型在DB2v9.5之前都是多進(jìn)程模型撮竿,DB2v9.5之后體系架構(gòu)變更為單進(jìn)程多線程模型吮便。
DB2是一個C/S結(jié)構(gòu),客戶端可以通過TCP/IP或IPC協(xié)議與服務(wù)器通信幢踏,每當(dāng)客戶端與服務(wù)器建立連接之后髓需,會在服務(wù)器端產(chǎn)生一個代理線程(db2agent)負(fù)責(zé)處理來自客戶端的所有請求,但是當(dāng)某一時刻并發(fā)請求很多或者連接斷開時房蝉,重復(fù)地產(chǎn)生與銷毀代理線程會產(chǎn)生很大的系統(tǒng)開銷授账,所以DB2服務(wù)器在啟動時創(chuàng)建一個常連接池來避免重復(fù)地創(chuàng)建/銷毀代理線程,但是如果某一個處理的請求非常大時惨驶,如果單個線程去處理效率比較低下白热,為了提高單個請求的處理能力,與客戶端通信的那個代理線程(db2agent)可以從線程池中額外召集幾個線程(db2agentp)來共同處理某個請求粗卜。
DB2的線程主要分為以下幾大類:
常連接池內(nèi)的線程db2agent和db2agentp:處理客戶端請求屋确,比如從bufferpool中取請求的數(shù)據(jù),或者將請求拆解放到預(yù)刃印(prefetch)隊列中供預(yù)取進(jìn)程(prefetcher)從磁盤取數(shù)據(jù)使用攻臀、或者將一些DML操作記錄到日志緩沖區(qū)(logbuffer)中等。
通信管理線程db2tcpcm和db2ipccm:負(fù)責(zé)對來自客戶端的連接請求進(jìn)行安全驗證和檢查纱昧,并與客戶端實現(xiàn)三次握手連接刨啸。
數(shù)據(jù)頁預(yù)取進(jìn)程db2pfchr/頁面清理進(jìn)程db2pclnr:當(dāng)請求的數(shù)據(jù)不在bufferpool中時,需要預(yù)取進(jìn)程db2pfchr通過異步讀數(shù)據(jù)的方式將將所需數(shù)據(jù)從磁盤讀入bufferpool中识脆。
DB2對數(shù)據(jù)的操縱主要在bufferpool中進(jìn)行设联,當(dāng)插入某些數(shù)據(jù)或?qū)δ承?shù)據(jù)做了變更后形成臟頁(dirtypage)后,需要使用線程db2pclnr根據(jù)一定的機(jī)制定期清理bufferpool中的臟頁灼捂,一方面持久化數(shù)據(jù)离例,另一方面給bufferpool騰出更多可置換空間供使用。
日志頁讀寫進(jìn)程db2loggr/db2loggw:DB2采用的是讀日志優(yōu)先(Read logahead)的策略來持久化數(shù)據(jù)悉稠,即在將insert/delete/update的數(shù)據(jù)寫入磁盤前宫蛆,必須先將對這些操作的日志從日志緩沖區(qū)持久化到磁盤當(dāng)中,這個操作由db2loggw線程完成的猛。
當(dāng)需要使用持久化到磁盤的日志恢復(fù)或撤銷某些操作時耀盗,需要從磁盤中將對應(yīng)的日志讀入到日志緩沖區(qū)中,此時有db2loggr線程完成卦尊。
全局死鎖檢測線程db2dlock:該線程主要是檢測系統(tǒng)死鎖防止因為死鎖造成的應(yīng)用不可用叛拷。
以下為部分常見DB2管理工具和實例:
該線程主要是檢測系統(tǒng)死鎖防止因為死鎖造成的應(yīng)用不可用。
以下為部分常見DB2管理工具和實例:
DB2實例命令
原文發(fā)布時間為:2017-11-27
本文作者:enmotech
本文來自云棲社區(qū)合作伙伴“數(shù)據(jù)和云”猫牡,了解相關(guān)信息可以關(guān)注“數(shù)據(jù)和云”微信公眾號
如果您發(fā)現(xiàn)本社區(qū)中有涉嫌抄襲的內(nèi)容胡诗,歡迎發(fā)送郵件至:yqgroup@service.aliyun.com 進(jìn)行舉報邓线,并提供相關(guān)證據(jù),一經(jīng)查實煌恢,本社區(qū)將立刻刪除涉嫌侵權(quán)內(nèi)容骇陈。