快捷搜索:  as  test  1111  test aNd 8=8  test++aNd+8=8  as++aNd+8=8  as aNd 8=8

ag娱乐馆app:MySQL数据库单一表突破4G限制的实现方法(1)4G限制



近日,一位Discuz!老用户的论坛在颁发还复时呈现“The table is full”的提示,字面意义上是数据表已满的意思。由于很少有开拓者蒙受单一表跨越4G的环境,是以同伙间的评论争论只能供给一些外围的信息。为办理此问题,我翻阅了很多资料,本文将以我这次问题的办理历程,先容问题发生的缘故原由及对策。

根据履历,The table is full提示每每呈现在以下两种环境:

1. 表中设置了MAX_ROWS值,简单的说,若MAX_ROWS设置为100,而法度榜样试图写入第101笔记录,会呈现此差错。

2. 表满。这种环境是本文评论争论的重点。

我们觉得MySQL在存取表的时刻,存在一种定位分配规律。这个规律在默认的环境下,可以寻址4G以内的数据。跨越这个大年夜小,数据库将不能对数据定位,因而也无法进行读写。颠末实验,这个限定是完全可以被冲破的。

本例中,用户的系统情况为双Athlon处置惩罚器、SCSI硬盘72G、2G内存,用户的帖子表数据尺ag娱乐馆app寸为4294963640,靠近4G(4G的实际字节数为4294967296)。

首先SSH登录后,查看用户的系统信息:

# uname -a

Linux zichen.com 2.4.2ag娱乐馆app0-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,ag娱乐馆app不过我们照样看一下:

# parted

GNU Parted 1.6.3

Copyright (C) 199ag娱乐馆app8, 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 booag娱乐馆appt

2 101.975 10103.378 primary linux-swap

证实确凿是这样子。随后我们翻阅了EXT3文件系统的相关技巧参数,EXT3是在EXT2根基上蜕变而来。EXT2所支持最大年夜单一文件长度是2G,这个是很蹩脚的一个限定。EXT3做的很大年夜一个改良便是将这个限定放大年夜到了2TB,由此稍松一口气,最少不是操作系统上的限定。

颠末同伙的劝导,懂得到单一文件大年夜小有如下几个身分:

1. 文件系统的限定(如刚存所说EXT3的2TB限定)

2. 某一法度榜样进程所能存取的第一文件最大年夜尺寸(例如apache在Linux EXT3下能存取的最大年夜尺寸为2G,诸如日志)

初步判断瓶颈就在上述此中第二项。随后找到myisamchk来显示一下表信息,证清楚明了瓶颈就在MySQL本身的存取上。

# myisamchk -dv cdb_posts

结果就不贴了,此中有一项Max datafile length的值正好便是4G。由此孕育发生了瓶颈。

后来翻阅了N多资料,进行了N多考试测验,也走了不少弯路,终极感觉照样官方文档对照靠得住。对照老的文档里写道这是因为tmp_table_size的值造成的,也有提到用BIG-TABLES这个参数。事实证实这些都是歧途。大年夜晚上切实着实实很累,这里只给出终极的办理规划吧,中心的就不罗嗦了。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

您可能还会对下面的文章感兴趣: