EC2 m1.large 实例上的 MySQL max_connections

EC2 m1.large 实例上的 MySQL max_connections

我在 m1.large EC2 实例上运行专用 MySQL 服务器,该实例有 7.5 GB 的 RAM。

max_connections将我的价值设置为多少比较合适?

答案1

理论上最大可能的内存使用量 = 服务器缓冲区总数 + (max_connections * 每个线程的缓冲区),即:

key_buffer_size + tmp_table_size + max_heap_table_size + max_heap_table_size + tmp_table_size + innodb_buffer_pool_size + innodb_additional_mem_pool_size + innodb_log_buffer_size + query_cache_size + (max_connections * (read_buffer_size + read_rnd_buffer_size + sort_buffer_size + thread_stack + join_buffer_size))

什么才是好的数字取决于这些组件。如何调整这些组件取决于您的数据库的功能。

您可以将其设置max_connections为 100,并将其他参数设置为比平常更高的值,这样由于缓冲区较大,每个线程都会很快;您可以将其设置为 800,并将其他参数设置为比平常更低的值,这样 DB 在每个连接中可能会变慢,因为它将从磁盘读取数据进行全局缓存。

因此,一切都取决于您的数据库,它一次将处理多少数据以及您将如何优化它的配置。

您必须仔细检查此处列出的所有参数,才能知道您的数据库的最佳值。也许您的应用程序和数据库架构太糟糕了,以至于您的连接过多并且join_buffer_size非常大,或者您可能需要排序,因此每个线程可能会消耗越来越多的内存,但这并不意味着所有线程都会同时这样做。这是理论上的最大值。平均最佳值可能会有所不同。您可能有 10000000 个请求,每个线程只需要 8MB 的内存即可完全使用缓冲区,但一个线程可能需要 10GB 的内存才能使用缓冲区。更改参数以满足一个大型查询可能不是最佳选择。所以,取决于 :)

让您的应用程序运行,收集统计数据并相应地优化数据库,而不是相反。

答案2

答案取决于预期的工作负载:预期的并发连接数和预期的连接时间。默认值设置为 100。对于一台好的专用机器,您可以将其增加到某个值,例如:200500甚至更多!您可以将其设置为某个值并观察您的数据库连接。当您觉得有需要时,您可以将其增加更多。当然,默认值可能很小,应该增加。

不是max_connections唯一要考虑的参数。为了获得更好的性能,还需要做其他事情(例如查询优化)。增加max_connections可能并不总是最好的选择。

相关内容