在尝试优化原型应用程序时,H2被确定为瓶颈。我最初在服务器模式下使用H2并且插入(和其他数据库操作)快速启动但随着行数(特别是DB文件大小)的增加而迅速变慢。奇怪的是,服务器模式下的H2启动速度较慢,但不会遭受相同的性能下降。
与服务器模式DB文件相比,嵌入式DB文件大小也快速增加。我尝试了各种数据库设置,并没有太大的区别。
为了说明这个问题,我创建了一个包容性的Spring Boot应用程序,并在https://github.com/balamuru/h2demo的github上托管它。我创建了一个简单的表,其中的MEDIUMBLOB字段由bitvector的内容填充(以加快扩展数据库的过程)
admin.employee (
id BIGINT NOT NULL AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
address TEXT,
data MEDIUMBLOB,
PRIMARY KEY (id)
);
spring.datasource.url=jdbc:h2:tcp://localhost/~/h2db;DB_CLOSE_ON_EXIT=FALSE;CACHE_SIZE=1000000;
spring.datasource.url=jdbc:h2:./h2db;DB_CLOSE_ON_EXIT=FALSE;CACHE_SIZE=1000000
提前致谢
-------embedded mode (msecs)-------
Run time : 27464
Run time : 7281
Run time : 6363
Run time : 6326
Run time : 5522
Run time : 6070
Run time : 5262
Run time : 6502
Run time : 6016
Run time : 7196
Run time : 15735 ==> spike in run time
Run time : 39973 ==> embedded mode slower than server mode from this run onwards
Run time : 44079
Run time : 46769
Run time : 50443
Run time : 53640
Run time : 59635
Run time : 61937
Run time : 64344
Run time : 71259
-------server mode (msecs)-------
Run time : 20872
Run time : 17319
Run time : 18081
Run time : 18205
Run time : 18596
Run time : 18089
Run time : 18453
Run time : 18386
Run time : 18330
Run time : 17259
Run time : 18826
Run time : 19717
Run time : 19122
Run time : 18152
Run time : 18016
Run time : 18818
Run time : 19414
Run time : 19207
Run time : 19022
Run time : 19446