
Si bien a menudo ejecutamos MySQL en sistemas de mayor escala en producción para pruebas y desarrollo, a veces queremos ejecutar MySQL en las instancias de nube más pequeñas posibles o simplemente ejecutarlo en nuestras computadoras portátiles. En estos casos, el consumo de memoria de MySQL 8 y MySQL 5.7 es bastante significativo.
Al comparar MySQL 8 con MySQL 5.7, debe saber que MySQL 8 usa más memoria. Pruebas basadas en una máquina virtual de 1 GB con MySQL 8 y MySQL 5.7 (en realidad, versiones de Percona Server) que ejecutan la misma carga de trabajo ligera; consulte el siguiente resultado de vmstat:
Salida MySQL 5.7 vmstat
procs ———– memoria ———- — intercambio– —– io —- -sistema– —— cpu —– RB WPD Free Buff Cacate Sí Luego BA en CS EEUU SY 1 05 89352 24 05 8935 18 9 188280 689288 187880 68288 187580 68288 187580 68288 08280 68288 08280 68288 08288 188280 19 9 13 30 29 3 1 65280 67780 5 1 65280 67780 5636 249656 0 0 2562 3924 0 0 2562 3924 1883 9323 20 9 7 37 27 4 1 65280 661280 66192 53 70 39 1 5 6 7 1 3 9 1
procedimientos ———–memoria———- —intercambio– —–yo—- –sistema– ——UPC—– r B swpd gratis fuerte cache es usted de modo que bi bo en cs nosotros sí identificación Washington S t 4 0 65280 71608 58352 245108 0 0 2582 3611 1798 8918 18 9 11 33 30 4 0 65280 68288 58500 247512 0 0 2094 2662 1769 8508 19 9 13 30 29 3 1 65280 67780 58636 249656 0 0 2562 3924 1883 9323 20 9 7 37 27 4 1 65280 66196 58720 251072 0 0 1936 3949 1587 7731 15 7 11 36 31 |
Salida MySQL 8.0 vmstat
procs ———– memoria ———- — intercambio– —– io —- -sistema– —— cpu —– RB WEPD Cache GRATIS SI SO SO SO SO SO SOCIONADO EN CS, NOI SY ST 94232 15 13 275356 60 275356 60 2756 60 2 272356 6051253 24 27525: 04 2 275 3,54860 32356 25 11 37 26 26 725356 781856 78188 19564 190632 0 1 24 1948 5082 2677 26 13 625356 765 0708 19 001 12210 22 12 4 384
procedimientos ———–memoria———- —intercambio– —–yo—- –sistema– ——UPC—– r B swpd gratis fuerte cache es usted de modo que bi bo en cs nosotros sí identificación Washington S t 9 1 275356 62280 60832 204736 0 0 2197 5245 2638 13453 24 13 2 34 27 3 0 275356 60548 60996 206340 0 0 1031 3449 2446 12895 25 11 10 28 26 7 1 275356 78188 59564 190632 0 1 2448 5082 2677 13661 26 13 6 30 25 4 1 275356 76516 59708 192096 0 0 2247 3750 2401 12210 22 12 4 38 24 |
Como puede ver, MySQL 8 usa alrededor de 200 MB más de intercambio y también usa menos caché del sistema operativo, lo que indica que se ha asignado más memoria y al menos «comprometida». Si miramos la salida «superior» vemos:
mysql 5.7
mysql 8.0
Esto muestra aún más memoria residente y memoria virtual utilizada por MySQL8. La memoria virtual, en particular, da «miedo» ya que tiene mucho más que 1 GB de memoria física disponible en estas máquinas virtuales. Por supuesto, el uso de la memoria virtual (VSZ) es un mal indicador de las necesidades de memoria actuales para las aplicaciones modernas, pero corrobora el historial de necesidades de memoria más altas.
Sin embargo, en realidad, como sabemos por la salida «vmstat», ni MySQL 8 ni MySQL 5.7 se intercambian con esta carga ligera, incluso si no queda mucho «espacio». Si tiene más de un puñado de conexiones o desea ejecutar algunas aplicaciones en la misma VM, intercambie (o elimine OOM si no ha habilitado el intercambio).
Sería un proyecto interesante ver qué tan bajo puedo reducir el consumo de memoria de MySQL 5.7 y MySQL 8, pero lo dejaré para otro proyecto. Aquí están los parámetros que usé para esta prueba:
innodb_buffer_pool_size = 256M innodb_buffer_pool_instances = 1 innodb_log_file_size = 1G innodb_flush_method = O_DIRECT innodb_numa_interleave = 1 innodb_flush_neighbors = 0 log_bin server_id = 1 expire_logs_days = 1 log_output = carpeta slow_query_log = ON long_query_time = 0 log_slow_rate_limit = 1 log_slow_rate_type = consulta log_slow_verbosity = log_slow_admin_statements = FULL en log_slow_slave_statements = ON slow_query_log_always_write_time = 1 slow_query_log_use_global_control = todo innodb_monitor_enable = todo userstat = 1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 dieciséis 17 18 19 20 21 22 |
[mysqld] innodb_buffer_pool_size=256 millones innodb_buffer_pool_instances=1 innodb_log_file_size=1G innodb_flush_método=O_DIRECTO innodb_numa_interleave=1 innodb_flush_vecinos=0 log_bin id_servidor=1 expire_logs_days=1 registro_salida=Archivo registro_consulta_lenta=SOBRE tiempo_de_consulta_largo=0 log_slow_rate_limit=1 log_slow_rate_type=preguntar log_slow_verbosidad=completo log_slow_admin_declaraciones=SOBRE log_slow_slave_statements=SOBRE slow_query_log_always_write_time=1 slow_query_log_use_global_control=todos innodb_monitor_enable=todos Estadística de usuario=1 |
Resumen: Al mover MySQL 8 en un entorno de desarrollo, tenga en cuenta que requerirá más memoria que MySQL 5.7 con la misma configuración.