사용자 정의 SQL 부하 테스트를 위한 도구

사용자 정의 SQL 부하 테스트를 위한 도구

여러 구성에서 mysql 애플리케이션을 비교하기 위해 몇 가지 테스트를 실행하고 싶습니다. 하지만 우리는 무거운 저장 프로시저 논리를 가지고 있기 때문에 sysbench나 oltp 테스트와 같은 것을 사용하고 싶지 않습니다. 그래서... 우리 절차에 대해 테스트하고 싶습니다.

사용자 지정 쿼리(옵션 - 병렬)를 실행하고 통계를 확인하는 데 사용할 수 있는 테스트 애플리케이션/프레임워크가 있나요? 웹용 Siege와 같은 것인가요? 내가 이미 찾은 것은 일반적으로 자체 생성된 데이터베이스 스키마와 시나리오를 사용합니다.

개발자에게 사용자 정의 Java 인터페이스를 만들고 이를 위해 Siege를 사용하도록 요청할 수 있습니다. 봇은 오버헤드를 추가하거나 숫자에 영향을 미치는 것을 원하지 않습니다.

감사합니다, 이고르.

답변1

Jmeter는 JDBC를 사용하여 데이터베이스 부하 테스트를 수행할 수 있습니다.http://jakarta.apache.org/jmeter/usermanual/build-db-test-plan.html

저는 이전에 jdbc 기능을 사용해 본 적이 없기 때문에 이것이 귀하의 복잡한 쿼리를 처리할 수 있을지 모르겠습니다.

답변2

대부분의 단위 테스트 엔진의 일반 원칙에 따라 간단한 mySQL 단위 테스트 엔진을 구축할 수 있습니다.

우리는 과거에 MS SQL을 위해 이와 같은 것을 구축했습니다.

아이디어는 다음과 같았습니다

1) 단위 테스트 절차를 작성하고 "test_"와 같은 이름 접두사를 붙입니다. MS SQL에서는 확장된 속성을 메타 정보로 사용하여 out 테스트의 일부 특정 매개 변수를 설명했습니다(NUnit에서와 마찬가지로 다른 테스트 속성을 사용할 수 있음).

2) 커서를 여는 프로시저/스크립트를 작성하고 "test_"로 시작하는 모든 프로시저 이름을 카탈로그에서 선택하고 EXEC(@procedure_name) 문에서 각각을 실행합니다. 테스트가 실패하면 테스트 절차에서 오류가 발생해야 합니다.

3) 테스트 실행 결과는 테이블에 저장됩니다.

4) 동일한 데이터에 대해 테스트를 실행하고 예측 가능한 결과를 얻기 위해 각 테스트 실행 전에 한 번 백업하고 백업에서 복원한 샘플 테스트 데이터베이스가 있습니다.

답변3

이제 MySQL 5.1과 함께 패키지로 제공되는 도구를 원한다면 시도해 보는 것보다 더 나쁜 일을 할 수도 있습니다.MySQL Slap(일명 mysqlslap). 문서에 나온 예:

50개의 클라이언트가 쿼리하고 각각에 대해 200개의 선택이 있는 자체 생성 및 쿼리 SQL 문을 제공합니다.

mysqlslap --delimiter=";" \  
--create="CREATE TABLE a (b int);INSERT INTO a VALUES (23)" \  
--query="SELECT * FROM a" --concurrency=50 --iterations=200

이는 테스트를 병렬로 실행하는 옵션을 제공합니다. 비록 여러 클라이언트를 사용하는 병렬 처리 구현이 정확히 마음에 들지 않을 수도 있습니다. 다음은 간략한 설명입니다(역시 축어적으로).

mysqlslap은 세 단계로 실행됩니다:

  1. 테스트에 사용하려는 스키마, 테이블 및 선택적으로 저장된 프로그램이나 데이터를 생성합니다. 이 단계에서는 단일 클라이언트 연결을 사용합니다.

  2. 부하 테스트를 실행합니다. 이 단계에서는 많은 클라이언트 연결을 사용할 수 있습니다.

  3. 정리(연결을 끊고 지정된 경우 테이블 삭제). 이 단계에서는 단일 클라이언트 연결을 사용합니다.

이것이 당신의 취향에 맞지 않는다면, cron 스크립트를 사용하여 많은 사용자에 대해 특정 시간에 MySQL Slap을 트리거하거나 서버 등에 대한 네트워크 경로가 동일한 많은 동일하게 구성/사양된 시스템에 대해 실행할 수 있습니다(후자는 벤치마킹은 모호한 결론을 방지하기 위해 가능한 모든 불일치를 제거해야 하기 때문에 매우 중요합니다.

(아마도) 이전 MySQL 버전을 실행하고 있다면,이 링크5.0용 5.1 소스를 컴파일하는 방법에 대한 유용한 정보를 제공합니다. 추가 백포팅은 아마도 불가능할 것입니다.

다음은 기본적인 연습입니다.

답변4

나는 결국 사용했다SQLIO 디스크에 스트레스를 주기 위해 몇 가지 사용자 지정 쿼리를 작성하여 상당한 양의 데이터를 생성한 다음 대규모 테이블에서 다양한 계산을 수행하고 로드는 많지만 제대로 최적화되지 않은 데이터베이스를 시뮬레이션했습니다. 그런 다음 죽을 때까지 동시 연결 수를 늘렸습니다.

관련 정보