SQL Lite on Azure App Service - 插入缓慢和超时
SQL Lite on Azure App Service - Inserts Slow and Timeout
我们有一个过程需要创建一个 sql 精简版数据库,其中包含几个大约 750k records/100mb 的表。它被上传到其他地方(Azure 存储 Blob)。我知道 Azure 应用程序的磁盘 I/O 非常慢,当 运行 在本地需要几秒钟时,它总是在 Azure 上超时。我试过将 WEBSITE_LOCAL_CACHE_OPTION
设置为 always
并使用临时文件夹,但这没有帮助。
我研究过在内存数据库中使用 sql 精简版,但如果我想将其转换为字节数组(或流),似乎无法避免文件系统天蓝色的应用程序。理想情况下,访问内存数据库以流式传输到博客将是最好的情况。
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 万行的 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))
{}
我们有一个过程需要创建一个 sql 精简版数据库,其中包含几个大约 750k records/100mb 的表。它被上传到其他地方(Azure 存储 Blob)。我知道 Azure 应用程序的磁盘 I/O 非常慢,当 运行 在本地需要几秒钟时,它总是在 Azure 上超时。我试过将 WEBSITE_LOCAL_CACHE_OPTION
设置为 always
并使用临时文件夹,但这没有帮助。
我研究过在内存数据库中使用 sql 精简版,但如果我想将其转换为字节数组(或流),似乎无法避免文件系统天蓝色的应用程序。理想情况下,访问内存数据库以流式传输到博客将是最好的情况。
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 万行的 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))
{}