成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

從云數據遷移服務看MySQL大表抽取模式的原理解析

瀏覽:5日期:2023-10-05 17:35:21

摘要:MySQL JDBC抽取到底應該采用什么樣的方式,且聽小編給你娓娓道來。

小編最近在云上的一個遷移項目中被MySQL抽取模式折磨的很慘。一開始爆內存被客戶懟,再后來遷移效率低下再被懟。MySQL JDBC抽取到底應該采用什么樣的方式,且聽小編給你娓娓道來。

1.1 Java-JDBC通信原理

JDBC與數據庫之間的通信是通過socket完,大致流程如下圖所示。Mysql Server ->內核Socket Buffer -> 客戶端Socket Buffer ->JDBC所在的JVM

從云數據遷移服務看MySQL大表抽取模式的原理解析

1.2 JDBC讀取數據的三種模式1.2.1 方式1:使用JDBC默認參數讀取數據

主要分為以下幾步:

1)Mysql Server通過OuputStream 向 Socket Server 本地Kennel Buffer 寫入數據,這里是一次內存拷貝。

2)當Socket Server 本地Kennel Buffer 有數據,就會通過TCP鏈路把數據傳輸到Socket Client 所在機器的Kennel Buffer。

3)JDBC 所在JVM利用InputSream讀取本地Kennel Buffer 數據到JVM內存,沒有數據時,則讀取被阻塞。

接下來就是不斷重復1,2,3的過程。 問題 是,Socket Client 端的JVM在默認模式下讀取Kennel Buffer是沒有考慮本機內存大小的,有多少讀多少。如果數據太大,就會造成FULL GC,緊接著內存溢出。

參考 JDBC API docs,默認模式 Java demo 代碼如下

從云數據遷移服務看MySQL大表抽取模式的原理解析

1.2.2 方式2:游標查詢

為了解決方式1爆內存的問題,JDBC提供了一個游標參數,在建立jdbc連接時加上useCursorFetch=true。設置游標后,JDBC 每次會告訴Server端每次抽取的數據量,避免爆內存。通信過程如下圖所示。

從云數據遷移服務看MySQL大表抽取模式的原理解析

​ 方式2游標查詢雖然解決了內存溢出的問題,方式2極大的依賴網絡質量。當網絡時延增大,假設每次通信增加10ms,10萬次通信就會多出1000s。這里僅僅是每次發請求的RT,TCP每次發送報文,都要求反饋ACK保證數據可靠性。client每取100行(請求行數可配置),就會有多次通信,進一步放大時延增加導致的效率問題。此外,游標查詢下,Mysql無法預知查詢的結束時延,為了應對自身的DML操作會在本地建立一個臨時空間存放要抽取的數據。因此,游標查詢時會有以下幾個現象發生

a. IOPS飆升,Mysql將數據寫入到臨時空間,數據傳輸時從臨時空間讀取數據,這都會引發大量IO操作。

b. 磁盤空間飆升,臨時空間生命周期存在于整個JDBC讀取階段,直到客戶端發起Result.close()時才會被Mysql回收。

c. CPU和內存有一定比例上升。

有關游標查詢的原理可參考博客MySQL JDBC StreamResult通信原理淺析以及JDBC源碼,本文不在贅述。

參考 JDBC API docs,游標模式 Java demo 代碼如下

從云數據遷移服務看MySQL大表抽取模式的原理解析

1.2.3 方式3: Stream讀取數據

方式1會導致JVM內存溢出,方式2雖然不會FULL GC但是通信效率較低,而且也會導致Mysql服務端IOPS飆升,消耗磁盤空間等問題。因此,我們介紹Stream讀取數據 ,流式需要在讀取Result前設置

從云數據遷移服務看MySQL大表抽取模式的原理解析

方式3在通信前不會做任何Server-Cient的交互操作,避免通信效率低下。服務端準備好數據寫入Server的Kennel Buffer中,這些數據通過TCP鏈路傳輸到Client的Kennel Buffer中,緊接著client端inputStream.read()方法被喚醒去讀取數據,與方式1不同,client每次只會讀取一個package大小的數據,如果一個package不滿一行則會再讀取一個package。當client消費數據的速度不及數據傳輸速率時,client端kennel區的數據就會被堆滿,緊接著Server端的kennel數據也會堆滿進而阻塞了OuputStream。這樣,JDBC在Stream模式下就像一個水管連接兩個蓄水池,Client和Server達到一個平衡。

