【问题标题】:SQL Lite on Azure App Service - Inserts Slow and TimeoutAzure 应用服务上的 SQLite - 插入缓慢和超时
【发布时间】:2017-12-20 00:50:36
【问题描述】:

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

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

在 sql lite 或 azure app 服务中是否有任何调整可以让这在合理的时间内完成?

使用服务堆栈的 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 秒进行比较。在我的场景中,设置为关闭的同步模式似乎最有帮助。

【问题讨论】:

  • 您的 Azure 网站的应用服务计划/定价层是什么?您在哪里执行了有关创建 sqlite 数据库并插入大约 750k 记录/100mb、Web 应用程序或 Webjobs 下的请求的处理?
  • 在 azure 上花费了多少时间,详细的错误跟踪是什么?对于 azure app service,请求有 230 秒的超时时间,你可以参考这个issue。此外,您可以使用 dbLite.InsertAll(sales) 而不是迭代 sales 并插入销售数据以获得更好的性能。
  • 我已经尝试插入所有 /etc。缓慢是由于磁盘 io 缓慢,因为我可以打开控制台并看到文件缓慢增加。我最终使用了挂火和后台线程。同步和日志设置为关闭需要 4-6 分钟,并且是 75mb 非压缩。

标签: sqlite azure azure-web-app-service ormlite-servicestack


【解决方案1】:

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

我最终将一个包含 4 个表和大约 600k 行的 70mb 数据库的时间缩短到 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))
 {}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 2020-01-23
    • 2021-11-17
    • 1970-01-01
    • 2017-01-07
    相关资源
    最近更新 更多