DB에서 왜 인덱스가 필요한지. 다양한 성능을 테스트 해보기 위해 준비를 해보자.
✅ [DOCKER] docker 컨테이너 자원 할당 제한
🟩 더미 데이터 적재
# 더미 데이터 생성
DELIMITER $$
DROP PROCEDURE IF EXISTS loopInsert$$
CREATE PROCEDURE loopInsert()
BEGIN
DECLARE i INT DEFAULT 1;
WHILE i <= 2000 DO
INSERT INTO board(id , user, nickname)
VALUES(concat(i), concat('user',i), 'nickname', i);
SET i = i + 1;
END WHILE;
END$$
DELIMITER $$
위의 SQL문을 통해 프로시저를 생성해주고 아래 CALL loopInsert()
SQL문을 통해 프로시저를 실행시켜주면된다.
CALL loopInsert();
insert into test(a, b, c) values (1, 2, 3);
insert into test(a, b, c) values (4, 5, 6);
insert into test(a, b, c) values (7, 8, 9);
insert into test(a, b, c) values (1, 2, 3), (4, 5, 6), (7, 8, 9);
훌륭하신 분이 만들어 놓은 데이터를 활용해보자.
$ git clone https://github.com/datacharmer/test_db.git
$ cd test_db
$ mysql -u root -p < employees.sql
$ mysql -t < test_employees_md5.sql
+--------------+------------------+----------------------------------+
| table_name | expected_records | expected_crc |
+--------------+------------------+----------------------------------+
| employees | 300024 | 4ec56ab5ba37218d187cf6ab09ce1aa1 |
| departments | 9 | d1af5e170d2d1591d776d5638d71fc5f |
| dept_manager | 24 | 8720e2f0853ac9096b689c14664f847e |
| dept_emp | 331603 | ccf6fe516f990bdaa49713fc478701b7 |
| titles | 443308 | bfa016c472df68e70a03facafa1bc0a8 |
| salaries | 2844047 | fd220654e95aea1b169624ffe3fca934 |
+--------------+------------------+----------------------------------+
관계도 다양하고, 아주 마음에 든다. 이제 본격적인 테스트를 해보자.👍
데이터 크기 때문인지, cpu = 1, memory = 256mb로 mysql을 띄웠더니, 메모리 초과가 발생했다.
cpu = 1, memory = 512mb로 메모리를 올려서 테스트 시작😎
docker run --name mysql-cpu1-memory512m -e MYSQL_ROOT_PASSWORD=root -d --cpu-shares=1024 --memory=512m -p 3309:3306 mysql:8.0.27