​對于JDBC客戶端,由于每次都是從kennel讀取數據,效率會比方式2高很多,每次讀取一小部分數據也不會導致JVM內存溢出。對于服務端,Mysql每次都是往kennel寫數據,無需建立臨時空間,不涉及IO讀取,服務端壓力也變小了。當然,方式3也有自己的問題,例如Stream流式時無法cancel,cancel不阻塞等等。

參考 JDBC API docs,網上很多教程需要設置useCursorFetch=trueResultSet.FETCH_REVERSE等,其實小編研究完JDBC驅動源碼后發現,只需要設fetchSize=Integer. MIN_VALUE,其他配置均和默認配置保持一致即可。游標模式 Java demo 代碼如下

從云數據遷移服務看MySQL大表抽取模式的原理解析

1.3 云數據遷移服務在三種模式下的調優

云數據遷移服務(Cloud Data Migration, CDM)是華為云上一個遷移工具,詳見 CDM官網 ,小編則通過CDM介紹如何切換三種模式抽取數據。CDM默認使用的是方式3,流式抽取數據,如果需要切換方式1,方式2需額外配置。

1.3.1 配置方式1:默認讀取

新建Mysql連接器,建立方法詳見官網,在高級屬性中增加useCursorFetch=false和adopt.stream=false

從云數據遷移服務看MySQL大表抽取模式的原理解析

1.3.2 配置方式2:游標查詢

編輯Mysql連接器,在高級屬性中增加useCursorFetch=true和adopt.stream=false。游標查詢的大小可通過界面上的Fetch Size調整,默認1000。

從云數據遷移服務看MySQL大表抽取模式的原理解析

1.3.3 配置方式3:流式

CDM默認走的流式,無需額外配置。注意Stream模式下,界面上的 Fetch Size 是不起作用的,原因參考上一節。

1.3.4 性能對比

新建Mysql2Hive的CDM遷移作業,源表101個字段,100萬行數據,配置如下

從云數據遷移服務看MySQL大表抽取模式的原理解析

從云數據遷移服務看MySQL大表抽取模式的原理解析

方式1:寫入100萬行數據耗時1m22s

從云數據遷移服務看MySQL大表抽取模式的原理解析

方式2:同樣寫入100萬行,調整fetchSzie分別為1,10,100,100,最低耗時2m1s

從云數據遷移服務看MySQL大表抽取模式的原理解析

方式3:同樣寫入100萬行,耗時1m5s

從云數據遷移服務看MySQL大表抽取模式的原理解析

小編還測試了100萬的小表,明顯方式1和方式3的速率要遠遠高于方式2,另外小編還測試了1000萬的大表,方式1爆內存,方式2正常遷移但耗時20分鐘以上,而方式3仍然可以在15分鐘內跑完。

