我正在运行 MySQL(5.0,但我认为 4.1 之后的版本都无所谓),并且我看到了关于使用innodb_file_per_table
InnoDB 表配置选项的建议。这样做通常是为了更好地控制 InnoDB 表使用的磁盘空间量,因为即使该表后来被删除,该空间也无法恢复。
但每次我看到那条建议时,都会说如果你没有很多表就使用它(这是一个例子)。所以我的问题是,多少张桌子才算太多?
我有一个应用程序正在为许多不同的客户(大约 50 个,但可能会接近 100 个)运行,每个数据库中都有 135 个表。13,500 个表太多了吗?
答案1
这是个不错的表格数量,但这里要记住的是,全部它们会同时打开 - 大多数情况下,你会将 MySQL 的打开文件参数设置为大约 300-500,而 MySQL 本身会将系统中最活跃的文件保存在内存表池(如果你愿意的话,可以称为缓存)中,就像内核为周围的应用程序保存内存页面一样。
我个人坚信将每个表文件作为系统管理工具;虽然它确实有其权衡之处,正如您正确指出的那样,保持每个客户端表的独特性(您甚至可以将它们分散到不同的磁盘 - RAID、SAN、DAS 等 - 根据客户数据库!),如果需要,手动备份原始表,如果需要,优化它们等等,最终会花费更长的时间。您付出的主要代价是在写入期间调用更多的 fsync(),如果您有大量表正在写入,这可能会降低性能,但总的来说还不错。