首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Lustre文件系统上的多个读卡器出现SQLite“磁盘I/O错误”

Lustre文件系统上的多个读卡器出现SQLite“磁盘I/O错误”
EN

Stack Overflow用户
提问于 2019-11-14 01:18:12
回答 1查看 339关注 0票数 0

我知道,在具有多个客户机的共享文件系统上,SQLite并不理想。然而,文档暗示多个读取器应该是可以的。

我的SQLite数据库驻留在一个Lustre卷上,并且数据库是“分区的”--尽管是作为一个VIEW,而不是显式的表,使用ID上的模运算符来定义分区--这样多个读取器是互斥的。这是可行的,但在大约40%的情况下,我在读取DB时会得到“磁盘I/O错误”(使用Python 3.7.4和SQLite 3.30.0,使用Python stdlib sqlite3)。

假设标准Unix VFS的假设不适用于Lustre文件系统(就像它们不适用于其他联网的文件系统一样),这样做安全吗?如果是这样的话,为什么它对读者来说很重要?

假设我只需要使用Lustre上的SQLite,那么我能做些什么来缓解这个问题吗?例如,在物理上将数据分离到多个SQLite分片中,这将永远只有一个客户端,并且可能将它们ATTACH到一个中央源?

EN

回答 1

Stack Overflow用户

发布于 2019-11-15 04:03:57

您没有提到您正在使用哪个版本的Lustre,这一点很重要。假设您的服务器版本至少是2.5或更高版本,我建议对客户端使用Lustre 2.12.3 (或更高版本),因为这修复了许多性能和功能问题。特别是,它在默认情况下启用flock,这通常是在用户空间中的应用程序之间共享文件所必需的(否则,使用-o flock挂载选项挂载客户端)。通常需要flock功能来确保同一文件的多次读/写是一致的。

Lustre本身在客户端之间是完全缓存一致的,并且几乎完全兼容POSIX (与本地ext4文件系统相同,只有少数例外,如atime更新),这是它被广泛用于并行应用程序的原因之一。与NFS不同的是,对于同一文件上的多个写入器/读取器,它不存在一致性问题。

至于IO错误,首先要问的是应用程序执行的是哪种类型的IO (buffered或O_DIRECT)?For O_DIRECT on non-ancient kernels read/write need to be sized/memory aligned to the disk's logical block size (可能是4096字节或更高的2的幂),因此它不能执行512字节大小的O_DIRECT。使用Lustre在同一文件上进行并发读写操作绝对是可能的,但如果客户端在相同的块上争用,这将导致更高的延迟。

其次,当SQLite报告错误时,您是否在客户端或服务器的控制台上收到任何错误?在运行应用程序时,检查dmesg/var/log/messages的输出中是否有LustreError:行。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58842374

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档