2011-11-22 20 views
1

由于传统的设计决策,我们使用SqLite over file共享。 我们有一个中央服务,可以将配置写入远程机器上的SqLite.dbs。这些机器将数据库视为只读,因此我们避免了大多数同步问题。其中一些机器通过非常慢的连接进行访问。 我正在努力改进此配置过程的性能,并且我似乎遇到了插入导致文件大小增加的瓶颈。当文件大小增长时,是否可以强制Sqlite预留空间?

我们从100ms左右跳转到秒10的甚至一分半我们最慢的连接(取决于其他网络流量):

2011-11-22 15:13:07,766 --insert uses free space 
2011-11-22 15:13:07,844 --insert uses free space 
2011-11-22 15:13:07,922 --insert uses free space 
2011-11-22 15:13:08,000 --insert uses free space 
2011-11-22 15:13:51,035 --free space gone, file size grows to fit 
2011-11-22 15:14:16,298 --free space gone, file size grows to fit 
2011-11-22 15:14:38,876 --free space gone, file size grows to fit 

我知道在SqlServer中,可以设置自动增长值以保持可用的填充量。 是否有可能将这种行为从增长适合增长到保留?

重要的是,配置服务是用C#编写的。数据库访问是通过NHibernate完成的(包装在由我们留下遗留的人员编写的层中)并引用System.Data.Sqlite。

回答

1

哎呀。我所看到的唯一情况是将page_size设置为可能的最大(或最可能)值(并且允许)。上限是2^16字节。

+1

page_size默认为1024,将其更改为4096将完全重新加载(空dbs启动)降至15分钟(从约4小时)。 –

+0

@Mindor先生很高兴知道!当我看到这些表现上的改进时,我的专业反应总是一致的:哇! – MPelletier

+0

我实际上已经在这个项目上多次改进这个顺序。从较小部署的经验来看,我想在原来的状态下,这个15分钟的过程需要三到四天的时间,但之前甚至是不可能的。 –

相关问题