동일한 테이블 내의 여러 스레드에 배치 삽입을 사용한 MySQL 벤치마크
InnoDB와 MySQL 데이터베이스의 MyRock 엔진 간의 고강도 쓰기를 테스트하고 싶습니다.이를 위해 sysbench를 사용하여 벤치마킹합니다.요구 사항은 다음과 같습니다.
- 여러 스레드 동시성이 동일한 테이블에 기록됩니다.
- 배치 삽입 지원(각 삽입 트랜잭션에서 대량의 레코드가 삽입됩니다.
sysbench의 모든 사전 테스트를 확인했지만 요건을 충족하는 테스트를 찾을 수 없습니다.
oltp_write_only
: 는 같은 테이블에 쓰는 여러 스레드를 지원합니다.하지만 이 테스트에는 대량 삽입 옵션이 없습니다.bulk_insert
: 여러 스레드를 지원하지만 각 스레드는 다른 테이블에 씁니다.
요건을 충족하는 사전 시스템벤치 테스트가 있습니까?그렇지 않은 경우 이미 이 작업이 완료된 커스텀 Lua 스크립트를 찾을 수 있습니까?
(댓글에서:)
CREATE TABLE IF NOT EXISTS `tableA` (
`id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
`user_id` VARCHAR(63) NOT NULL DEFAULT '',
`data` JSON NOT NULL DEFAULT '{}',
PRIMARY KEY (`id`),
UNIQUE INDEX `user_id_UNIQUE` (`user_id` ASC)
) ENGINE = InnoDB;
(MySQL 관점에서...)
- 토스
id
PK는 행당 8바이트를 절약합니다. - 촉진하다
UNIQUE(user_id)
로.PRIMARY KEY(user_id)
-- 행당 40바이트를 절약할 수 있습니다(온 상태).LENGTH(user_id)
).
그런 의지는
- 필요한 디스크 I/O 축소(일부 속도 향상)
- 인덱스 중 하나 삭제(아마도 포스트 로드 처리의 중요한 부분)
OS 감시 툴을 실행하여 I/O 사용률을 확인합니다.그것이 한계 요인이 될 것 같다.
벤치마크 제품은 제한된 상황에서 유용합니다.고객의 상황(및 그 외의 많은 경우)에 대해서는, 제품을 빌드해 타이밍을 맞추는 것이 최선입니다.
또 다른 생각은...
JSON은 어떻게 생겼나요?JSON이 단순한 구조(키: 값 쌍의 일관된 세트)인 경우 개별 열을 만들면 Disk 설치 공간이 절반(따라서 속도가 두 배로 증가)될 수 있습니다.JSON에서 개별 컬럼으로 변경하는 처리는 클라이언트에서 이루어지며, 이로 인해 예상한 절감액이 상쇄될 수도 있고 상쇄되지 않을 수도 있습니다).
JSON이 더 복잡할 경우 항상 존재하는 "컬럼"을 추출하여 비용을 절감할 수 있습니다.
JSON이 '크다'면 클라이언트에서 JSON을 압축한 후BLOB
이로 인해 디스크 설치 공간과 네트워크 대역폭이 3배로 줄어들 수 있습니다.
250만 줄에 250GB라고 하셨죠?1000바이트/행입니다.즉, JSON은 평균 700바이트입니까?(주의: 오버헤드가 있습니다.)JSON 컬럼의 압축BLOB
총 400바이트/행으로 줄어들기 때문에 250M 행의 경우 100GB에 불과합니다.
{"b": 100}
열 살이에요.를 b에 할 수 SMALLINT
록을을상상상상축축축수수수
또 하나 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★user_id
PK에 대해서, 이것은 고려할 가치가 있습니다.파일을 로드하기 전에 파일 정렬을 사용하여 테이블을 user_id별로 정렬합니다.이것은 아마도 보다 빠를 것이다.INSERTing
행은 '랜덤'입니다.(데이터가 이미 정렬되어 있으면 이 추가 정렬이 낭비됩니다.)
언급URL : https://stackoverflow.com/questions/56859033/benchmark-mysql-with-batch-insert-on-multiple-threads-within-same-table
'sourcecode' 카테고리의 다른 글
Collections.emptyList()와 Collections의 차이점은 무엇입니까?빈 목록 (0) | 2022.09.24 |
---|---|
XML 문서에서 문자열로의 (0) | 2022.09.24 |
mySQL replace()를 사용하여 여러 레코드의 문자열을 대체하려면 어떻게 해야 합니까? (0) | 2022.09.24 |
MariaDB 일반 로그가 작동하지 않음 (0) | 2022.09.24 |
mysql 함수 GROUPINT이 존재하지 않습니다. (0) | 2022.09.24 |