sudo mkdir /mysqlslap_tutorial/mysqlbackup
cd /mysqlslap_tutorial/mysqlbackup
sudo mysqldump --user sysadmin --password --host localhost employees > ~/employees_backup.sql
sudo cp ~/employees_backup.sql /mysqlslap_tutorial/mysqlbackup/
CREATE DATABASE employees_backup;
당신이 테스트를 위해 별도의 서버를 사용하는 경우이 시점에서, 당신은 employeesbackup.sql 그것에를 통해 파일을 복사해야합니다. 메인 터미널 세션에서 employeesbackup 데이터베이스로 백업 데이터를 가져옵니다
sudo mysql -u sysadmin -p employees_backup < /mysqlslap_tutorial/mysqlbackup/employees_backup.sql
생산 MySQL 데이터베이스 서버, MySQL은 일반 쿼리 로그를 활성화하고 그것의 파일 이름을 제공합니다.일반 쿼리 로그는 MySQL 데이터베이스 인스턴스에 대한 연결, 분리 및 쿼리 활동을 캡처합니다.
SET GLOBAL general_log=1, general_log_file='capture_queries.log';
이제 생산 MySQL 서버에 테스트 할 쿼리를 실행합니다. 이 예에서는 명령 줄에서 쿼리를 실행합니다. 그러나, 당신은 당신의 응용 프로그램 대신 직접 실행 한 쿼리를 생성 할 수 있습니다. 당신이 테스트하려는 느린 과정 또는 웹 사이트 페이지가있는 경우에, 당신은 그 과정을 통해 실행하거나 지금 웹 페이지에 액세스해야합니다. 당신이 쇼핑 카트를 실행하는 경우 예를 들어, 데이터베이스 서버의 모든 해당 쿼리를 실행해야하는, 지금 체크 아웃 프로세스를 완료 할 수 있습니다.
USE employees;
SELECT e.first_name, e.last_name, d.dept_name, t.title, t.from_date, t.to_date FROM employees e INNER JOIN dept_emp de ON e.emp_no=de.emp_no INNER JOIN departments d ON de.dept_no=d.dept_no INNER JOIN titles t ON e.emp_no=t.emp_no ORDER BY e.first_name, e.last_name, d.dept_name, t.from_date;
489903 rows in set (4.33 sec)
쿼리가 완료 될 때 우리는 일반적으로 로깅을 해제합니다 :
SET GLOBAL general_log=0;
당신이 로그인두면, 쿼리가 열심히 테스트 만들 수있는 로그에 추가 할 계속합니다. 그래서, 바로 시험을 마친 후에는 로그를 비활성화해야합니다. 의 로그 파일은 / var / lib 디렉토리 / mysql을 디렉토리에 생성 된 것을 확인하자 :
sudo ls -l /var/lib/mysql/capt*
-rw-rw----. 1 mysql mysql 861 Sep 24 15:09 /var/lib/mysql/capture_queries.log
sudo cp /var/lib/mysql/capture_queries.log /mysqlslap_tutorial/
이 로그 파일에있는 데이터의 꽤가 있어야합니다. 이 예제에서, 우리가 원하는 쿼리는 끝 부분에 있어야합니다.파일의 마지막 부분을 확인 :
sudo tail /mysqlslap_tutorial/capture_queries.log
6294 Query show databases
6294 Query show tables
6294 Field List departments
6294 Field List dept_emp
6294 Field List dept_manager
6294 Field List employees
6294 Field List salaries
6294 Field List titles
140930 15:34:52 6294 Query SELECT e.first_name, e.last_name, d.dept_name, t.title, t.from_date, t.to_date FROM employees e INNER JOIN dept_emp de ON e.emp_no=de.emp_no INNER JOIN departments d ON de.dept_no=d.dept_no INNER JOIN titles t ON e.emp_no=t.emp_no ORDER BY e.first_name, e.last_name, d.dept_name, t.from_date
140930 15:35:06 6294 Query SET GLOBAL general_log=0
sudo vi /mysqlslap_tutorial/capture_queries.sql
내용은 줄 바꿈없이 끝에 세미콜론없이 테스트 할 MySQL의 쿼리해야합니다 :
SELECT e.first_name, e.last_name, d.dept_name, t.title, t.from_date, t.to_date FROM employees e INNER JOIN dept_emp de ON e.emp_no=de.emp_no INNER JOIN departments d ON de.dept_no=d.dept_no INNER JOIN titles t ON e.emp_no=t.emp_no ORDER BY e.first_name, e.last_name, d.dept_name, t.from_date
다음, 쿼리 결과가 캐시되지 않습니다 있는지 확인하십시오. 다시 테스트 MySQL의 세션으로 이동합니다. 다음 명령을 실행합니다 :
RESET QUERY CACHE;
이제 스크립트 파일로 mysqlslap 유틸리티를 실행하는 시간이다. 당신이 --query 매개 변수에 올바른 스크립트 파일 이름을 사용하십시오. 우리는 단지 10 개의 동시 연결을 사용하여 테스트를 두 번 반복합니다. 테스트 서버에서이 프로그램을 실행 :
sudo mysqlslap --user=sysadmin --password --host=localhost --concurrency=10 --iterations=2 --create-schema=employees_backup --query="/mysqlslap_tutorial/capture_queries.sql" --verbose
Benchmark
Average number of seconds to run all queries: 68.692 seconds
Minimum number of seconds to run all queries: 59.301 seconds
Maximum number of seconds to run all queries: 78.084 seconds
Number of clients running queries: 10
Average number of queries per client: 1
USE employees_backup;
CREATE INDEX employees_empno ON employees(emp_no);
CREATE INDEX dept_emp_empno ON dept_emp(emp_no);
CREATE INDEX titles_empno ON titles(emp_no);
sudo mysqlslap --user=sysadmin --password --host=localhost --concurrency=10 --iterations=2 --create-schema=employees_backup --query="/mysqlslap_tutorial/capture_queries.sql" --verbose
Benchmark
Average number of seconds to run all queries: 55.869 seconds
Minimum number of seconds to run all queries: 55.706 seconds
Maximum number of seconds to run all queries: 56.033 seconds
Number of clients running queries: 10
Average number of queries per client: 1
앞서서 mysqlslpa을 이용하는 방법, 쿼리 성능을 측정하는 방법 및 실제 사용 사례도 설명하였습니다.
결론입니다.
Troubleshooting - mysqlslap Doesn't Show Output
당신이 테스트 명령을 실행하고 출력을 얻을 수없는 경우,이 서버 자원이 끝나가 될 수있는 좋은 지표이다.
증상은 벤치 마크의 출력 부족, 또는 에러 등을 포함 할 수있다 mysqlslap: Error when storing result: 2013 Lost connection to MySQL server during query
.
당신은 --concurrency 또는 --iterations 매개 변수에 적은 수 테스트를 다시 시도 할 수 있습니다. 또는, 당신은 당신의 테스트 서버 환경을 업그레이드 시도 할 수 있습니다.
이 데이터베이스 서버의 용량의 외부 한계를 찾을 수있는 좋은 방법이 될 수 있습니다.
결론적으로,
mysqlslap 사용하기 쉽고 간단하고 가벼운 도구이며 그것은 MySQL 데이터베이스 엔진이 기본적으로 통합되어 있습니다. 이 버전 5.1.4에서의 MySQL의 모든 버전에 사용할 수 있습니다.
이 튜토리얼에서 우리는 다양한 옵션 mysqlslap 사용하는 방법을 보았다 및 샘플 데이터베이스와 주위했다. 당신도 그와 MySQL의 사이트와 연습에서 다른 샘플 데이터베이스를 다운로드 할 수 있습니다. 우리가 전에 언급 한 바와 같이, 프로덕션 데이터베이스 서버에서 테스트를 실행하지 마십시오.
이 튜토리얼의 마지막 유스 케이스는 하나의 쿼리를하고있었습니다. 우리가 다소 세 테이블에 추가 인덱스를 추가하여 해당 쿼리의 성능을 개선하는 동안, 과정은 현실에서 그렇게 단순하지 않을 수 있습니다. 추가 여분 인덱스는 때때로 시스템 성능을 저하시킬 수 있으며, DBA는 종종 발생할 수있는 성능 저하에 대해 여분의 인덱스를 추가의 이점을 계량 할 필요가있다.
실제 테스트 시나리오는 더 복잡하지만 이것은 당신에게 테스트 및 데이터베이스 성능을 향상 시작하는 도구를 제공합니다.
BY LEE JI EUN
'2. DBMS이야기 > 02. MySQL' 카테고리의 다른 글
MySQL 5.6 Parallel Replication (slave_parallel_workers) (0) | 2014.11.28 |
---|---|
MySQL filesort 알고리즘 (0) | 2014.11.27 |
MySQL에서 mysqlslap을 활용하여 쿼리 성능을 측정하는 방법 (3) - 활용사례 (0) | 2014.11.19 |
MySQL에서 mysqlslap을 활용하여 쿼리 성능을 측정하는 방법 (2) 샘플DB인스톨,mysqlslap활용 (0) | 2014.11.19 |
MySQL에서 mysqlslap을 활용하여 쿼리 성능을 측정하는 방법 (1) 테스트환경 셋팅 (0) | 2014.11.19 |