Optimizar my.cnf vps 4 GB de RAM

  • Autor Autor xaiborweb
  • Fecha de inicio Fecha de inicio
xaiborweb

xaiborweb

Programador
No recomendado
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
hola compañeros tengo un vps con la siguientes.

características: KVM OpenStack, 1 vCore(s) 2.4 GHz, 4 GB de RAM 40 GB SSD, linux ubuntu 16 y panel de control vestacp

estoy corriendo una base de datos de 2 gb con pocas tablas pero algunas con 5 millones de registros y alrededor de 50 usuarios activos constantemente, la peticiones son muy lentas y como no soy muy experto en el tema les agradecería si me ayudan a optimizar y mejorar el rendimiento mysql.

HTML:
[client]
port=3306
socket=/var/run/mysqld/mysqld.sock

[mysqld_safe]
socket=/var/run/mysqld/mysqld.sock

[mysqld]
sql_mode=ONLY_FULL_GROUP_BY,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
user=mysql
pid-file=/var/run/mysqld/mysqld.pid
socket=/var/run/mysqld/mysqld.sock
port=3306
basedir=/usr
datadir=/var/lib/mysql
tmpdir=/tmp
lc-messages-dir=/usr/share/mysql
log_error=/var/log/mysql/error.log

symbolic-links=0

skip-external-locking
key_buffer_size = 512M
max_allowed_packet = 512M
table_open_cache = 512
sort_buffer_size = 2M
net_buffer_length = 32K
read_buffer_size = 2M
read_rnd_buffer_size = 4M
myisam_sort_buffer_size = 64M
tmp_table_size = 64M
max_heap_table_size = 32M
query_cache_size = 64M
query_cache_limit = 4M

#innodb_use_native_aio = 0
innodb_file_per_table

max_connections=200
max_user_connections=60
wait_timeout=120
interactive_timeout=60
long_query_time=5

!includedir /etc/mysql/conf.d/

gracias 😉
 
Pues va a depender que optimizado esta la base de datos y que tipo de web es, no es tan simple de solo dar valores hay que tomar muchas cosas en cuenta.

Podes comenzar con esto.

Insertar CODE, HTML o PHP:
[client]
port=3306
socket=/var/run/mysqld/mysqld.sock

[mysqld_safe]
socket=/var/run/mysqld/mysqld.sock

[mysqld]
sql_mode=ONLY_FULL_GROUP_BY,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
user=mysql
pid-file=/var/run/mysqld/mysqld.pid
socket=/var/run/mysqld/mysqld.sock
port=3306
basedir=/usr
datadir=/var/lib/mysql
tmpdir=/tmp
lc-messages-dir=/usr/share/mysql
log_error=/var/log/mysql/error.log
slow_query_log_file=/var/log/mysql/slow.log

symbolic-links=0

skip-external-locking
key_buffer_size = 32M
max_allowed_packet = 32M
table_open_cache = 512
sort_buffer_size = 2M
net_buffer_length = 32K
read_buffer_size = 2M
read_rnd_buffer_size = 4M
myisam_sort_buffer_size = 64M
tmp_table_size = 64M
max_heap_table_size = 64M
query_cache_size = 16M
query_cache_limit = 1M

#innodb_use_native_aio = 0
innodb_buffer_pool_size = 2048M
innodb_log_file_size = 256M
innodb_log_buffer_size = 8M
innodb_log_files_in_group = 2
innodb_buffer_pool_instances = 2
innodb_file_per_table

max_connections=200
max_user_connections=60
wait_timeout=120
interactive_timeout=60
slow_query_log = 1
long_query_time= 5

!includedir /etc/mysql/conf.d/

Si quieres ver que queries están "lentas" podes revisar esto en el archivo slow.log para que tengas una idea que es lo que esta mal y como solucionarlo.

UN DBA te puede orientar mejor.
 
Última edición:
¿Tienes las tablas indexadas? También debes mirar si te conviene más usar innodb o myisam
 
¿Tienes las tablas indexadas? También debes mirar si te conviene más usar innodb o myisam

