¿Cuántas selecciones por segundo puede ejecutar un servidor mysql?

19

Estoy escribiendo un plan de negocios y tengo que simular el costo cuando mi sitio web llegará a 500,000 visitantes únicos.

  • visitantes: 500.000
  • páginas vistas: 1,500,000
  • páginas vistas de araña: 500,000
  • total de páginas vistas: 2,000,000

Cada página hace 50 consultas + -

  • consultas por día: 100 millones
  • por hora: 4 millones
  • por minuto: 70,000
  • por segundo: 1,200
  • pico: 3.000

Al hacer este cálculo, necesito 3.000 consultas en segundo lugar ... ¿qué tipo de servidor puede manejarlo?

El problema es: en realidad mi sitio está realizando 2.000 visitas al día y tiene - + 150/200 consultas / segundo ... a partir de este punto, esperaré 50.000 consultas / segundo.

¿Cuántos servidores necesito en clúster o replicación gestionan este trabajo?

Reinstalar a Mónica
fuente
55
¿Qué tipo de sitio consulta 8k + por visita?
Ignacio Vazquez-Abrams
55
Necesita una revisión del diseño del sistema de inmediato.
Chopper3
1
Nada de información suficiente, porque no nos ha dicho nada sobre lo que realmente importa: las consultas mismas. Tampoco tiene que contarnos sobre la máquina que está ejecutando. ¿Es este un 486? ¿La última y mejor supercomputadora o algo intermedio? Todos esos números que has enumerado son irrelevantes para la pregunta. Proporcione información relevante.
John Gardeniers
> ¿Qué tipo de sitio consulta 8k + por visita? Recibo 2000 visitantes únicos pero cada visitante abre muchas páginas, + tengo muchas arañas adentro. 2000 usuarios únicos están generando 6000 ips únicos que abren más de 120,000 páginas abiertas diariamente. gracias

Respuestas:

22

Solía ​​trabajar para una empresa de comercio electrónico con un sitio web que tenía varios millones de visitas por día. Teníamos un solo DELL PE 1750 con 2 CPU de un solo núcleo y 2 GB de RAM, tamaño de base de datos aprox. 4 GB. En las horas punta, este servidor maneja más de 50k consultas por segundo.

Dicho esto: la base de datos estaba bien estructurada, todas las consultas se ajustaban con precisión (teníamos sesiones semanales que analizaban los registros de consultas lentas y corrigían consultas e índices) y la configuración del servidor también se ajustaba. El almacenamiento en caché es definitivamente una buena idea, pero MySQL lo hace de todos modos, solo tiene que analizar el rendimiento y luego ajustar cómo se usa su memoria (consultar caché frente a otras opciones).

A partir de esa experiencia, puedo decirle que el mayor impacto es causado por la falta de índices, índices incorrectos y mal diseño de la base de datos (por ejemplo, campos de cadena largos como claves primarias y tonterías similares).

wolfgangsz
fuente
8

Todo depende de la complejidad de la consulta, la cantidad de memoria que tengan los servidores y la rapidez de los discos.

Si las consultas son muy simples o están muy bien ajustadas, un solo servidor de base de datos grande puede manejar eso. Sin embargo, si las consultas son muy complejas (o simples pero mal ajustadas), necesitará varios servidores.

mrdenny
fuente
O algunos cambios serios de esquema y reindexación ...
Massimo
3
El ajuste SIEMPRE se prefiere a agregar más hardware. Agregar más hardware simplemente enmascara el problema hasta el momento en que el problema sea mucho más difícil de resolver.
mrdenny
Gracias por la respuesta, así que creo que 2 servidores en paralelo + 1 pasivo para la redundancia deberían estar bien, ¿verdad? Estoy hablando de 2 servidores de cuatro núcleos con 32 g de RAM y unidades rápidas. estoy en lo cierto? recuerda que necesito actuaciones!
1
todo está bien ajustado e indexado, tengo 1 o 2 consultas lentas por semana (y el tiempo de consulta lento es de solo 2 segundos) de todos modos estoy escribiendo un plan de negocios, y me gustaría saber qué tipo de grupo de servidores puede administrar 12,000,000 páginas abiertas diariamente generando con 8000 consultas / segundo
8000 consultas por segundo no es tanto. Un único servidor de 16 núcleos probablemente hará el truco. 64 gigas de RAM (o más o menos dependiendo de qué tan grande sea la base de datos y cuántos datos deben mantenerse en la memoria caché en cualquier momento) deberían ser el truco. Mi base de datos (concedió su servidor SQL) es de 1 TB en un servidor de 16 núcleos de 64 Gig de RAM con 40-50k usuarios golpeándolo diariamente hasta varias veces por minuto (cada uno) durante todo el día.
mrdenny
3

Esto realmente no se puede estimar sin saber nada sobre las consultas específicas que está ejecutando, el esquema de la base de datos y su tamaño.

Un SELECT simple en una columna indexada es una bestia bastante diferente de un par de JOINs basadas en no indexadas ... y, por supuesto, las cosas cambian mucho si las tablas involucradas contienen registros 1K o 1M.

