我在 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。对于一台好的专用机器,您可以将其增加到某个值,例如:200
,500
甚至更多!您可以将其设置为某个值并观察您的数据库连接。当您觉得有需要时,您可以将其增加更多。当然,默认值可能很小,应该增加。
不是max_connections
唯一要考虑的参数。为了获得更好的性能,还需要做其他事情(例如查询优化)。增加max_connections
可能并不总是最好的选择。