在用于IO密集数据库的SQL Server或通常用于VLDB的数据库中,我们创建多个数据库文件并将它们放在单独的Disks/Luns上,以分散IO工作负载。mySQL数据库可以有多个文件来分散IO吗?
我不能看到mySQL是如何实现的,因为默认情况下所有的数据库都是在实例目录下创建的,没有选项可以将它们放置在别处或创建多个文件。我错过了什么?
在用于IO密集数据库的SQL Server或通常用于VLDB的数据库中,我们创建多个数据库文件并将它们放在单独的Disks/Luns上,以分散IO工作负载。mySQL数据库可以有多个文件来分散IO吗?
我不能看到mySQL是如何实现的,因为默认情况下所有的数据库都是在实例目录下创建的,没有选项可以将它们放置在别处或创建多个文件。我错过了什么?
大多数人使用RAID来分散IO工作负载。
如果您确实需要,可以将每个数据库的子目录作为另一个磁盘卷的符号链接。但这通常不是必需的。
您也可以将重做日志,二进制日志和查询日志移动到数据目录之外的另一个目录。这些文件具有相当高的IO使用率,因此这可以作为平衡IO负载的一种方式。
回复您的评论:
MySQL没有对 “文件组”,由该名称的任何选项。但是您可以将给定的表移动到它自己的数据库中。 MySQL上的数据库非常简单,将它们视为表格的名称空间。访问多个数据库不需要单独的登录,只需在查询中限定表名即可。
如果您希望给定的数据库在Windows上拥有自己的物理磁盘,我将使用Windows磁盘管理器至mount a disk to an empty directory而不是独立的驱动器号。因此,您可以将MySQL数据目录下的一个子目录映射到专用物理磁盘。因此,该子目录下的数据和索引文件将位于其自己的磁盘上。
有一些数据文件是MySQL在数据库特定的子目录之外管理的。例如,日志以及中央InnoDB表空间(即使您配置innodb_file_per_table,这也很重要)。其中的每一个都允许您指定路径,以便您可以在文件系统的任何位置找到它们。但是,您无法将每个表或每个数据库的写入分开。
MySQL是与Microsoft SQL Server(或Oracle等)不同的产品,您不应该期望SQL Server的每个功能都在MySQL中具有直接模拟功能。
虽然Raid通常不是一个选项。如果你有一个非常高的利用表,它可以是有用的给它自己的存储。在SQL Server中,我只是创建一个新的文件组,在专用存储上的文件,然后在该文件组上建立表索引。 Presto - 带有专用磁盘的表格。我认为这在所有的RDBMS上都是可以实现的,但是我正在努力研究如何使用mySQL。 –