2. DBMS이야기/02. MySQL

MySQL에서 mysqlslap을 활용하여 쿼리 성능을 측정하는 방법 (2) 샘플DB인스톨,mysqlslap활용

OSSW(Open Source System SoftWare 2014. 11. 19. 17:04

다음으로 설명할 내용은 2) Sample Database를 인스톨 하는 방법입니다.

다음으로, 우리는 테스트를 위해 샘플 데이터베이스를 설치해야합니다. 이 데이터베이스는 직원이라고하며 MySQL의 웹 사이트에서 무료로 액세스 할 수 있습니다. 데이터베이스는 또한 런치 패드에서 다운로드 할 수 있습니다.직원 데이터베이스는 패트릭 대원과 주세페 Maxia에 의해 개발되었다. 원래 데이터는 지멘스 기업 연구에 Fusheng 왕과 카를로 Zaniolo에 의해 만들어졌습니다.


이 큰 데이터 세트를 제공하기 때문에 우리는 직원 데이터베이스를 선택하고있다.데이터베이스 구조는 간단하다 : 그것은 단지 여섯 테이블을 가지고있다; 그러나 포함 된 데이터에 둘 이상의 300 직원 기록을 (급여 테이블 자체가 거의 3 만 행이 있음)이있다. 이것은 우리가보다 현실적인 생산 작업 부하를 에뮬레이트하는 데 도움이됩니다.


첫째, 우리는 / mysqlslap_tutorial 디렉토리에 있는지 확인 :

cd /mysqlslap_tutorial
직원 샘플 데이터베이스의 최신 버전을 다운로드 :
sudo wget https://launchpad.net/test-db/employees-db-1/1.0.6/+download/employees_db-full-1.0.6.tar.bz2

우리는 압축 파일을 압축을 해제 할 수 있도록 bzip2에 도구를 설치합니다 :

sudo yum install bzip2
데이터베이스 아카이브의 압축을 풉니 다. 이 분 소요됩니다. 우리는 여기서 두 단계를하고 있습니다 :
sudo bzip2 -dfv employees_db-full-1.0.6.tar.bz2
sudo tar -xf employees_db-full-1.0.6.tar

내용은 employees_db라는 별도, 새 디렉토리에 압축 해제합니다. 우리는 데이터베이스를 설치하는 쿼리를 실행하기 위해이 디렉토리로 이동해야합니다. 내용은 데이터베이스 구조를 생성합니다 README 문서, 변경 로그, 데이터 덤프, 다양한 SQL 쿼리 파일을 포함한다 :

cd employees_db
ls -l
-rw-r--r--. 1 501 games       752 Mar 30  2009 Changelog
-rw-r--r--. 1 501 games      6460 Oct  9  2008 employees_partitioned2.sql
-rw-r--r--. 1 501 games      7624 Feb  6  2009 employees_partitioned3.sql
-rw-r--r--. 1 501 games      5660 Feb  6  2009 employees_partitioned.sql
-rw-r--r--. 1 501 games      3861 Nov 28  2008 employees.sql
-rw-r--r--. 1 501 games       241 Jul 30  2008 load_departments.dump
-rw-r--r--. 1 501 games  13828291 Mar 30  2009 load_dept_emp.dump
-rw-r--r--. 1 501 games      1043 Jul 30  2008 load_dept_manager.dump
-rw-r--r--. 1 501 games  17422825 Jul 30  2008 load_employees.dump
-rw-r--r--. 1 501 games 115848997 Jul 30  2008 load_salaries.dump
-rw-r--r--. 1 501 games  21265449 Jul 30  2008 load_titles.dump
-rw-r--r--. 1 501 games      3889 Mar 30  2009 objects.sql
-rw-r--r--. 1 501 games      2211 Jul 30  2008 README
-rw-r--r--. 1 501 games      4455 Mar 30  2009 test_employees_md5.sql
-rw-r--r--. 1 501 games      4450 Mar 30  2009 test_employees_sha.sql

데이터를 MySQL로 연결하고 데이터베이스를 생성 할 employees.sql 스크립트를 실행하고로드하려면이 명령을 실행합니다 :


sudo mysql -h localhost -u sysadmin -p -t < employees.sql
프롬프트에서 이전 섹션에서 시스템 관리자 MySQL 사용자를 위해 만든 암호를 입력합니다.

