2006년 10월 12일 목요일

테이블 최대값 키우기

MySQL 에서 테이블을 만들다 보면 4 G 이상의 크기가 되면 (ERROR 1114 (HY000): The table 'TBSOJM00' is full ? ) 이런 류의 에러를 발생하게 됩니다. 이것은 테이블의 크기가 기본적으로 4GB 로 되어 있기 때문에 발생하는 오류입니다. 이것을 해결하기 위한 글입니다.

 

----

Mysql을 처음 사용하는 초보로써 마땅히 해결방법을 찾지 못하다가 도움을 주신분들을 통해 Menual을 찾아 그 문제를 해결하였습니다.

저 같이 초보되신 분들이 같은 문제로 고민할것 같아 정리해 보았습니다.

 

Error Code:

ERROR 1114 (HY000): The table 'TBSOJM00' is full

 

정리:

tbsojm00이라는 Table이 4GB로 제한된 Size에 때문에 table에 full이 난 상황이며, 이에 대한 해결방법입니다.

 

먼저, 해당Table에 대한 정보를 조회합니다.

mysql>환경에서 입력해야 합니다.

 

[Syntax]

 show table status from DataBase명 like 'Table명';

[예제]

DataBase명- korea, table명-seoul일 경우

show table status from korea like 'seoul';

 

조회된 결과에서

max_rows Column과 avg_row_length Column값을 변경하면 됩니다.

[Syntax]

alter table table명 max_rows=레코드수 avg_row_length=원하는테이블용량

[예제]

레코드수-1억건, 원하는테이블용량-60GB일 경우

alter table seoul max_rows=100000000 avg_row_length=60240000000;

 

[도움이 된 싸이트]

http://www.mysql.com/doc/en/Full_table.html

 

테스트 결과 현재 6GB를 넘겼습니다.

이 글에 대한 댓글이 총 3건 있습니다.

참고로 Windows 계열에서 FAT32 로 포맷팅되어 있는 경우 파일의 최대 크기가 filesystem 자체에서 4GB 로 한정되게 되어 있습니다. 그러므로 이런 경우는 파일 크기를 늘일 방법이 없습니다. filesystem 을 NTFS 로 변경하셔야 합니다.

정재익(advance)님이 2004-02-03 15:29:30에 작성한 댓글입니다.

게시판에서 "테이블최대 크기를 4 G 이상으로 늘이는 방법" 에 대해 2가지 의견이 있어, 그 의견중 어떤 것이 정확한 것인지 문의합니다.

 

<사용자가 원하는 테이블 조건>

   1. 레코드 수(MAX_ROWS) : 1억개의 튜플(레코드),

   2. 테이블의 크기 : 100G 라고 가정했을때,

다음 1)과 2) 중 어느 것이 정확한 건지 아시는 분 있으면 꼭 답변 부탁드립니다

(편의상 1KB = 1000Byte 으로 계산).

 

1) 테이블 크기= max_rows * avg_row_length

 

    100,000,000,000 Byte = 100,000,000 레코드 * avg_row_length

  => avg_row_length = 1000 Byte , max_rows = 100,000,000 레코드

 

2) avg_row_length : 원하는 데이블 용량,

    max_rows : 레코드 수

 

  => avg_row_length = 100 GB = 100,000,000,000 Byte,

  =>  max_rows = 1억 튜플 = 100,000,000 레코드

 

위의 2 가지 중에서 어떤 것이 맞는 건지 꼬오옥 좀 답변 바랩니데이...

그럼 이만 욕보쇼이...

궁금이님이 2004-05-14 21:29:56에 작성한 댓글입니다.
이 댓글은 2004-05-24 20:13:39에 마지막으로 수정되었습니다. Edit 

MySQL Administrator 프로그램에서,

 

Catalogs 메뉴를 클릭하고 좌측의 테이블 목록에서 해당 테이블을 선택하세요.

 

하단의 Details>> 를 누른후 Row Status를 보시면 현재 테이블의 정보가 보입니다.

 

즉, Avg row length * Rows가 테이블의 용량이 되는 것입니다.

만약 1MB의 이미지 데이터가 100개 있는 경우에는

avg row length = 1 * 1024 * 1024

rows = 100

이렇게 하시면 됩니다.

alter table seoul max_rows=100000000 avg_row_length=60240000000;

초기갑   4294967295

 

mysql> use chit_mail
Database changed
mysql> alter table aid Max_data_length=60240000000;
ERROR 1064: 'SQL 구문에 오류가 있습니다.' 에러 같읍니다. ('Max_data_length=60240000000' 명령어 라인 1)
mysql> alter table  max_rows=100000000 avg_row_length=60240000000;
Query OK, 0 rows affected (0.09 sec)
레코드: 0개  중복: 0개  경고: 0개

mysql> show table status from
+------+--------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+---------------------------------------------+---------+
| Name | Type   | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time         | Update_time         | Check_time | Create_options                              | Comment |
+------+--------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+---------------------------------------------+---------+
| aid  | MyISAM | Dynamic    |    0 |              0 |           0 | 281474976710655 |         1024 |         0 |              1 | 2006-09-27 18:00:20 | 2006-09-27 18:00:20 | NULL       | max_rows=100000000 avg_row_length=110457856 |         |
+------+--------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+---------------------------------------------+---------+
1 row in set (0.04 sec)

mysql>


출처 : http://blog.naver.com/mjaj23/150009179380

댓글 없음:

댓글 쓰기