MySQL的变量open_files_limit,table_open_cache和max_connections是相互关联的。如果对有些变量进
行了设置,有的变量没有设置,mysql会根据一定的计算公式进行计算得出其他的,当然有些时候会触发mysql的一些警告来。
本文探讨的均基于Linux系统
首先,mysql会基于 max_connections 和 table_open_cache 的值计算最低需要的文件打开描述符的数量。至于其他变量,如果没有再my.cnf中配置或者命令行中指定,它将使用默认值。
/* MyISAM requires two file handles per table. */
wanted_files= 10+max_connections+table_cache_size*2;
其次,它会基于 open_files_limit 检查实际能分配多少数值。这里它可分配的最大数值为 max_connections 5倍,然后三者取最大值。
max_open_files=max(max(wanted_files,max_connections*5),open_files_limit);
files=my_set_max_open_files(max_open_files);
接下来,它获取 max_open_files 和服务器(操作系统/平台)支持的最大描述符限制数的最低值
limit = min(max_file_limit, OS_FILE_LIMIT);
下面的比较有趣:
在设置setrlimit 之前,mysql获取当前的limit值,如果当前的 limit 是 unlimited,它将尝试设置比之前