11

Estoy trabajando en la aplicación basada en opensource Java, es decir, xwiki. Insie hibernate.cfg.xml Puedo ver el valor de parametrs connection.pool_size y statement_cache.siz como 2 (para cada uno). Mi aplicación tendrá una carga máxima de 100 usuarios en el momento. Ahora mi pregunta es qué debería ser el tamaño ideal de la piscina de conexión para esto. Para mí, el tamaño 2 parece mucho menos. Si se conectan 100 usuarios a la vez, 98 usuarios tienen que esperar a que se libere la conexión ? ¿Debo mantener el tamaño del grupo de conexiones como 100 en mi caso?Pensando en la decisión del tamaño del grupo de conexiones de la base de datos

estoy usando microsoft sql server.

Además de esto, existe un límite en el tamaño máximo de la agrupación de conexiones. ¿Depende del servidor web (tomcat en mi caso) o del proveedor del almacén de datos (ms sql server)?

+0

También piense en cuántas conexiones puede admitir el servidor. – Thilo

+0

Q1: ¿Cuántas CPU tiene ?, Q2: ¿Sus consultas son relativamente IO (OLTP - latencia) o CPU pesadas (SORT, GROUP, analytics)? – jasonk

+0

Tenga en cuenta que el grupo puede costar en términos de memoria –

Respuesta

3

Si una solicitud típica gasta el 50% de su tiempo haciendo cálculos y el 50% en la conectividad de la base de datos, es posible que solo necesite 50 conexiones en su grupo. Por supuesto, su aplicación debería liberar la conexión db lo antes posible.

En general, mantener una conexión no es costoso para una base de datos (mientras que la creación de una nueva es bastante costosa). No debería ser un problema mantener el tamaño lo suficientemente alto.

Puede establecer

  • máximo tamaño de la piscina a 100
  • tamaño de la agrupación preferida a 50
  • y el tiempo de espera a 5 minutos para que los grupos de conexiones.

No estoy familiarizado con el servidor Microsoft SQL pero creo que es max pool limit is 100

Tomcat va a estar bien con este número de tamaño de la piscina.

+0

Gracias imran por respuesta. Como usted dijo: -Si una solicitud típica gasta el 50% de su tiempo en cálculos y el 50% en conectividad con la base de datos, puede necesitar solo 50 conexiones en su grupo. ¿Qué pasa si los 100 usuarios necesitan la conexión al mismo tiempo? Estoy de acuerdo en la mayoría de los escenarios, no será el caso. Es el peor escenario. Pero creo que el cálculo que usted indicó supone que estas primeras 50 solicitudes necesitarán la conexión en los primeros .5 segundos y el resto en los siguientes .5 segundos. ¿DERECHO? –

2

Debe evaluar el requisito de concurrencia de la aplicación, el tiempo de operación de la base de datos y también cuántas conexiones puede admitir el servidor (o db vendedor).

Así que 100 los usuarios no significa que necesita un pool de conexiones con el tamaño 100.

8

Dimensionamiento agrupación de conexiones no es una cosa trivial para hacerlo. Usted necesita básicamente:

  • métricas para investigar el uso de la conexión
  • mecanismos de conmutación por error para cuando no hay conexión disponible

FlexyPool tiene como objetivo ayudarle a calcular el tamaño correcto de nuestro grupo de conexiones.

debes revisar los siguientes artículos:

0

Tenga en cuenta que la piscina puede costar memoria para nada i f no usado. La configuración de la agrupación depende en gran medida de dónde está el cuello de botella:

CPU, memoria, disco, red, consultas de bases de datos complejas, concurrencia alta, ... ¿muchas de esas?

El tamaño del grupo predeterminado suele ser de 5 a 10. Primero asegúrese de tener un problema con la base de datos. Pruebe extremos como 2 o 30 bajo carga artificial y vea cómo se comporta. Creo que los enlaces proporcionados por @ vlad-mihalcea son bastante interesantes.

Cuestiones relacionadas