MySQL 서버는 초당 몇 개의 선택을 실행할 수 있습니까?


19

사업 계획을 작성 중이며 내 웹 사이트가 500.000 명의 순 방문자로부터 도달 할 때의 비용을 시뮬레이션해야합니다.

  • 방문자 : 500.000
  • 페이지 뷰 : 1,500,000
  • 스파이더 페이지 뷰 : 500,000
  • 총 페이지 뷰 : 2,000,000

각 페이지는 50 개의 쿼리 +-

  • 일일 검색어 : 100 백만
  • 시간당 : 4 백만
  • 분당 : 70,000
  • 초당 : 1,200
  • 피크 : 3,000

이 계산을 수행 할 때 3,000 개의 쿼리가 필요합니다. 어떤 종류의 서버에서 처리 할 수 ​​있습니까?

문제는 실제로 내 사이트는 하루에 2,000 번 방문하고 초당 + + 150/200 쿼리를 수행합니다.이 시점부터 시작하면 50,000 쿼리 / 초가 예상됩니다.

이 작업을 관리하기 위해 클러스터 또는 복제에 필요한 서버 수는 몇 개입니까?


5
8k +는 어떤 종류의 사이트를 방문하여 쿼리합니까?
이그나시오 바스케스-아 브람스

5
즉시 시스템 설계 검토가 필요합니다.
Chopper3

1
정보 자체가 부족한 곳은 없습니다. 쿼리 자체와 같은 중요한 정보는 없습니다. 실행중인 머신에 대해 알려주지 않아도됩니다. 이것은 486입니까? 최신의 최고 슈퍼 컴퓨터 또는 그 사이의 무언가? 나열된 모든 숫자는 질문과 관련이 없습니다. 관련 정보를 제공하십시오.
John Gardeniers

> 8k +는 어떤 종류의 사이트를 방문하여 쿼리합니까? 2000 명의 순 방문자수를 받았지만 각 방문자는 많은 페이지를 열었습니다. + 내부에 거미가 많이 있습니다. 2000 명의 순 사용자가 매일 열리는 120.000 페이지 이상을 여는 6000 개의 고유 IP를 생성하고 있습니다. 감사합니다

답변:


22

나는 하루에 수백만 페이지에 달하는 웹 사이트를 가진 전자 상거래 회사에서 일했습니다. 우리는 2 개의 단일 코어 CPU와 2GB의 RAM을 가진 단일 DELL PE 1750을 가지고 있었고, 데이터베이스 크기는 약. 4GB. 피크 타임에이 서버는 초당 최대 50k + 쿼리를 처리했습니다.

말했듯이 데이터베이스가 잘 구성되어 있고 모든 쿼리가 정교하게 조정되었으며 (우리는 느린 쿼리 로그를 분석하고 쿼리 및 인덱스를 수정하는 주 세션이있었습니다) 서버 설정도 미세 조정되었습니다. 캐싱은 확실히 좋은 생각이지만, MySQL은 어쨌든 성능을 분석 한 다음 메모리 사용 방법 (쿼리 캐시와 다른 옵션)을 미세 조정하면됩니다.

이러한 경험을 통해 인덱스 누락, 잘못된 인덱스 및 잘못된 데이터베이스 디자인 (예 : 기본 키와 같은 긴 문자열 필드 및 이와 유사한 넌센스)이 가장 큰 영향을 미친다는 것을 알 수 있습니다.


8

쿼리의 복잡성, 서버의 메모리 용량 및 디스크 속도에 따라 달라집니다.

쿼리가 매우 단순하거나 잘 조정되어 있으면 단일 대형 데이터베이스 서버가이를 처리 할 수 ​​있습니다. 그러나 쿼리가 매우 복잡하거나 단순하지만 제대로 조정되지 않은 경우 몇 개의 서버가 필요합니다.


또는 심각한 스키마 변경 및 재색 인화 ...
Massimo

3
하드웨어를 추가하는 것보다 튜닝이 항상 선호됩니다. 더 많은 하드웨어를 추가하면 문제를 해결하기가 훨씬 어려워 질 때까지 문제를 숨 깁니다.
mrdenny

답을 주셔서 감사합니다. 따라서 병렬로 2 대의 서버 + 1 개의 수동으로 반올림을 확인하는 것이 좋습니다. 32g의 램과 빠른 드라이브를 갖춘 2x 쿼드 코어 서버에 대해 이야기하고 있습니다. 내가 맞아? 공연이 필요하다는 것을 기억하십시오!

1
모든 것이 잘 조정되고 인덱싱되며 주당 1 ~ 2 개의 느린 쿼리 (및 느린 쿼리 시간은 2 초에 불과합니다) 어쨌든 사업 계획을 작성하고 있으며 어떤 종류의 서버 풀이 가능한지 알고 싶습니다. 8000 개의 쿼리 / 초로 매일 생성 된 12,000,000 페이지 관리

초당 8000 개의 쿼리가 그다지 많지는 않습니다. 단일 16 코어 서버가 아마도 트릭을 수행 할 것입니다. 64 기가 바이트의 RAM (또는 데이터베이스의 크기와 한 번에 캐시에 보관해야하는 데이터의 양에 따라 다소)이 트릭을 수행해야합니다. 내 DB (SQL Server에 부여)는 하루에 40 분에서 50 만 명의 사용자가 매일 1 분에 여러 번 (각각) 타격하는 16 코어 64 기가 RAM 서버에서 1TB입니다.
mrdenny

3

실행중인 특정 쿼리, 데이터베이스 구성표 및 크기에 대한 정보가 없으면 실제로 예측할 수 없습니다.

