¿Cómo proteger una base de datos con datos críticos de la arbitrariedad de las consultas lentas?

Situación: hay un servidor de combate, en él hay un servidor web y MySQL. En primer lugar, los scripts PHP que se ejecutan bajo Apache en este servidor interactúan con el músculo, y en segundo lugar, los usuarios remotos a través de TCP. Trabajan con la misma base. Sin embargo, el rendimiento del paquete "apache local más muskl" es crítico, y no lo es "usuarios remotos más muskl".


Un usuario "eliminado" inicia una consulta torpe, por ejemplo, una selección REGEXP para una columna no indexada de 20 millones de filas. Al mismo tiempo, en un lapso de 3-5 minutos, todas las demás solicitudes a esta base de datos, que normalmente vuelan, disminuyen la velocidad. Como resultado, un elemento web crítico deja de responder a una velocidad aceptable. ¿Cómo hacer para que los usuarios remotos puedan enviar solicitudes de mierda sin dañar el funcionamiento de las conexiones locales a la base de datos? "Lokalka" y "remotos" se conectan a la base de datos por diferentes usuarios. Extienda la base en dos, la opción no es adecuada. Hay un margen de rendimiento en el servidor (8 núcleos, 24 gigabytes de memoria).

El problema se resolvió parcialmente con un aumento significativo en max_connections (predeterminado 151) y back-log (predeterminado 50) en my.cnf, lo que nos permitió utilizar completamente la reserva de energía del servidor, aumentando significativamente el umbral inicial de frenos. - j
Respuestas
krystina
Saque la lectura para los usuarios remotos en el servidor esclavo (se puede colocar en el mismo hardware, solo use un disco duro separado) y escriba al maestro. Puede dividir la lectura y la escritura con la ayuda de mysql proxy forge.mysql.com/wiki/MySQL_Proxy_RW_Splitting.
en esta codificación de script estúpido no se guarda. es decir, los nombres de los conjuntos no se utilizarán durante la segunda conexión. - eva warner
lisa nelson
, puede configurar la replicación (el libro de tareas no indica si los clientes remotos cambiarán la base de datos): el maestro dará trabajo al servidor local, y los clientes remotos y el proceso de eliminación del archivo para la copia de seguridad se enviarán desde el esclavo. Así, por ejemplo, una pregunta con una copia de seguridad de datos con tablas de más de 1 millón. los registros se dirigen mejor a través de una apelación al servidor esclavo.
(el primer comentario revela mejor la pregunta) - paul
geta t
Para escribir un demonio que verifique las consultas musculares actuales en un usuario remoto a la frecuencia requerida, y las derriba si se han demorado más de ...
Todo lo que patearías. La condición del problema no es que sean solicitudes inútiles. - mary dawn
La condición establece que "la funcionalidad de los usuarios eliminados del paquete más la muskl no es crítica" - jordan halsey
roxannap
Separe la base en dos, no me gusta la opción. y ¿por qué es necesario dividirlo en dos, como ya se dijo para separar a un esclavo separado o no es parte de sus planes construir un sistema esclavo maestro? Porque de esta forma no solo aumenta la velocidad sino también la fiabilidad. Sí, por supuesto, necesitará la capacidad de diseñar y resolver todos estos problemas de sincronización, pero el resultado puede superar sus expectativas.
chase carter
use Sphinx
¿Qué tiene que ver con eso? - jennifer lynn
las consultas lentas funcionarán más rápido. - jim harden
rodgine
Creo que los tornillos scsi / sas de alta velocidad pueden ayudar con el hierro y, desde la optimización del software, sort_cache, random_cache, etc. pueden ayudar.
barbara mccord
Me parece, como ingeniero de empresas, que generalmente es algo descabellado para los usuarios que no son desarrolladores / ingenieros de soporte, y que no conocen bien el SQL y las bases de datos "en general" tienen acceso directo a nivel de SQL a una base de datos grande y cargada con datos críticos (por cierto, ¿Significa acceso a través de TCP? ¿Se refería a la posibilidad de iniciar consultas manualmente desde clientes mysql, como SQLYog?)

¿Lo necesita para que sus usuarios puedan lanzar sus propias solicitudes escritas de forma torcida? ¿No pueden llevarse bien con un conjunto de solicitudes de informes encabezadas, o algo así? ¿No pueden enviar solicitudes que desean cumplir, tío competente especial que los revisará y ejecutará? ¿Y cómo evitar eliminaciones involuntarias y así sucesivamente? ¿Los usuarios tienen privilegios de solo lectura en todos los objetos de la base de datos?

Si es tan crítico para otorgarle a los usuarios dicho acceso ... Entonces, como dijeron aquí, cree un servidor esclavo con replicación, o configure cuotas de recursos de usuarios sobre el uso de la CPU, el ancho de banda de E / S, la memoria para cada usuario (bajo la cual los usuarios se conectan a la base de datos). ). Yo mismo en mysql no es fuerte, porque no sé cómo es con las cuotas de recursos.