我的目标是使用表上的符号链接,在多个驱动器上平等地分离 mysql 数据库。
现在我似乎找不到检查 mysql 上每个表的 IO、读取、写入的方法。
所以现在我在想也许在 Linux 中有某种方法可以监控每个文件的 ios、读取、写入?
Iostat 显示每个设备的 IOPS;Iotop 显示每个进程的 IOPS;有什么可以显示每个文件的 IOPS 吗?
答案1
在 DBA 领域有一个阵营(或者曾经是,我最近没有去过那里),认为最佳性能是通过对存储基础设施进行微观管理来实现的,以至于系统和存储管理员最好不要插手,只需给他们一堆硬盘、一两台服务器,偶尔给他们一点帮助当被问及。
这些系统通常会有大量的 RAID1 对,数据文件会有意且系统地分布在每个 RAID1 对上。日志驱动器将被使用并同样被隔离。这种方法背后的想法非常简单:
- 通过这种方式,您可以将数据库与其他大型 IOP 消费者隔离,因此大用户就不会影响系统的其余部分。
- 通过拥有大量驱动器,系统的总 IOPS 非常高。
- 通过最小化存储抽象层,您可以使系统整体更加可靠,而且重要的是具有更低的延迟。
这种方法存在一个重大问题,Chopper3 已经指出了这一点:可维护性。
随着数据库的增长/收缩、用例的变化、应用程序及其使用模式的发展、失控情况的恢复以及维护周期的变化,这样的系统需要持续不断的关注和微调,才能保持“最佳”性能。我上面描述的那种架构最适合几乎从不写入/大量读取的工作负载。
当数据库确实需要从硬件中榨取每一个百分点的性能时,也会使用它。在许多情况下,这是一个预算决定,人们认为 DBA 时间比更多硬件更便宜。然而,有些 HPC 案例中,制造更大的机器是不可能的,所以你必须优化现有的机器。对于我们这些不使用巨型数据库服务器的人来说,总是有升级的。
另一个阵营(也是我所支持的阵营)的处理方式有所不同。它更信任存储抽象,并且往往具有更好的扩展性。您无需使用大量的 R10 对,而是将所有 R10 对放入 RAID10 集合中;或者交替使用少量 RAID10 集合。这允许与上述相同的 IOP 聚合,但每个数据文件/表空间/数据库都可以访问相当多的激增容量。通过使用多个 R10 集合,您可以为需要它的关键数据库和日志文件提供 I/O 分离。对每个文件性能进行微观管理的需求大大减少。
答案2
您的这个想法似乎过于复杂、脆弱且难以管理 - 难道您不能将磁盘放入 RAID 10 阵列中,这样就可以将数据和 IOPS 均匀地分布在磁盘上 - 这是其他人所做的。
答案3
您可以使用 systemtap 脚本监控每个文件的 I/O。请参阅:iotime.stp