2011-12-29 11 views
8

recientemente descubierto mi servidor MySQL golpea alta de la CPU 90% cuando se simula sobre concurrentes 100-500 hilos solicitarthread_cache_size reduce la CPU y la conexión máxima?

con la configuración predeterminada además siguiente en my.cnf

max_connections = 500 
max_allowed_packet = 16M

noto la max_connection puede golpear hasta 500, Threads_created también se puede ir a alta 200-500 y estoy pensando que esto realmente ha causar anormalmente elevado de la CPU

de ahí que en lugar de utilizar la configuración predeterminada i ajustado

innodb_buffer_pool_size = 2G #32bit linux server 
innodb_log_file_size = 256M 
innodb_log_buffer_size = 8M 
innodb_thread_concurrency = 16 
innodb_flush_method = O_DIRECT 
innodb_additional_mem_pool_size = 20M 
table_cache = 1028 
thread_cache_size = 16 
key_buffer_size=32M 
query_cache_size=32M 
join_buffer_size=1M 

Con la misma prueba de carga, la CPU se bajó al 10% y por debajo ... Sin embargo, noto que la conexión máxima nunca llega a 500 más. Ahora es menos de 50 ...

¿Esto es causado por thread_cache_size que he ajustado? por defecto es 0. O hay algo mal en algún lugar ... Me pregunto en ese caso si el servidor mysql está correctamente probado con la conexión máxima. Quiero probar cómo si los subprocesos simultáneos pueden alcanzar max_connections, pero de alguna manera nunca se golpea con la misma cantidad que probé antes. Desde el cambio, nunca llega a los 50 ahora.

¿Alguna idea?

+0

Sé que es demasiado tarde para preguntar, pero ¿cuál era su configuración anterior, es decir, el valor anterior de los parámetros anteriores? – ursitesion

Respuesta

1

La creación de nuevos subprocesos (ya que supongo que su aplicación no utiliza la agrupación de conexiones) toma una cantidad decente de sobrecarga. Con MySQL reutilizando subprocesos de esta manera (hasta 16 de ellos) ya no utiliza la CPU adicional para crear subprocesos con tanta frecuencia y también es probable que finalice las operaciones de manera oportuna, por lo tanto, cierre la conexión más rápido y por lo tanto mantenga menos conexiones abiertas a la vez.

Sólo una conjetura :-)

0

La utilización del

innodb_thread_concurrency = 16 

es un jugador importante en la actividad limitante. Ver

https://dev.mysql.com/doc/refman/5.6/en/innodb-parameters.html#sysvar_innodb_thread_concurrency

para obtener recomendaciones detalladas explicación y prueba.

El valor predeterminado era 0 = uso ilimitado de innodb_threads concurrentes, pero el peligro es sobrecargar el cambio de contexto de su sistema para tantos innodb_threads activos que se ejecutan simultáneamente.

Cuestiones relacionadas