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); } } }
测试结果与分析
基准测试显示耗时波动明显,后续多轮测试情况如下:
- 分析并行读取各步骤,发现实际读取(
while(reader.Read())段)耗时差异大; - 尝试TableDirect方式,150次测试中SELECT与TableDirect交替执行,二者均在约第65次后性能大幅提升,耗时范围5.7秒到37.4秒;
- 改用单数据库测试,TableDirect略有优势,但性能波动问题仍存在;
- 在不同机器测试,仍存在大幅波动;
- 测试4倍小的数据库,初始读取慢问题依旧,整体耗时为原数据库的1/8而非预期的1/4;
- 在两台不同配置机器测试,一台仅首次读取有峰值,另一台除初始外仍有多个峰值;
- 索引重建相关操作测试:
- A:新生成的数据库读取测试
- B:复制数据库后执行
SqlCeEngine.Verify测试 - C:直接复制数据库测试
- D:复制数据库后先执行一次读取单条全列数据的预读取测试
- 同时测试了Repair和Compact,结果与B接近
测试发现:验证操作可解决初始读取慢问题,但验证耗时过长(大型数据库超10秒);D组结果远超预期,无法理解原因;C组初始读取慢情况不稳定,疑似并非索引重建导致;大型数据库仍存在严重性能波动。
当前优化方向与求助
目前正在优化读取过程以减少GC压力,恳请提供改善/稳定读取速度的建议。
内容的提问来源于stack exchange,提问作者c_ph_r
相关产品推荐
相关产品推荐

