3 개의 열 (int, mediumint, int)을 가진 거대한 InnoDB 테이블이 있습니다. innodb_file_per_table
설정에 있으며 첫 번째 두 개의 열테이블이 커지면서 InnoDB 행 크기가 기하 급수적으로 변경됩니까?
테이블 스키마가의 PRIMARY KEY
이 :
CREATE TABLE `big_table` (
`user_id` int(10) unsigned NOT NULL,
`another_id` mediumint(8) unsigned NOT NULL,
`timestamp` int(10) unsigned NOT NULL,
PRIMARY KEY (`user_id`,`another_id `)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
MySQL 버젼은
5.6.16는 현재 내가 150 다중 삽입하고있다 초당 행. 삭제 및 업데이트가 없습니다. 중요한 롤백이나 다른 트랜잭션 중단이 없으므로 낭비되는 공간 사용이 발생합니다.
MySQL은 해당 테이블에서 75,7GB의 계산 된 크기를 보여줍니다. 디스크
있는 .ibd 크기 : 136,679,784,448 바이트 (127.29 GIB)
카운트 된 행 : 2901937966 (행당 47.10 바이트)
이후 MySQL은 또한 75.7 GB의 계산 된 크기를 도시 이일 그 테이블에. 디스크
있는 .ibd 크기 : 144,263,086,080 바이트 (135.35 GIB)
카운트 된 행 : 테이블의
SHOW TABLE STATUS
실행 2,921,284,863 (행당 49.38 바이트)
보여준다 :
Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Collation
InnoDB | 10 | Compact | 2645215723 | 30 | 81287708672 | 0 | 0 | 6291456 | utf8_unicode_ci
내 질문은 다음과 같습니다.
- 왜 디스크 사용량이 행 수에 비해 불균형하게 증가합니까?
- 왜
Avg_row_length
과Data_length
은 완전히입니까?
누군가 나를 도울 수 있기를 바랍니다. 디스크 사용량이 더 이상 늘어나지 않기를 바랍니다. 나는 테이블이 작을수록 그것을 알지 못했다.
삽입 할 때'user_id' 값은 항상 이전 값보다 크거나 'user_id' 값이 때로 더 높거나 때로 낮습니다. –
하위 및 상위 user_id에 따라 다릅니다. 하지만 나는 한 번에 하나의 user_id 만 다중 삽입하고 있습니다 (예 : user_id 500의 경우 100 행, user_id 123의 경우 20 행, user_id 1000의 경우 500 행 ..) – Stefan