gpt4 book ai didi

sqlite - Azure 应用服务上的 SQLite - 插入缓慢且超时

转载 作者:行者123 更新时间:2023-12-03 19:23:32 27 4
gpt4 key购买 nike

我们有一个流程需要创建一个 sql lite 数据库,其中包含几个大约 750k 记录/100mb 的表。它被上传到其他地方(Azure 存储 Blob)。我知道 Azure 应用程序的磁盘 I/O 非常慢,在本地运行时需要几秒钟,在 Azure 上总是超时。我尝试将 WEBSITE_LOCAL_CACHE_OPTION 设置为 always 并使用临时文件夹,但这没有帮助。

我研究过在内存数据库中使用sql lite,但如果我想将其转换为字节数组(或流),这在 azure 应用程序中速度很慢,似乎没有办法避免文件系统。理想情况下,最好的情况是访问内存数据库以流式传输到博客。

sql lite 或 azure 应用服务中是否有任何调整,可以让此过程在合理的时间内完成?

使用服务堆栈的ormlite。这是一个例子:

 using (var trans = dba.OpenTransaction( System.Data.IsolationLevel.ReadUncommitted))
{
dbLite.InsertAll(locs);
foreach (var s in sales)
{
dbLite.Insert<Sales>(s);
}

trans.Commit();
}

有趣的是,我把从不工作的时间(10 分钟就写了 5mb,所以我知道它永远不会完成)减少到了 4-5 分钟

dbLite.ExecuteSql("pragma page_size = 8192");
dbLite.ExecuteSql("pragma synchronous = OFF");
dbLite.ExecuteSql("PRAGMA journal_mode = OFF");

这是与本地 1 秒进行比较。在我的场景中,设置为关闭的同步模式似乎最有帮助。

最佳答案

似乎设置dbLite.ExecuteSql("pragma synchronous = OFF");最大的好处是将查询时间从估计的 140 分钟减少到 4-5 分钟。关闭它有一些缺点,但就我而言,我们只是归档一些数据,因此它们很小。如果有人有其他方法来进一步增加插入时间,如果它们对时间有实质性影响,我会接受它们。

对于一个包含 4 个表和大约 60 万行的 70 MB 数据库,我的时间最终减少到了 1 分 5 秒。

            dbLite.ExecuteSql("pragma page_size = 8192");
dbLite.ExecuteSql("pragma synchronous = OFF");
dbLite.ExecuteSql("PRAGMA journal_mode = OFF");
dbLite.ExecuteSql("PRAGMA LOCKING_MODE = OFF");
context.WriteLine("Creating Tables");

 using (var trans = dba.OpenTransaction(System.Data.IsolationLevel.ReadUncommitted))
{}

enter image description here

关于sqlite - Azure 应用服务上的 SQLite - 插入缓慢且超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46678070/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com