• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

    MySQL單一表突破4G限制的實現(xiàn)方法

    來源:懂視網(wǎng) 責(zé)編:小采 時間:2020-11-09 14:22:19
    文檔

    MySQL單一表突破4G限制的實現(xiàn)方法

    MySQL單一表突破4G限制的實現(xiàn)方法:很少有開發(fā)者遭遇單一表超過4G的情況,因此朋友間的討論只能提供一些外圍的信息。但隨著數(shù)據(jù)流的不斷總價,4G容量是早晚的事兒,本文將以此次問題的解決過程,介紹問題發(fā)生的原因及對策。 根據(jù)經(jīng)驗,The table is full提示往往出現(xiàn)在以下兩種情況: 1. 表
    推薦度:
    導(dǎo)讀MySQL單一表突破4G限制的實現(xiàn)方法:很少有開發(fā)者遭遇單一表超過4G的情況,因此朋友間的討論只能提供一些外圍的信息。但隨著數(shù)據(jù)流的不斷總價,4G容量是早晚的事兒,本文將以此次問題的解決過程,介紹問題發(fā)生的原因及對策。 根據(jù)經(jīng)驗,The table is full提示往往出現(xiàn)在以下兩種情況: 1. 表

    很少有開發(fā)者遭遇單一表超過4G的情況,因此朋友間的討論只能提供一些外圍的信息。但隨著數(shù)據(jù)流的不斷總價,4G容量是早晚的事兒,本文將以此次問題的解決過程,介紹問題發(fā)生的原因及對策。 根據(jù)經(jīng)驗,The table is full提示往往出現(xiàn)在以下兩種情況: 1. 表中設(shè)

    很少有開發(fā)者遭遇單一表超過4G的情況,因此朋友間的討論只能提供一些外圍的信息。但隨著數(shù)據(jù)流的不斷總價,4G容量是早晚的事兒,本文將以此次問題的解決過程,介紹問題發(fā)生的原因及對策。

    根據(jù)經(jīng)驗,The table is full提示往往出現(xiàn)在以下兩種情況:

    1. 表中設(shè)置了MAX_ROWS值,簡單的說,若MAX_ROWS設(shè)置為100,而程序試圖寫入第101條記錄,會出現(xiàn)此錯誤。

    2. 表滿。這種情況是本文討論的重點。

    我們認(rèn)為MySQL在存取表的時候,存在一種定位分配規(guī)律。這個規(guī)律在默認(rèn)的情況下,可以尋址4G以內(nèi)的數(shù)據(jù)。超過這個大小,數(shù)據(jù)庫將不能對數(shù)據(jù)定位,因而也無法進(jìn)行讀寫。經(jīng)過實驗,這個限制是完全可以被突破的。
    本例中,用戶的系統(tǒng)環(huán)境為雙Athlon處理器、SCSI硬盤72G、2G內(nèi)存,用戶的帖子表數(shù)據(jù)尺寸為4294963640,接近4G(4G的實際字節(jié)數(shù)為4294967296)。

    首先SSH登錄后,查看用戶的系統(tǒng)信息:

    # uname -a
    Linux zichen.com 2.4.20-8smp #1 SMP Thu Mar 13 16:43:01 EST 2003 i686 athlon i386 GNU/Linux

    證明是Linux系統(tǒng),根據(jù)內(nèi)核版本2.4.20-8smp,加上國內(nèi)使用的常見系統(tǒng),估計應(yīng)該是redhat 9發(fā)行包。

    # cat /etc/*release*
    Red Hat Linux release 9 (Shrike)

    這也證明了我們對系統(tǒng)版本的猜想。

    然后看一下用的是什么文件系統(tǒng)。因為該用戶并非高手,估計在裝系統(tǒng)的時候就是一路回車下來,redhat 9默認(rèn)的應(yīng)該是EXT3,不過我們還是看一下:

    # parted
    GNU Parted 1.6.3
    Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
    This program is free software, covered by the GNU General Public License.
    
    This program is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
     General Public License for more details.
    
    Using /dev/sda
    Information: The operating system thinks the geometry on /dev/sda is 8942/255/63. 
    Therefore, cylinder 1024 ends at 8032.499M.
    (parted) print 
    Disk geometry for /dev/sda: 0.000-70149.507 megabytes
    Disk label type: msdos
    Minor Start End Type Filesystem Flags
    1 0.031 101.975 primary ext3 boot
    2 101.975 10103.378 primary linux-swap
    

    證明確實是這樣子。隨后我們翻閱了EXT3文件系統(tǒng)的相關(guān)技術(shù)參數(shù),EXT3是在EXT2基礎(chǔ)上演變而來。EXT2所支持最大單一文件長度是2G,這個是很蹩腳的一個限制。EXT3做的很大一個改善就是將這個限制放大到了2TB,由此稍松一口氣,起碼不是操作系統(tǒng)上的限制。

    經(jīng)過朋友的開導(dǎo),了解到單一文件大小有如下幾個因素:

    1. 文件系統(tǒng)的限制(如剛存所說EXT3的2TB限制)

    2. 某一程序進(jìn)程所能存取的第一文件最大尺寸(例如apache在Linux EXT3下能存取的最大尺寸為2G,諸如日志)

    初步判斷瓶頸就在上述其中第二項。隨后找到myisamchk來顯示一下表信息,證明了瓶頸就在MySQL本身的存取上。

    # myisamchk -dv cdb_posts

    結(jié)果就不貼了,其中有一項Max datafile length的值恰好就是4G。由此產(chǎn)生了瓶頸。
    后來翻閱了N多資料,進(jìn)行了N多嘗試,也走了不少彎路,最終覺得還是官方文檔比較可靠。比較老的文檔里寫道這是由于tmp_table_size的值造成的,也有提到用BIG-TABLES這個參數(shù)。事實證明這些都是歧途。大晚上的確實很累,這里只給出最終的解決方案吧,中間的就不羅嗦了。

    進(jìn)到mysql客戶端。

    # mysql -uroot -p
    Enter password: ******
    Welcome to the MySQL monitor. Commands end with ; or \g.
    Your MySQL connection id is 59411 to server version: 4.0.18-standard

    Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

    mysql> use ******
    Database changed
    mysql> ALTER TABLE cdb_posts MAX_ROWS=1000000000 AVG_ROW_LENGTH=15000;

    因為這個表非常大,執(zhí)行時間在雙Athlon的專業(yè)服務(wù)器上竟然花了30分鐘!
    之后再通過myisamchk查看該表的信息:

    # myisamchk -dv cdb_posts
    MyISAM file: cdb_posts
    Record format: Packed
    Character set: latin1 (8)
    File-version: 1
    Creation time: 2004-08-30 22:19:48
    Recover time: 2004-08-30 22:42:47
    Status: open,changed
    Auto increment key: 1 Last value: 1063143
    Data records: 619904 Deleted blocks: 5
    Datafile parts: 619909 Deleted data: 323872
    Datafile pointer (bytes): 6 Keyfile pointer (bytes): 4
    Datafile length: 4295287332 Keyfile length: 40421376
    Max datafile length: 281474976710654 Max keyfile length: 4398046510079
    Recordlength: 149

    table description:
    Key Start Len Index Type Rec/key Root Blocksize
    1 1 4 unique unsigned long 1 4535296 1024
    2 5 2 multip. unsigned short 13776 12540928 1024
    3 111 4 multip. unsigned long 1 18854912 1024
    4 28 3 multip. uint24 18 24546304 1024
    5 7 3 multip. uint24 7 32827392 1024
    111 4 unsigned long 1
    6 7 3 multip. uint24 7 40418304 1024
    28 3 uint24

    令人振奮的事情發(fā)生了,該表的 Max datafile length: 281474976710654 Max keyfile length: 4398046510079,即最大數(shù)據(jù)尺寸(MYD文件)達(dá)到了2TB,最大索引尺寸(MYI)仍然為4G。

    由此默認(rèn)的4G限制被突破了。關(guān)于其中的原理,其實很簡單:假設(shè)你有一個日記本,上面有10頁紙可以寫東西,編排目錄只需要1個字節(jié)(因為0~9就夠了)。如果你把這本子又塞進(jìn)兩張紙,變成12頁,1個字節(jié)的目錄空間就無法尋址到后面的兩頁中,進(jìn)而產(chǎn)生了錯誤。上面那個ALTER語句中的數(shù)值都是我為保證成功,取的比較大的值(因為ALTER一次實在是太慢了,沒時間在那亂試驗),相當(dāng)于告訴數(shù)據(jù)庫,這個本子有1000000000頁,每頁平均有15000個字節(jié)。這樣數(shù)據(jù)庫便知道這是很大的一個本子,因此不遺余力的拿出了100頁(假設(shè)說)做目錄編排,這樣這個新的目錄就可以尋址到日記本的所有內(nèi)容了。錯誤消失。

    惟一的缺點就是,目錄占用的空間多了一些,但已經(jīng)微乎其微了,做了這種改變其實4G的文件尺寸大小只增大了1M多,非常令人振奮。

    聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    MySQL單一表突破4G限制的實現(xiàn)方法

    MySQL單一表突破4G限制的實現(xiàn)方法:很少有開發(fā)者遭遇單一表超過4G的情況,因此朋友間的討論只能提供一些外圍的信息。但隨著數(shù)據(jù)流的不斷總價,4G容量是早晚的事兒,本文將以此次問題的解決過程,介紹問題發(fā)生的原因及對策。 根據(jù)經(jīng)驗,The table is full提示往往出現(xiàn)在以下兩種情況: 1. 表
    推薦度:
    標(biāo)簽: 方法 4g 突破
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 国产精品无码免费专区午夜| 亚洲日韩精品一区二区三区| 久久国产精品国语对白| 国内精品久久久久伊人av| 精品无码国产污污污免费网站国产| 久久精品无码一区二区无码| 毛片a精品**国产| 87国产私拍福利精品视频| 精品亚洲aⅴ在线观看| 亚洲精品一级无码中文字幕| 国产精品理论片在线观看| 久久99国产精品99久久| 国产精品亚洲аv无码播放| 亚洲欧美精品AAAAAA片| 久久精品无码一区二区三区免费| 热re99久久精品国产99热| 99精品国产一区二区三区2021| 亚洲精品无码久久久久久| 久久夜色撩人精品国产| 国产精品国产AV片国产| 四虎国产精品免费久久久| 91精品国产福利在线导航| 国产精品亚洲а∨无码播放| 久久精品国产亚洲AV麻豆网站| 亚洲国产精品高清久久久| 最新国产精品拍自在线观看| 少妇亚洲免费精品| 精品国产污污免费网站入口| 91精品无码久久久久久五月天| 国产亚洲婷婷香蕉久久精品| 99久久这里只有精品| 精品久久久久久久无码| 久久精品人人做人人妻人人玩| 亚洲av无码乱码国产精品| 在线观看国产精品日韩av| 自拍偷在线精品自拍偷| 亚洲精品自产拍在线观看| 中文字幕精品亚洲无线码二区| 亚洲精品卡2卡3卡4卡5卡区| 亚洲欧洲成人精品香蕉网| 伊人久久精品无码av一区|