Python 通过sqlalchemy写入的sqlite3在USB驱动器上运行缓慢

Python 通过sqlalchemy写入的sqlite3在USB驱动器上运行缓慢,python,sqlite,sqlalchemy,usb-drive,Python,Sqlite,Sqlalchemy,Usb Drive,我正在使用Python 3.7中的sqlite3通过sqlalchemy包。SQLite数据库文件存储在USB 2.0闪存驱动器上,插入MacBook Pro 尽管很多时候我没有问题,但有时我会看到写操作(例如,在提交中更新两个表的事务)非常慢,例如8秒。这种情况经常发生,我不得不调试它。在好的时候,相同的操作只需不到0.5秒 我的问题是:我如何区分这种慢度在sqlalchemy中,在sqlite3中,还是仅在USB驱动程序本身中?我找不到一个有这样问题的职位 (我想知道是否应该将USB 2.0

我正在使用Python 3.7中的
sqlite3
通过
sqlalchemy
包。SQLite数据库文件存储在USB 2.0闪存驱动器上,插入MacBook Pro

尽管很多时候我没有问题,但有时我会看到写操作(例如,在提交中更新两个表的事务)非常慢,例如8秒。这种情况经常发生,我不得不调试它。在好的时候,相同的操作只需不到0.5秒

我的问题是:我如何区分这种慢度在
sqlalchemy
中,在
sqlite3
中,还是仅在USB驱动程序本身中?我找不到一个有这样问题的职位


(我想知道是否应该将USB 2.0驱动器替换为USB 3.0驱动器,可能是因为USB 2.0是半双工的?但我不确定,想看看是否有办法确认)

最后,我出去买了一个USB 3.1驱动器(SanDisk),所以在没有其他改变的情况下,性能大大提高:最大延迟从12秒减少到0.25秒。看起来USB 2.0驱动器是速度缓慢的主要原因。(Sqlite3 WAL模式也有所帮助)。感谢@Shawn和@Selcuk的评论。

您使用的是WAL日志模式吗?闪存驱动器的速度不仅取决于USB标准(2.0 vs 3.0),还取决于内部的芯片组。有关一些基准测试,请参阅。@Shawn如何使用
sqlalchemy
启用WAL模式?我试图在(搜索集\u sqlite\u pragma)上模拟示例代码,但没有成功。@Shawn看起来好像我能够切换到WAL模式(示例代码很奇怪,因为它是根据连接事件调用的,我必须确保只更改一次WAL模式)。我的测试结果显示性能稍微好一些(6秒比之前的8秒),但仍然没有达到我的预期。