인덱싱 된 열의 간단한 SELECT는 인덱싱되지 않은 열을 기반으로 한 두 개의 JOIN 는 다른 짐승입니다. 물론 관련된 테이블에 1K 레코드 또는 1M이 포함되어 있으면 상황이 많이 바뀝니다.

또한:

  • 현재 하드웨어 구성은 무엇입니까?
  • 현재 부하에서 서버가 사용하는 전력 (CPU, RAM, 디스크 I / O)의 양은 얼마입니까?

실제로 8GB 램이있는 2x 쿼드 코어가있는 서버가 있습니다. 내가 전체 RAM과 프로세서의 100 %를 사용하고 있습니다 (이 난을 800 % 사용할 수 있습니다 보인다 여기를 참조 :) CPU : img834.imageshack.us/img834/3483/downloadv.png 램 : img442.imageshack.us/i/를 download2p.png 디스크 : img213.imageshack.us/i/download1x.png 감사

이러한 그래프를 기반으로 CPU 코어 중 하나 (또는 ​​최대 2 개) 만 사용합니다. 따라서 응용 프로그램이 CPU에 바운드되어 있지는 않지만 ... 또는 여러 CPU를 활용할 수는 없습니다. 또한, "캐시"에 사용 된 모든 메모리는 누군가가 실제로 필요 로 하지 않으며 , "있기 때문에"그것을 활용하는 OS 일뿐입니다.
Massimo

모든 CPU 코어 사용에 대한 정보를 어떻게 찾을 수 있습니까? 나는 램프를 사용하고 있습니다 ...

우선, 작업이 제대로 병렬화 될 수 없거나 MySQL 및 / 또는 Apache가 구성되지 않았기 때문에 필요하지 않기 때문에 (=로드가 낮음) 사용하지 않는지 확인해야합니다 그것을 써. 그리고이 두 프로그램은 일반적으로 기본적으로 멀티 스레딩되므로 서버로드와 SQL 쿼리를 살펴볼 것입니다.
Massimo

3

이그나시오 (Ignacio)가 말한 것처럼 캐싱을 살펴볼 수 있습니다. cms 또는 아마도 스택 앞. 모든 페이지마다 50 개 이상의 쿼리가 제공됩니다.


예, 이것은 복잡한 웹 사이트입니다. 커뮤니티입니다. 아무 것도 캐시 할 수 없으며 매 초마다 바뀌고 있습니다. 페이지를 캐시하려고했지만 캐시 적중률은 거의 0이었습니다. 페이지를 캐시 할 때마다 다시 읽을 수 없거나 다시 열기 전에 변경 될 수 있기 때문입니다. 감사합니다

4
잡을 수없는 사이트는 거의 없습니다. 매 초마다 변경되는 경우 10 페이지 뷰와 같이 1 초 동안 캐시 할 수 있습니다. ;-) 페이지를 완전히 캐싱하지 않고 차단 또는 특정 값 등을 고려한 적이 있습니까? 데이터베이스 외부, 공유 메모리 세그먼트, 파일 시스템, memcached에서 캐시 할 수 있습니다. 또한 일반적으로 이러한 상황에서 ESI가 유용 할 수 있습니다
Joris

0

귀하의 의견으로 판단 할 때 가장 큰 요인은 데이터 세트 크기 또는 "핫"데이터 세트의 크기입니다. 16 코어 서버에서 3,000qps 또는 8,000qps는 서버가 쿼리를 만족시키기 위해 디스크로 이동하지 않는 한 전혀 문제가되지 않습니다. 활성 데이터 세트가 InnoDB가 캐시에 사용하는 메모리 양을 초과하면 성능이 빠르게 떨어집니다.


0

큰 "핫"데이터 세트의 경우 "빅 데이터"체계로 변환하는 데 시간을 투자 할 가치가있을 것입니다. 예를 들어, 검색 할 대량의 데이터가 있지만 다시 쓰지 않고 새 데이터 만 추가하는 경우 Apache Hive를보십시오. 둘러보기, 일반적으로 기존 코드에 쉽게 인터페이스 할 수있는 풍미로, 캐시 공간 부족을 방지 할 수 있습니다.


0

초당 쿼리에 영향을 줄 수있는 것이 너무 많습니다. 직접 테스트하지 않고 내 데이터를 신뢰하지 마십시오. 현재 (2018-09) mysql 데이터베이스 및 시스템으로 qps를 추정하는 데 도움이되도록 속도 테스트 결과를 여기에 게시합니다. 내 테스트에서 데이터 크기는 서버 메모리보다 작습니다 (IO를 크게 줄이고 성능을 크게 향상시킵니다).

하나의 CPU 3.75GB 메모리, 100GB SSD, gcp 클라우드 mysql 서버 인스턴스를 사용하여 다음을 얻습니다.

  • 하나의 클라이언트, 하나의 SQL 하나의 행 읽기 : 799 sql / 초.
  • 50 개의 클라이언트, 1 개의 SQL 1 행 읽기 : 6403 sql / 초.
  • 50 개의 클라이언트, 하나의 SQL 한 행 쓰기 : 4341 개의 행 쓰기, qps. 4341 sql / 초
  • 클라이언트 당 1 개의 클라이언트, 30k 개의 행 쓰기 : 92109 개의 기록 된 행 / 초

qps 테스트 결과 쓰기 (2018-11) gcp mysql 2cpu 7.5GB 메모리 150GB SSD 직렬화 쓰기 10 스레드, SQL 당 30k 행 쓰기, 7.0566GB 테이블, 데이터 키 길이는 45 바이트, 값 길이는 9 바이트, 154KB의 기록 된 행 가져 오기 초당 CPU 97.1 %는 gcp 콘솔에서 qps 1406 / s를 씁니다.
청동 남자
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.