到此這篇關于從云數據遷移服務看MySQL大表抽取模式的原理解析的文章就介紹到這了,更多相關MySQL大表抽取內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: MySQL 數據庫
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
首页国产欧美久久| 欧美在线看片a免费观看| 美女精品国产| 亚洲乱码中文字幕综合| 午夜精品一区二区三区四区| 欧美电视剧免费全集观看| 麻豆91小视频| 久久亚洲图片| 一区二区三区视频在线观看| 欧美视频导航| 中文字幕av一区 二区| 99国产精品99久久久久久| 日韩欧美久久久| 成人一区二区三区视频| 日韩欧美综合一区| 国产不卡视频在线播放| 91精品久久久久久蜜臀| 国产精品99久久久久久有的能看 | 欧美一级电影网站| 加勒比av一区二区| 777亚洲妇女| 成人小视频在线| 日韩你懂的在线播放| 成人99免费视频| 国产婷婷一区二区| 亚洲欧美一级二级三级| 国产精品国产三级国产普通话99 | 日韩欧美卡一卡二| av一区二区三区| 中文字幕乱码久久午夜不卡| 国产一区免费视频| 中文字幕一区二区三| 国产日韩欧美二区| 天天色图综合网| 欧美精品久久久久久久多人混战| 岛国精品在线播放| 国产免费观看久久| 亚洲欧洲精品一区二区三区波多野1战4| 亚洲精品伦理在线| 久久亚洲色图| 国产一区二区三区久久久| 日韩午夜激情av| 91麻豆免费看片| 亚洲同性同志一二三专区| 午夜亚洲一区| 精品夜夜嗨av一区二区三区| 欧美精品丝袜中出| eeuss鲁片一区二区三区| 国产精品日韩成人| 欧美一级专区| 国产在线视频精品一区| 亚洲精品在线免费观看视频| 欧美日韩精品一区| 亚洲午夜免费福利视频| 91福利视频久久久久| 国产精品自拍在线| 欧美国产一区在线| 国产欧美一区二区三区国产幕精品| 日韩在线观看一区二区| 在线综合视频播放| 欧美日韩精品不卡| 亚洲无人区一区| 51午夜精品国产| 欧美啪啪一区| 亚洲成a人片在线观看中文| 精品视频一区二区不卡| a级高清视频欧美日韩| 亚洲色图在线看| 在线中文字幕一区二区| 国产麻豆视频一区| 国产亚洲欧洲一区高清在线观看| 亚洲精品影院在线观看| 伦理电影国产精品| 久久久久久电影| 亚洲免费在线| 国产成人精品免费| 国产精品第五页| 欧美亚洲日本国产| 欧美激情日韩| 日韩和欧美一区二区三区| 精品欧美乱码久久久久久 | 奇米精品一区二区三区在线观看| 日韩欧美成人激情| 亚洲深夜av| 国产 欧美在线| 亚洲女人****多毛耸耸8| 欧美日韩国产中文| 国精品一区二区三区| 男女男精品网站| 久久精品视频一区| 一本到不卡免费一区二区| 波多野结衣亚洲| 午夜精品国产更新| 国产日韩av一区| 欧美午夜一区二区三区| 激情视频一区二区| 精品一区二区三区免费播放| 自拍偷在线精品自拍偷无码专区 | 日韩欧美一级二级| 在线亚洲自拍| 成人一区在线看| 亚洲狠狠爱一区二区三区| 精品久久久久一区| 免费在线成人av| 91小视频在线免费看| 午夜精品在线看| 久久精品一区二区三区不卡牛牛| 美日韩精品免费| 91麻豆精东视频| 久久国产精品第一页| 亚洲三级在线播放| 欧美一个色资源| 亚洲女同在线| 欧美一区影院| 国产成人啪午夜精品网站男同| 亚洲成在线观看| 国产目拍亚洲精品99久久精品| 欧美精品免费视频| 久久青草久久| 亚洲小说欧美另类社区| 粉嫩av亚洲一区二区图片| 午夜伦欧美伦电影理论片| 国产欧美一区二区精品秋霞影院| 欧美区在线观看| 久久久久国产精品一区三寸| 在线成人av| 91在线观看污| 国产一区福利在线| 日本美女视频一区二区| 亚洲卡通动漫在线| 久久久www成人免费无遮挡大片| 欧洲视频一区二区| 国产欧美一级| 欧美日韩一区二区三区在线视频 | 国产精品欧美精品| 欧美成人一区二区| 欧美丝袜丝交足nylons| 日韩亚洲国产欧美| 欧美日韩99| av电影在线观看完整版一区二区| 久热成人在线视频| 亚洲电影一区二区| 亚洲欧美日韩中文播放| 日本一区二区三区高清不卡| 欧美成人vps| 67194成人在线观看| 欧美性大战xxxxx久久久| 亚洲综合社区| 亚洲精品日韩久久| 国产精品s色| 91香蕉视频在线| 成人精品一区二区三区中文字幕| 免费在线观看视频一区| 亚洲一区影音先锋| 国产精品电影一区二区三区| 国产视频亚洲色图| 日韩欧美成人一区二区| 欧美丰满少妇xxxxx高潮对白| 色悠悠亚洲一区二区| 亚欧美中日韩视频| 一本色道久久综合| 亚洲电影av| 影音先锋日韩资源| 亚洲国产精品一区制服丝袜 | 国产精品超碰97尤物18| 久久精品免视看| 亚洲精品一线二线三线| 日韩三级在线免费观看| 91精品免费在线观看| 欧美高清www午色夜在线视频| 在线视频你懂得一区二区三区| 久久久久久久久久码影片| 久久精品在线| 久久一区中文字幕| 色屁屁一区二区| 色婷婷国产精品| 91福利视频久久久久| 在线视频欧美区| 欧美无砖专区一中文字| 色偷偷成人一区二区三区91| 亚洲一区二区三区四区五区午夜| 一区二区精品在线观看| 在线午夜精品| 国产精品试看| 麻豆91精品| 久久精品九九| 久久久久国产精品一区二区| 色婷婷亚洲婷婷| 欧美在线观看你懂的| 一本久道久久综合中文字幕| 欧美系列亚洲系列| 欧美一区二区在线视频| 欧美www视频| 久久精品一区二区三区不卡| 日本一区二区三区视频视频| 成人欧美一区二区三区| 尤物在线观看一区| 天天综合日日夜夜精品| 久久国产三级精品| 成人高清视频在线|