我正在m1.large EC2实例上运行一个专用的MySQL服务器,它有7.5 GB的RAM。
什么可能是一个很好的数字来设置我的max_connections值?
最大(理论上)可能的内存使用量=总服务器缓冲区+(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可能会变慢它会从磁盘读取全局caching的数据。
所以,一切都取决于你的数据库,它将处理多less数据,你将如何优化你的configuration。
您必须仔细查看此处列出的所有参数,以了解DB的最佳值。 也许,你的应用程序和数据库架构是如此糟糕,你有太大的联接和join_buffer_size是非常大的,或者你可能需要sorting,所以每个线程可能会吃越来越多的内存,但这并不意味着所有的线程将所以在同一时间。 这是理论上的最大值。 平均值,最佳值可能有所不同。 您可能需要10000000个请求,每个线程只需要8MB的RAM就可以完全使用缓冲区,但是一个线程可能需要10GB的RAM才能使用缓冲区进行操作。 改变参数来满足那个大的查询可能不是最佳的。 所以,取决于:)
让您的应用程序运行,收集统计信息并相应地优化数据库,而不是相反。
答案取决于预期的工作量:并发连接的预期数量和预期的连接时间。 默认值设置为100.对于一个好的专用机器,您可以将它增加到一些值,如: 200或甚至更多! 您可以将其设置为某个值,并观察数据库连接。 当你觉得有需要时,你可以增加更多。 当然,默认值可能很小,应该增加。
max_connections不是唯一的参数。 还有其他的事情需要做,以获得更好的性能(如查询优化)。 增加max_connections可能并不总是最好的事情。