También:

  • ¿Cuál es su configuración de hardware actual?
  • ¿Cuánto de su potencia (CPU, RAM, E / S de disco) está utilizando su servidor bajo la carga actual?
Massimo
fuente
en realidad tengo un servidor con 2x quad core con 8 GB de ram. Estoy usando el ram completo y el 100% del procesador (parece que puedo usar el 800%, ver aquí :) cpu: img834.imageshack.us/img834/3483/downloadv.png ram: img442.imageshack.us/i/ download2p.png disk: img213.imageshack.us/i/download1x.png gracias
Según esos gráficos, solo está utilizando uno (o como máximo dos) de los núcleos de su CPU; entonces su aplicación definitivamente no está vinculada a la CPU ... o lo está, pero es incapaz de aprovechar múltiples CPU. Además, toda esa memoria utilizada para "caché" no es realmente necesaria para nadie, es solo el sistema operativo que se aprovecha porque "está ahí".
Massimo
¿Cómo puedo encontrar información sobre el uso de todos los núcleos de la CPU? Estoy usando la lámpara ...
En primer lugar, debe verificar si no los está usando porque simplemente no hay ninguna necesidad de ellos (= baja carga), porque sus operaciones no se pueden paralelizar adecuadamente o porque su MySQL y / o Apache no están configurados para usalos, usalos a ellos. Y, dado que esos dos programas generalmente son multiproceso por defecto, echaría un vistazo a la carga de su servidor y a sus consultas SQL ...
Massimo
3

Como comentó Ignacio, es posible que desee considerar el almacenamiento en caché. En el cms o tal vez incluso en frente de la pila. Más de 50 consultas para cada (¡cada!) Página realmente es mucho.

Joris
fuente
Sí, este es un sitio web complejo, es una comunidad, no puedo almacenar en caché nada, está cambiando cada segundo. Traté de almacenar en caché las páginas, pero el índice de aciertos de caché fue casi 0, ya que cada vez que guardo en caché una página, nunca se puede leer de nuevo, o puede cambiar antes de que se abra nuevamente. gracias
44
Hay muy pocos sitios que no se pueden conectar; si solo cambia cada segundo, aún puede almacenar en caché durante un segundo entero, como 10 páginas vistas ;-) ¿Ha considerado no almacenar en caché las páginas por completo, sino bloques o valores específicos, etc.? Puede almacenar en caché fuera de la base de datos, en segmentos de memoria compartida, sistema de archivos, memcached. Además, normalmente en una situación así, ESI podría ser útil
Joris, el
0

A juzgar por sus comentarios, el factor más importante será el tamaño de su conjunto de datos, o al menos el tamaño del conjunto de datos "en caliente". 3,000qps o incluso 8,000qps en un servidor de 16 núcleos no es un problema en absoluto, siempre y cuando el servidor rara vez tenga que ir al disco para satisfacer la consulta. Una vez que el conjunto de datos activo excede la cantidad de memoria que InnoDB está utilizando para almacenarlo en caché, su rendimiento disminuirá rápidamente.

Elliott
fuente
0

Para grandes conjuntos de datos "activos", probablemente valga la pena invertir tiempo en convertirlos en un esquema de "grandes datos", para eso están destinados. Por ejemplo, si tiene una gran cantidad de datos para recuperar, pero nunca reescribe, sino que solo agrega datos nuevos, mire Apache Hive. Examine, generalmente es un sabor que puede interactuar fácilmente con el código existente, lo que también evitará que se agote el espacio del caché.

BHGalyean
fuente
0

Hay demasiadas cosas que pueden afectar sus consultas por segundo, no confíe en mis datos sin probarse usted mismo. Publico el resultado de mi prueba de velocidad aquí para ayudar a alguien a estimar el qps con la base de datos y la máquina mysql actual (2018-09). En mi prueba, el tamaño de los datos es menor que la memoria del servidor (eso reduce drásticamente la E / S y mejora mucho el rendimiento).

Uso una memoria de una cpu 3.75GB, 100GB ssd, instancia de servidor mysql en la nube gcp y obtengo:

  • 1 cliente, un sql, una fila leída: 799 sql / segundo.
  • 50 clientes, un sql, una fila leída: 6403 sql / segundo.
  • 50 clientes, un sql una fila de escritura: 4341 filas escritas, qps. 4341 sql / segundo.
  • 1 cliente, 30k filas escritas por sql: 92109 filas escritas / s.
hombre de bronce
fuente
escriba el resultado de la prueba qps (2018-11) gcp mysql 2cpu 7.5GB memoria 150GB ssd serialización escriba 10 hilos, 30k fila de escritura por sql, tabla de 7.0566GB, la longitud de la clave de datos es de 45 bytes y la longitud del valor es de 9 bytes, obtenga 154KB de filas escritas por segundo, CPU 97.1% escribe qps 1406 / s en la consola gcp.
hombre de bronce el