soporta segundo por para optimizar mucha memoria grandes datos cuantas consume consultas cnf cantidades aumentar mysql memory ram

mysql - segundo - optimizar mariadb



Uso máximo de memoria de MySQL (5)

Me gustaría saber cómo es posible establecer un límite superior en la cantidad de memoria que MySQL usa en un servidor Linux.

En este momento, MySQL seguirá ocupando memoria con cada nueva consulta solicitada para que eventualmente se quede sin memoria. ¿Hay alguna manera de establecer un límite para que MySQL no use más de esa cantidad?


El uso de la memoria de la base de datos es un tema complejo. El MySQL Performance Blog hace un buen trabajo al cubrir su pregunta, y enumera muchas razones por las cuales es muy poco práctico "reservar" la memoria.

Si realmente desea imponer un límite estricto, podría hacerlo, pero tendría que hacerlo en el nivel del sistema operativo ya que no hay una configuración incorporada. En Linux, puede utilizar ulimit , pero es probable que tenga que modificar la forma en que se inicia MySQL para imponer esto.

La mejor solución es sintonizar su servidor, de modo que una combinación de las configuraciones de memoria MySQL usuales resultará en un uso de memoria generalmente menor por su instalación de MySQL. Esto, por supuesto, tendrá un impacto negativo en el rendimiento de su base de datos, pero algunas de las configuraciones que puede modificar en my.ini son:

key_buffer_size query_cache_size query_cache_limit table_cache max_connections tmp_table_size innodb_buffer_pool_size

Empezaría allí y vería si puede obtener los resultados que desea. Hay many articles sobre cómo ajustar la configuración de memoria de MySQL.

Editar:

Tenga en cuenta que algunos nombres de variables han cambiado en las versiones 5.1.x más recientes de MySQL .

Por ejemplo:

table_cache

Es ahora:

table_open_cache


El uso máximo de memoria de MySQL depende mucho del hardware, su configuración y la base de datos en sí.

Hardware

El hardware es la parte obvia. Cuanta más RAM, mejor, discos más rápidos ftw . Sin embargo, no creas esas cartas de noticias mensuales o semanales. MySQL no escala linealmente, ni siquiera en hardware Oracle. Es un poco más complicado que eso.

La conclusión es: no hay una regla general para lo que se recomienda para su configuración de MySQL. Todo depende del uso actual o las proyecciones.

Configuración y base de datos

MySQL ofrece innumerables variables e interruptores para optimizar su comportamiento. Si tiene problemas, realmente necesita sentarse y leer el manual (f''ing).

En cuanto a la base de datos, algunas limitaciones importantes:

  • motor de tabla ( InnoDB , MyISAM , ...)
  • tamaño
  • índices
  • uso

La mayoría de los consejos de MySQL sobre le informarán acerca de 5-8 los llamados ajustes importantes. En primer lugar, no todos son importantes, por ejemplo, asignar muchos recursos a InnoDB y no usar InnoDB no tiene mucho sentido porque esos recursos se desperdician.

O bien, muchas personas sugieren subir la variable max_connection ; bueno, poco saben que también implica que MySQL asignará más recursos para atender esos max_connections , si es que alguna vez lo necesita. La solución más obvia podría ser cerrar la conexión de la base de datos en su DBAL o bajar el wait_timeout para liberar esos hilos.

Si entiendes mi deriva, hay mucho, mucho que leer y aprender.

Motores

Los motores de mesa son una decisión bastante importante, muchas personas se olvidan de ellos desde el principio y de repente se encuentran luchando con una mesa MyISAM 30 GB que bloquea y bloquea toda su aplicación.

No quiero decir que MyISAM es una mierda , pero InnoDB puede ajustarse para responder casi o casi tan rápido como MyISAM y ofrece el bloqueo de filas en UPDATE mientras que MyISAM bloquea toda la tabla cuando se escribe en ella.

Si tiene la libertad de ejecutar MySQL en su propia infraestructura, también puede consultar el servidor de Percona porque incluye muchas contribuciones de compañías como Facebook y Google (lo saben rápido), y también incluye las de Percona. en reemplazo de InnoDB , llamado XtraDB .

Ver mi esencia para la configuración percona-server (y -client) (en Ubuntu): http://gist.github.com/637669

tamaño

El tamaño de la base de datos es muy, muy importante. Lo crea o no, la mayoría de las personas en los Intarwebs nunca han manejado una configuración de MySQL grande y de escritura intensa, pero realmente existen. Algunas personas troll y dicen algo como, "¡Use PostgreSQL !!! 111", pero ignorémoslas por el momento.

La conclusión es: a juzgar por el tamaño, se tomará una decisión sobre el hardware. Realmente no se puede ejecutar rápidamente una base de datos de 80 GB con 1 GB de RAM.

Índices

No lo es: cuanto más, mejor. Solo se deben establecer los índices necesarios y el uso debe verificarse con EXPLAIN . Agregue a eso que EXPLAIN de MySQL es realmente limitado, pero es un comienzo.

Configuraciones sugeridas

Acerca de estos archivos my-large.cnf y my-medium.cnf , ni siquiera sé para quién fueron escritos. Tira el tuyo.

Primer de sintonización

Un buen comienzo es el cebador de afinación . Es un script bash (sugerencia: necesitarás linux) que toma el resultado de SHOW VARIABLES y SHOW STATUS y lo envuelve en una recomendación útil. Si su servidor se ha ejecutado algún tiempo, la recomendación será mejor, ya que habrá datos para basarlos.

Sin embargo, la imprimación de afinación no es una salsa mágica. Aún debe leer todas las variables que sugiere cambiar.

Leyendo

Realmente me gusta recomendar el mysqlperformanceblog . Es un gran recurso para todo tipo de consejos relacionados con MySQL. Y no solo es MySQL, también saben mucho sobre el hardware correcto o recomiendan configuraciones para AWS, etc. Estos tipos tienen años y años de experiencia.

Otro gran recurso es planet-mysql , por supuesto.


Usamos estas configuraciones:

etc/my.cnf innodb_buffer_pool_size = 384M key_buffer = 256M query_cache_size = 1M query_cache_limit = 128M thread_cache_size = 8 max_connections = 400 innodb_lock_wait_timeout = 100

para un servidor con las siguientes especificaciones:

Dell Server CPU cores: Two Processor(s): 1x Dual Xeon Clock Speed: >= 2.33GHz RAM: 2 GBytes Disks: 1×250 GB SATA


en /etc/my.cnf :

[mysqld] ... performance_schema = 0 table_cache = 0 table_definition_cache = 0 max-connect-errors = 10000 query_cache_size = 0 query_cache_limit = 0 ...

Buen trabajo en el servidor con 256 MB de memoria.


mysqld.exe estaba usando 480 mb en RAM. Descubrí que agregué este parámetro a my.ini

table_definition_cache = 400

eso redujo el uso de memoria de 400,000+ kb a 105,000kb