pues no se mucho del tema pero la creación de las tablas las hice asi
HTML:
CREATE TABLE `link_movies_es` (
 `id` int(12) NOT NULL AUTO_INCREMENT,
 `id_movie` int(10) NOT NULL,
 `tipo` int(1) NOT NULL,
 `url` varchar(120) COLLATE utf8_unicode_ci NOT NULL,
 `audio` varchar(3) COLLATE utf8_unicode_ci NOT NULL,
 `calidad` int(1) NOT NULL,
 `fecha` date NOT NULL,
 `id_user` int(7) NOT NULL,
 `reportado` int(1) NOT NULL,
 PRIMARY KEY (`id`),
 UNIQUE KEY `url` (`url`),
 UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1479366 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
creo que son InnoDB
 
pues no se mucho del tema pero la creación de las tablas las hice asi
HTML:
CREATE TABLE `link_movies_es` (
 `id` int(12) NOT NULL AUTO_INCREMENT,
 `id_movie` int(10) NOT NULL,
 `tipo` int(1) NOT NULL,
 `url` varchar(120) COLLATE utf8_unicode_ci NOT NULL,
 `audio` varchar(3) COLLATE utf8_unicode_ci NOT NULL,
 `calidad` int(1) NOT NULL,
 `fecha` date NOT NULL,
 `id_user` int(7) NOT NULL,
 `reportado` int(1) NOT NULL,
 PRIMARY KEY (`id`),
 UNIQUE KEY `url` (`url`),
 UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1479366 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
creo que son InnoDB

Reo que lo mejor que puedes hacer es buscar a alguien que te lo haga. Es fácil pero mejor pagar y tenerlo bien hecho que ponerte a investigar y cagarla.
 
Con 5 millones de registros y 50 usuarios simultáneos algo no esta bien allí... Primero, para que tantos millones de registros por tan pocos usuarios?

Es por ahí que debes empezar, siendo un crap o auto publisher, entonces este tipo de cosas considera tomar en cuenta que no van tan lejos...
 
supuestos ... disco ( es ssd ) ram ( un poco acotada ) la bd .. puede ser que necesite reajustes internos ... seteo de mysql ... habras al menos corrido un mysqltuner para que te alguna orientacion y el resto del sistema ( web so como anda la carga )
 
Pues va a depender que optimizado esta la base de datos y que tipo de web es, no es tan simple de solo dar valores hay que tomar muchas cosas en cuenta.
Con 5 millones de registros y 50 usuarios simultáneos algo no esta bien allí... Primero, para que tantos millones de registros por tan pocos usuarios? Es por ahí que debes empezar, siendo un crap o auto publisher, entonces este tipo de cosas considera tomar en cuenta que no van tan lejos...
supuestos ... disco ( es ssd ) ram ( un poco acotada ) la bd .. puede ser que necesite reajustes internos ... seteo de mysql ... habras al menos corrido un mysqltuner para que te alguna orientacion y el resto del sistema ( web so como anda la carga )

hola gracias por su ayuda ya esta mucho mejor la carga mysql dejo mi configuración por si alguien la quiere probar.

HTML:
[client]
port=3306
socket=/var/run/mysqld/mysqld.sock

[mysqld_safe]
socket=/var/run/mysqld/mysqld.sock

[mysqld]
sql_mode=ONLY_FULL_GROUP_BY,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
user=mysql
default_storage_engine=InnoDB
innodb=FORCE
pid-file=/var/run/mysqld/mysqld.pid
socket=/var/run/mysqld/mysqld.sock
port=3306
basedir=/usr
datadir=/var/lib/mysql
tmpdir=/tmp
lc-messages-dir=/usr/share/mysql
log_error=/var/log/mysql/error.log
expire_logs_days=5
performance_schema=off

symbolic-links=0

skip-external-locking
key_buffer_size = 64M
max_allowed_packet = 64M
max_connect_errors = 1000000
table_open_cache = 512
sort_buffer_size = 2M
net_buffer_length = 32K
read_buffer_size = 2M
read_rnd_buffer_size = 4M
myisam_sort_buffer_size = 64M
tmp_table_size = 64M
max_heap_table_size = 64M
query_cache_size = 16M
query_cache_limit = 1M
query_cache_type = 1

innodb_flush_method = O_DIRECT
innodb_buffer_pool_size = 2G
innodb_log_file_size = 256M
innodb_log_buffer_size = 16M
innodb_log_files_in_group = 2
innodb_buffer_pool_instances = 2
innodb_file_per_table = 1

max_connections=1000
max_user_connections=500
wait_timeout=100
interactive_timeout=100
long_query_time=5

!includedir /etc/mysql/conf.d/
 
yo correría un tuning-primer y un mysqltuner mañana ... y miraría que nos dice la cosa ... asi al ojo .. te diria que esos parametros sobrepasan bastante la ram que tienes disponible
 
Última edición:

Temas similares

Atrás
Arriba