홈>
와 함께 꽤 큰 파일 (39mlm 행이있는 3.5G)을 가져 오려고합니다
set foreign_key_checks=0;
set sql_log_bin=0;
set unique_checks=0;
load data infile '/var/lib/mysql-files/2.csv' ignore
into table main_data fields terminated by ','
optionally enclosed by '"'
lines terminated by '\n'
ignore 1 rows (col, col2, col3);
이미 24 시간이 지났고
/var/lib/mysql/MyDB
의 데이터베이스 파일
내가 가져온 파일이 4G보다 작기 때문에 왜 11G로 성장했는지 모르겠습니다.
mysql 8.0입니다. 내가 구성에 추가 한 유일한 것은
innodb_buffer_pool_size = 22G
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
innodb_autoinc_lock_mode=2
이 데이터를 일괄 삽입하면 더 빠를 것이라고 생각합니다 ...
첫 번째 코멘트의 제안자로서 creat 테이블 구문이 있습니다. 이제 크기와 시간에 너무 많은 색인이 문제가 될 수 있다고 생각합니다.
CREATE TABLE `main_data` (
`file_name` tinyint(4) NOT NULL,
`line_number` int(11) NOT NULL,
`link` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`title` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`doc_type` varchar(45) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`meta_keywords` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`meta_description` text COLLATE utf8mb4_unicode_ci,
`language` varchar(5) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`done` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`file_name`,`line_number`),
UNIQUE KEY `link_UNIQUE` (`link`),
KEY `done_idx` (`done`),
KEY `lang_idx` (`language`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
첫 번째 세 열 (file_name, line_number, link) 만 가져오고 나머지는 null입니다.
- 답변 # 1
- 답변 # 2
추측 ... 당신은 하나의 고유 한 값을 갖는 2 개의 2 차 인덱스를 만들고 있습니다-
NULL
.DROP
done
의 색인 그리고language
,LOAD
를 그런 다음 re-ADD
색인.다른 두 인덱스는 ... 둘 다 고유하므로 각 행이 삽입 될 때 둘 다 확인해야합니다. 그러나 buffer_pool은 전체 데이터 세트 및 인덱스보다 훨씬 크기 때문에이 검사는 RAM (buffer_pool)에서 완전히 수행되어야합니다. 즉, "하루"가 아니라 "분"이 기대해야한다는 데 동의합니다.
이것은
LOAD
입니까 일회성 작업? 테이블에 추가 하시겠습니까? 기타 (여기에서 발생할 수있는 다음 문제로 낚시하고 있습니다.)
관련 자료
- html - 큰 wysiwyg 필드 (예 - 140668 자)를 저장하는 mysql 가장 좋은 방법
- mysql - 많은 수의 열을 모두 선택하면 영원히 걸립니다
- php - Excel을 업로드하는 동안 오류가"MySql 행 크기가 너무 큽니다"
- 대용량 파일 관리 앱용 MySQL 데이터베이스를 설계하는 방법은 무엇입니까?
- 대용량 데이터베이스에서 작동하도록 mysql 요청을 최적화하는 방법
- sql - 대용량 (40GB) csv 파일을 MySQL 테이블에 업로드하는 가장 좋은 방법은 무엇입니까
- sql - MySQL에서 큰 테이블의 범위별로 그룹화
- java - CSV 파일이 Google 버킷에 있고 mysql 5717이 클라우드의 RHEL 시스템에 설치되어있는 경우 mysql의 데이터로드 파일을 사용하는 방법은 무엇입니까?
- MySQL - mysql - 하나의 큰 열 또는 많은 작은 행?
- PHP에서 자바 스크립트를 사용하여 mysql에서 큰 내용을 얻는 방법
- 글라이드는 큰 이미지 안드로이드를로드하는 데 시간이 걸립니다
- android - 많은 수의 이미지를로드 할 때 Recyclerview가로드하는 데 시간이 너무 오래 걸림
- android - FCM이 대규모 기반 주제에 푸시 알림을 전달하는 데 걸리는 시간
- amazon web services - AWS RDS 용 데이터 인파 일 mysql Workbench를로드하는 방법은 무엇입니까?
- 수십억 행과 수백 기가 바이트의 큰 테이블에 mysql을 구성하는 방법
- sql - 데이터가 'n'번 변경되지 않은 큰 mysql 데이터 세트에서 UIDS 찾기
- 클라이언트의 MySQL LOAD DATA LOCAL INFILE 차이점
- PHP를 사용하여 큰 MySQL 데이터베이스를 다운로드하는 방법
트렌드
- OpenCv의 폴더에서 여러 이미지 읽기 (python)
- 파이썬 셀레늄 모든 "href"속성 가져 오기
- html - 자바 스크립트 - 클릭 후 변경 버튼 텍스트 변경
- javascript - 현재 URL에서 특정 div 만 새로 고침/새로 고침
- JSP에 대한 클래스를 컴파일 할 수 없습니다
- JavaScript 변수를 HTML div에 '출력'하는 방법
- git commit - 자식 - 로컬 커밋 된 파일에 대한 변경을 취소하는 방법
- jquery - JavaScript로 현재 세션 값을 얻으시겠습니까?
- javascript - swiperjs에서 정지, 재생 버튼 추가
- python - 화면에서 찾은 요소를 찾을 수없는 경우 셀레늄
24 시간은 매우 긴 시간입니다-
LOAD DATA
를 실행할 때 가장 중요한 요소 버퍼 풀이며 사용자 (22GB)는 가져온 3.5G 파일을 수용하기에 충분해야합니다. 다른 일이 일어나고 있어야합니다.SHOW CREATE TABLE
와 같은 더 많은 데이터를 공유하십시오 사용 된 테이블 및SHOW PROCESSLIST
에 대한 출력 -테이블을 차단하는 무언가가 있고 프로세스가 시작되기를 기다리고 있습니다.GLOBAL STATUS
를 확인하여 언제든지 부하 상태를 확인할 수 있습니다innodb%' as well as the
를 위해 Handler_writes`.이 정도를 예상 할 수있는 아이디어를주기 위해 SSD 데스크톱 등급 시스템에 안전하게로드하는 데 3.7GB 파일이 200 초 이상 걸리지 않아야합니다. 서버 등급이 아닌 시스템의 모든 최신 MariaDB 및 MySQL 버전에서 기본 (나쁜) 구성에서도 https://dbahire.com/testing-again-load-data-on-mysql-5-6-5-7-8-0-non-ga-and-mariadb-10-0-10 -1-and-10-2-non-ga/