点击上图查看教学大纲
下面来探讨下当您向实例添加更多内存时该怎么做。在扩展资源时,向运行MySQL的服务器添加内存是常见的做法。先看一些背景扩展资源只是为您的环境添加更多资源,这可以分为两种主要方式:垂直扩展和水平扩展。垂直扩展正在增加给定实例的硬件容量,从而拥有更强大的服务器,而水平扩展正在添加更多服务器,这是一种非常标准的负载平衡和分片方法。随着流量的增长,工作数据集变得越来越大,因此我们开始受到影响,因为无法放入内存的数据必须从磁盘中检索。这是一项代价高昂的操作,即使使用现代NVME驱动器也是如此,因此在某些时候,我们将需要处理我们提到的任何一种扩展解决方案。在这种情况下,我们将讨论添加更多内存,这通常是垂直扩展硬件的最快和最简单的方法,并且拥有更多内存可能是MySQL的主要好处。如何计算内存利用率首先,我们需要清楚在MySQL操作期间哪些变量分配了内存,我们将只介绍常见的变量,因为它们有很多。此外,我们需要知道一些变量将全局分配内存,而其他变量将进行每个线程的分配。为简单起见,我们将考虑使用标准存储引擎InnoDB来讨论这个主题。我们有全局分配的变量:key_buffer_size:MyISAM设置应设置为8-16M,任何高于此值的设置都是错误的,因为除非出于特殊原因,否则我们不应使用MyISAM表。一个典型的场景是MyISAM只被系统表使用,这些系统表很小(这对5.7以上的版本有效),并且在MySQL8中系统表被迁移到InnoDB引擎。所以这个变量的影响可以忽略不计。query_cache_size:0是默认值,在8.0中被删除,所以我们不会考虑它。innodb_buffer_pool_size:这是InnoDB放置页面以执行操作的缓存。越大越好。??当然,还有其他的,但在使用默认值运行时它们的影响很小。此外,在每个线程(或打开的连接)上分配了其他变量:read_buffer_size、read_rnd_buffer_size、sort_buffer_size、join_buffer_size和tmp_table_size,以及其他一些变量。默认情况下,所有这些都工作得很好,因为分配小而高效。因此,主要的潜在问题变成了我们分配的许多连接可以保持这些缓冲区一段时间并增加额外的内存压力。理想的情况是控制打开(和使用)的连接数,并尝试将该数量减少到不损害应用程序的足够数量。但是我们不要忘记重点,我们有更多的内存,我们需要知道该如何正确地调优它以获得最佳使用效果。我们需要