이 과정의 출력은 다음과 같이 표시됩니다. 그것은 분 정도 걸릴 것 정도 실행하려면
+-----------------------------+
| INFO                        |
+-----------------------------+
| CREATING DATABASE STRUCTURE |
+-----------------------------+
+------------------------+
| INFO                   |
+------------------------+
| storage engine: InnoDB |
+------------------------+
+---------------------+
| INFO                |
+---------------------+
| LOADING departments |
+---------------------+
+-------------------+
| INFO              |
+-------------------+
| LOADING employees |
+-------------------+
+------------------+
| INFO             |
+------------------+
| LOADING dept_emp |
+------------------+
+----------------------+
| INFO                 |
+----------------------+
| LOADING dept_manager |
+----------------------+
+----------------+
| INFO           |
+----------------+
| LOADING titles |
+----------------+
+------------------+
| INFO             |
+------------------+
| LOADING salaries |
+------------------+

지금 당신은 MySQL의에 로그인하여 데이터가 성공적으로 가져 왔는지 확인하려면 몇 가지 기본 쿼리를 실행할 수 있습니다.

sudo mysql -h localhost -u sysadmin -p
시스템 관리자 MySQL 사용자의 암호를 입력합니다.

새로운 직원 데이터베이스에 대한 데이터베이스 목록을 확인합니다
show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| employees          |
| mysql              |
| performance_schema |
+--------------------+
4 rows in set (0.01 sec)

직원 데이터베이스를 사용합니다 :

use employees;
show tables;
+---------------------+
| Tables_in_employees |
+---------------------+
| departments         |
| dept_emp            |
| dept_manager        |
| employees           |
| salaries            |
| titles              |
+---------------------+
6 rows in set (0.01 sec)

당신이 원한다면, 당신은 각 테이블의 세부 정보를 확인할 수 있습니다. 우리는 titles 테이블에 대한 정보를 확인합니다 :

describe titles;
+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| emp_no    | int(11)     | NO   | PRI | NULL    |       |
| title     | varchar(50) | NO   | PRI | NULL    |       |
| from_date | date        | NO   | PRI | NULL    |       |
| to_date   | date        | YES  |     | NULL    |       |
+-----------+-------------+------+-----+---------+-------+
4 rows in set (0.01 sec)

항목 수를 확인합니다 :

mysql> select count(*) from titles;
+----------+
| count(*) |
+----------+
|   443308 |
+----------+
1 row in set (0.14 sec)

당신이 원하는 다른 어떤 데이터를 확인합니다. 우리는 지금 우리의 운영 체제 프롬프트로 돌아 갈 수 있습니다 :


quit;

3) mysqlslap을 활용하기!

우리는 지금 mysqlslap을 사용하여 시작할 수 있습니다. 명시 적으로 MySQL로 로그인 할 필요가 없습니다 있도록 mysqlslap는 정규 쉘 프롬프트에서 호출 할 수 있습니다. 이 튜토리얼에서는, 그러나, 우리는 우리의 리눅스 서버에 다른 터미널 연결을 열고 거기에 우리가 이전에 만든 시스템 관리자 사용자와의 새로운 MySQL의 세션을 시작, 그래서 우리는 더 쉽게 MySQL의에서 몇 가지를 확인하고 업데이트 할 수 있습니다. 그래서, 우리는 우리의 sudo는 사용자와의 열린 프롬프트 하나와 MySQL에 로그인 한 프롬프트를해야합니다.


우리가 테스트를 위해 특정 명령에 들어가기 전에, 당신은 가장 유용한 mysqlslap 옵션이 목록에서 살펴 봐야 할 수 있습니다. 이것은 나중에 자신의 mysqlslap 명령을 설계하는 데 도움이 될 수 있습니다.

OptionWhat it means
--userMySQL username to connect to the database server
--passwordPassword for the user account. It's best to leave it blank in command line
--hostMySQL database server name
--portPort number for connecting to MySQL if the default is not used
--concurrencyThe number of simultaneous client connections mysqlslap will emulate
--iterationsThe number of times the test query will be run
--create-schemaThe database where the query will be run
--queryThe query to execute. This can either be a SQL query string or a path to a SQL script file
--createThe query to create a table. Again, this can be a query string or a path to a SQL file
--delimiterThe delimiter used to separate multiple SQL statements
--engineThe MySQL database engine to use (e.g., InnoDB)
--auto-generate-sqlLets MySQL perform load testing with its own auto-generated SQL command


BY LEE JI EUN