Cuando configuras MaxRequestsPerChild a 500 estás indicando que un proceso child debe morir después de recibir 500 request, esto de matar el proceso y volver a crear uno nuevo es una tarea costosa para el CPU por esta razón se consume menos CPU afinando a valores más altos o incluso ilimitados (0) pero a costa de la memoria ya que más procesos estarán activos simultáneamente, yo probaría con 50.000, la única razón para no dejarlo ilimitado es que si hay algún script fuera de control puede agotar la memoria (memory leak) pero 50.000 es un número que debe dar buen rendimiento con moderado uso de recursos.
Si te defiendes bien con el Ingles creo que esta web es lo mejor que hay en cuanto a optimización MySQL
http://www.mysqlperformanceblog.com/
Otras sugerencias más esotéricas:
echo deadline > /sys/block/sda/queue/scheduler
echo deadline > /sys/block/sdb/queue/scheduler
echo 20 > /proc/sys/vm/dirty_background_ratio
echo 60 > /proc/sys/vm/dirty_ratio
blockdev --setra 16384 /dev/sda
blockdev --setra 16384 /dev/sdb
El primer bloque cambiará el scheduler del disco por uno más eficiente
El segundo bloque optimizará la memoria virtual
El último ampliará el cache de discos (excelente para MySQL)
Nada de esto hará cambios permanentes solo pruebalos y si ves mejoría te diré como hacer que los cambios sean permanentes
Por último:
cp /etc/sysctl.conf /etc/sysctl.conf/bak (hacemos un backup)
vi /etc/sysctl.conf (editamos el archivo)
/etc/sysctl.conf
introduces o cambias los valores si ya existen:
net.ipv4.tcp_keepalive_probes = 2
net.ipv4.tcp_keepalive_intvl = 30
Guardas los cambios con ESC : wq
y usas el comando sysctl -p
Acabas de optimizar los tcp para alto rendimiento :)
En nuestros servidores de hosting compartido utilizamos
LiteSpeed, es de pago pero bien vale el precio duplica el rendimiento de apache a la vez que baja la carga a la mitad y es totalmente compatible con cPanel