You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server CE数据库读取性能波动问题排查求助

SQL Server CE并行读取性能波动问题与优化求助

环境说明

  • 数据库拆分为4个.SDF文件(对应4个季度)
  • 总计302*525000条记录
  • 使用4个SqlCeConnection,读取前打开并保持连接
  • 所有数据库位于同一SSD磁盘
  • 采用SqlCeDataReader读取(认为是最低级且最快的方式)
  • 读取过程并行执行

简化代码

for (int run = 0; run < 4; run++)
{
    InitializeConnections();

    for (int reading = 0; reading < 6; reading++)
    {
        ResetMemoryObjects();

        Parallel.For(0, quartals.Count, (i) =>
                    {
                         values[i] = ReadFromSqlCeDb(i);
                    }
    }
}

测试结果与分析

基准测试显示耗时波动明显,后续多轮测试情况如下:

  1. 分析并行读取各步骤,发现实际读取(while(reader.Read())段)耗时差异大;
  2. 尝试TableDirect方式,150次测试中SELECT与TableDirect交替执行,二者均在约第65次后性能大幅提升,耗时范围5.7秒到37.4秒;
  3. 改用单数据库测试,TableDirect略有优势,但性能波动问题仍存在;
  4. 在不同机器测试,仍存在大幅波动;
  5. 测试4倍小的数据库,初始读取慢问题依旧,整体耗时为原数据库的1/8而非预期的1/4;
  6. 在两台不同配置机器测试,一台仅首次读取有峰值,另一台除初始外仍有多个峰值;
  7. 索引重建相关操作测试:
    • A:新生成的数据库读取测试
    • B:复制数据库后执行SqlCeEngine.Verify测试
    • C:直接复制数据库测试
    • D:复制数据库后先执行一次读取单条全列数据的预读取测试
    • 同时测试了Repair和Compact,结果与B接近

测试发现:验证操作可解决初始读取慢问题,但验证耗时过长(大型数据库超10秒);D组结果远超预期,无法理解原因;C组初始读取慢情况不稳定,疑似并非索引重建导致;大型数据库仍存在严重性能波动。

当前优化方向与求助

目前正在优化读取过程以减少GC压力,恳请提供改善/稳定读取速度的建议。

内容的提问来源于stack exchange,提问作者c_ph_r

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 03:24:23