程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL數據庫單一表突破4G限制的實現方法(1)

MySQL數據庫單一表突破4G限制的實現方法(1)

編輯:MySQL綜合教程

導讀:在論壇發表回復時出現“The table is full”的提示,字面意義上是數據表已滿的意思,可見數據表內存是不足的,因為很少有開發者遭遇單一表超過4G的情況,下文中就為大家介紹實現MySQL數據庫單一表突破4G限制的方法。

根據經驗,The table is full提示往往出現在以下兩種情況:

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

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

我們認為MySQL在存取表的時候,存在一種定位分配規律。這個規律在默認的情況下,可以尋址4G以內的數據。超過這個大小,數據庫將不能對數據定位,因而也無法進行讀寫。經過實驗,這個限制是完全可以被突破的。

本例中,用戶的系統環境為雙Athlon處理器、SCSI硬盤72G、2G內存,用戶的帖子表數據尺寸為4294963640,接近4G(4G的實際字節數為4294967296)。

首先SSH登錄後,查看用戶的系統信息:

以下為引用的內容:
# 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系統,根據內核版本2.4.20-8smp,加上國內使用的常見系統,估計應該是redhat 9發行包。

# cat /etc/*release*

Red Hat Linux release 9 (Shrike)

這也證明了我們對系統版本的猜想。

然後看一下用的是什麼文件系統。因為該用戶並非高手,估計在裝系統的時候就是一路回車下來,redhat 9默認的應該是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文件系統的相關技術參數,EXT3是在EXT2基礎上演變而來。EXT2所支持最大單一文件長度是2G,這個是很蹩腳的一個限制。EXT3做的很大一個改善就是將這個限制放大到了2TB,由此稍松一口氣,起碼不是操作系統上的限制。


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved