一个数据库实例存储三四十万张表,如果表文件(.frm, .ibd等)放到同一个目录,那么打开表都会很慢,因为每次打开一个表都要打开对应的2个表文件,文件系统效率会降低。如果这些表不是都用到,建议把不用的表归档然后从实例中删除。如果这几十万张表都是有用的,那么你要考虑分库分表,以及考虑数据库设计是否合理,每个表是不是只有很少的数据,这些表能否合并,等等。否则,系统查询这三四十万张表的需要反复在table cache中淘汰打开的表才能打开更多的表,性能会降低很多。打开每个表需要打开2个文件,通常linux操作系统不允许一个进程打开的文件达到六十万到八十万个的,在这样的极限状态下操作系统的文件系统的运行效率也会大大降低。你需要把table_open_cache, innodb_open_files和open_files_limit 这3个mysql参数配置的尽可能大,不过mysqld启动之后,你看一下这3个变量,它们最终实际值是操作系统分配给mysqld进程的,并不一定能达到你配置的值。
mysql变量的使用,mysql in 查询条件,mysql double转换int类型,jsp mysql系统有哪些,mysql运行php,mysql存储过程中语法错误