MySQL/MariaDB ROW Size Limit
· Version : MySQL 5.7
SQL Server에서 사용하던 일부 데이터를 MySQL 서버로 마이그레이션 작업 진행중, 컬럼수가 많은 (또는 컬럼의 길이가 큰 테이블) 테이블이 MySQL에서는 아래와 같은 오류와 함께 테이블이 생성되지 않는 문제가 발생하였다.
Error Code: 1118. Row size too large (> 1982). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline. |
해당 원인을 찾아본 결과, SQL Server의 경우 한 페이지의 크기가 8K로 고정이 되어있고, Row의 최대 사이즈는 8K 이다. 하지만 MySQL의 경우 InnoDB를 사용할 경우 페이지 사이즈를 사용자가 설정 할 수 있으며, 페이지에서 사용할 수 있는 최대 ROW크기는 페이지 크기의 약 절반보다 약간 작다. 예를들어 MySQL의 기본 Page 크기는 16K 인데, 최대 행 크기는 8K 보다 약간 작다.
· Limits on InnoDB Tables : https://dev.mysql.com/doc/refman/8.0/en/innodb-restrictions.html
· Limits on Table Column Count and Row Size : https://dev.mysql.com/doc/refman/5.7/en/column-count-limit.html
또한 BLOB이나 TEXT의 경우 LOB 영역을 사용한다고 하더라도, 9~12바이트의 포인터 값을 가지고 있다.
최근 SSD의 보급으로 SSD 최적화된 아키텍처를 제공하기 위해 일부 서비스에서는 페이지의 크기로 4K를 할당하는 경우가 있다. 이 경우 한 로우에 저장할 수 있는 데이터의 크기가 작아지므로 미리 데이터를 설계할때 주의가 필요하다.
[참고자료]
· Limits on InnoDB Tables : https://dev.mysql.com/doc/refman/8.0/en/innodb-restrictions.html
· Limits on Table Column Count and Row Size : https://dev.mysql.com/doc/refman/5.7/en/column-count-limit.html
2019-07-19 / 강성욱 / http://sungwookkang.com
MySQL, MySQL column limit, MySQL row size, MySQL Innodb, page size, Row size limit, MariaDB
'MySQL, MariaDB' 카테고리의 다른 글
MySQL /MariaDB 통계 정보 (0) | 2019.09.12 |
---|---|
MySQL/MariaDB 파일 읽기/쓰기시 발생할 수 있는 secure-file-priv 오류 (0) | 2019.07.24 |
MySQL/MariaDB sql_mode 설정 변경으로 NULL 데이터 처리하기 (0) | 2019.07.06 |
MySQL/MariaDB Timezone 설정 및 확인 (0) | 2019.06.13 |
MySQL/MariaDB InnoDB(Storage) row lock 모니터링 (0) | 2019.03.24 |