2009-07-30 32 views
21

Actualmente estamos utilizando 4 ventanas de caja de CPU con 8 gb de RAM con MySQL 5.x instalado en el mismo cuadro. Estamos utilizando el servidor de aplicaciones Weblogic para nuestra aplicación. Estamos apuntando a 200 usuarios simultáneos para nuestra aplicación (obviamente no para el mismo módulo/pantalla). Entonces, ¿cuál es el número óptimo de conexiones que deberíamos configurar en el conjunto de conexiones (número mínimo y máximo) (estamos utilizando el mecanismo de agrupación de conexiones AS 'weblogic')?Número óptimo de conexiones en el grupo de conexiones

+0

Esta pregunta probablemente pertenece en serverfault. – Elijah

+1

@Elijah - Su gran pregunta relacionada con la programación. La descripción del cofre de H/W es para detallar el problema. SO es el lugar perfecto para esta pregunta. –

+0

Sugeriría 4 (CPU) dividido por la espera% por ciento de tiempo. Sugiero MAX no más de 50 conexiones en paralelo, probablemente menos. Su CPU solo puede ejecutar 4 hilos a la vez, ninguna cantidad de configuración puede superar eso. La única forma en que ayuda es manejar esperas IO, que depende de su aplicación. – jasonk

Respuesta

6

Hay una respuesta muy simple a esta pregunta:

El número de conexiones en la agrupación de conexiones debe ser igual al número de los hilos exec configurados en WebLogic.

El razonamiento es muy simple: si el número de conexiones es menor que el número de subprocesos, algunos de los subprocesos tal vez esperen una conexión, lo que hace que el grupo de conexiones sea un cuello de botella. Por lo tanto, debe ser igual al menos el número de subprocesos del ejecutor (tamaño del grupo de subprocesos).

6

Usted debe perfilar los diferentes flujos de trabajo previstos para averiguar. Idealmente, su grupo de conexiones también ajustará dinámicamente la cantidad de conexiones en vivo según el uso reciente, ya que es bastante común que la carga sea una función de la hora actual del área geográfica de destino.

comenzar con un número pequeño y tratar de llegar a un número razonable de usuarios concurrentes, a continuación, poner encima. Creo que es probable que descubra que su mecanismo de agrupación de conexiones no es tan instrumental en su escalabilidad como el resto del software.

+1

+1 como creo que estoy descubriendo "Creo que es probable que encuentre que su mecanismo de agrupación de conexiones no es tan instrumental en su escalabilidad como el resto del software" – wmorrison365

1

Esto es algo que tiene que ser probado y determinado de forma individual - es casi imposible dar una respuesta precisa para sus circunstancias sin estar íntimamente familiarizado con ellos.

+0

¿Hay alguna fórmula/mecanismo por el cual puede obtener una cantidad aproximada de conexiones en el grupo de conexiones? –

+1

Probablemente desee comenzar cualquier cálculo determinando cuántas transacciones concurrentes (o usuarios) realmente puede esperar –

1

Es difícil obtener datos concretos para esto. Es también depende de una serie de factores que no mencionan -

  • 200 usuarios concurrentes, pero ¿cuánto de su actividad generará consultas a la base? ¿10 consultas por carga de página? 1 consulta solo al iniciar sesión? etc., etc.

  • Tamaño de las consultas y el PP obviamente. Algunas consultas se ejecutan en milisegundos, algunas en minutos.

Puede supervisar MySQL para ver las consultas activas actuales con "show processlist". Esto podría darle una mejor idea de cuánta actividad realmente está sucediendo en el DB bajo carga máxima.

+0

Es casi 1 consulta por página con un máximo de 3000 registros por consulta. –

2

La agrupación de conexiones debe ser capaz de crecer y Shink basado en las necesidades reales. Registre los números necesarios para hacer análisis en el sistema en ejecución, ya sea a través de declaraciones de registro o a través de la vigilancia JMX. Considere configurar alertas para escenarios como "pico detectado: más de X nuevas entradas tuvieron que ser asignadas en Y segundos", "la conexión estuvo fuera de la piscina por más de X segundos" lo que le permitirá prestar atención a problemas de rendimiento antes de que lleguen problemas reales

45

¿De verdad quiso decir 200 concurrentes usuarios o solo 200 usuarios registrados? En la mayoría de los casos, un usuario del navegador no podrá hacer más de 1 solicitud de página por segundo. Entonces, 200 usuarios traducen a 200 transacciones por segundo. Ese es un número bastante alto para la mayoría de las aplicaciones.

En cualquier caso, como ejemplo, vamos a ir con 200 transacciones por segundo. Digamos que cada parte delantera (navegador) tx tarda 0.5 segundos en completarse y de los 0.5 segundos, 0.25 se gastan en la base de datos. Por lo tanto, necesitaría 0.5 * 200 o 100 conexiones en el conjunto de temas de WebLogic y 0.25 * 200 = 50 conexiones en el grupo de conexiones de base de datos.

Para estar seguro, me gustaría indicar el tamaño de grupo de subprocesos máximo de al menos un 25% mayor de lo esperado para permitir picos de carga. Los mínimos pueden ser una pequeña fracción del máximo, pero la compensación es que podría llevar más tiempo para algunos usuarios porque se tendría que crear una nueva conexión. En este caso, 50 - 100 conexiones no son muchas para una base de datos, por lo que probablemente sea un buen número inicial.

Tenga en cuenta que para averiguar cuáles son sus tiempos de respuesta de transacción promedio, junto con su tiempo promedio de consulta de base de datos, tendrá que hacer una prueba de rendimiento porque sus tiempos de carga probablemente no serán los tiempos ver con un solo usuario.

+1

bien explicado. :) –

Cuestiones relacionadas