如何在 NVMe SPDK 中使用 MySQL 数据库?
How to use MySQL database with NVMe SPDK?
我查看了文档,在示例中没有看到任何实际的实施案例。
有人知道如何确保通过 Intel NVMe SPDK 处理对我的数据库服务器的传入请求吗?
您需要 develop a custom storage engine。
MySQL 中的现有存储引擎使用 POSIX 调用 I/O。换句话说,它们调用标准内核函数。这样他们就可以使用可移植代码支持范围广泛的存储设备和操作系统。
据我了解,SPDK是一个绕过操作系统内核I/O接口,直接读写NVMe的user-space代码入口点库。
所以我认为需要完全重写 MySQL 存储引擎中的 I/O 代码才能使用 SPDK。这也会使存储引擎不可移植。它仅适用于具有 NVMe 存储设备的主机。
然后你需要花大约 25 年的时间来优化它,以匹配例如 InnoDB 代码的成熟度水平。仅使用相同的使用模式执行相同的 I/O 调用可能不是利用 NVMe 驱动器的最佳方式。
即使您做了所有这些,您可能也不会发现它能为像 MySQL 这样的复杂服务带来整体性能的巨大提升。如果您的数据库受 I/O 限制,您就已经输了。提高性能更好的方法是不做 I/O,而是在 RAM 中读写数据。即使与 NVMe 存储相比,RAM 延迟仍然至少低三个数量级。
我查看了文档,在示例中没有看到任何实际的实施案例。
有人知道如何确保通过 Intel NVMe SPDK 处理对我的数据库服务器的传入请求吗?
您需要 develop a custom storage engine。
MySQL 中的现有存储引擎使用 POSIX 调用 I/O。换句话说,它们调用标准内核函数。这样他们就可以使用可移植代码支持范围广泛的存储设备和操作系统。
据我了解,SPDK是一个绕过操作系统内核I/O接口,直接读写NVMe的user-space代码入口点库。
所以我认为需要完全重写 MySQL 存储引擎中的 I/O 代码才能使用 SPDK。这也会使存储引擎不可移植。它仅适用于具有 NVMe 存储设备的主机。
然后你需要花大约 25 年的时间来优化它,以匹配例如 InnoDB 代码的成熟度水平。仅使用相同的使用模式执行相同的 I/O 调用可能不是利用 NVMe 驱动器的最佳方式。
即使您做了所有这些,您可能也不会发现它能为像 MySQL 这样的复杂服务带来整体性能的巨大提升。如果您的数据库受 I/O 限制,您就已经输了。提高性能更好的方法是不做 I/O,而是在 RAM 中读写数据。即使与 NVMe 存储相比,RAM 延迟仍然至少低三个数量级。