当前位置: 首页 > 知识库问答 >
问题:

Springboot从1. x升级到2.3. x MySQL性能问题

阎知
2023-03-14

正在尝试升级Springboot

from 1.x/java8  to 2.3.x/java 11(AWS Corretto 11)

MySQL: Aurora
Connectionpool: tomcat datasource

Issue: with the upgraded version DB CPU go very high and DB connections in 800-1000 where as 1.x with same connection pool was 200-300 connections and CPU in 40s
This is detected in performance test.

该行是为升级的2.3添加的。x

 "spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource"


## DB connection pool
    spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource
    spring.datasource.tomcat.max-wait=30000
    spring.datasource.tomcat.max-active=150
    spring.datasource.tomcat.test-on-borrow=true
    spring.datasource.tomcat.max-idle=150
    spring.datasource.tomcat.initialize-size=10
    spring.datasource.tomcat.min-idle=10
    spring.datasource.tomcat.validation-query=SELECT 1
    spring.datasource.tomcat.validation-query-timeout=5
    spring.datasource.tomcat.time-between-eviction-runs-millis=5000
    spring.datasource.tomcat.min-evictable-idle-time-millis=30000
    spring.datasource.tomcat.remove-abandoned=true
    spring.datasource.tomcat.remove-abandoned-timeout=60
    spring.datasource.tomcat.default-auto-commit=true 

专家有什么建议来匹配数据库CPU和与以前版本的连接?

springboot 1.x:
CPU:40-50%
Connections : 200-300


springboot 2.3.x:
CPU:100%
Connections : 800-1000

DB进程列表也有几个“清理”状态。

gradle依存关系

    implementation("org.springframework.boot:spring-boot-starter-data-jpa"){
    exclude group: 'org.elasticsearch.client', module: 'elasticsearch-rest-client'
    exclude group: 'com.zaxxer', module: 'HikariCP'
}
implementation('org.springframework.boot:spring-boot-starter-jdbc') {
    exclude group: 'com.zaxxer', module: 'HikariCP'
}
implementation('org.apache.tomcat:tomcat-jdbc')
implementation("org.springframework.boot:spring-boot-starter-data-rest")

日志上说它的采摘tomcat.datasource

组织。阿帕奇。公猫jdbc。水塘DataSource@35ee466f{连接池[defaultAutoCommit=true;defaultReadOnly=null;defaultTransactionIsolation=-1;defaultCatalog=null;driverClassName=org.mariadb.jdbc.Driver;maxActive=150;maxIdle=150;minIdle=10;initialSize=10;maxWait=30000;testOnBorrow=true;testOnReturn=false;TimebetweenvictionRunsMillis=5000;NumTestsPerviectionRun=0;MinevictableTimeMillis=30000;testWhileIdle=false;testOnConnect=false;密码=********; url=jdbc:mysql:aurora://DB/schema?connectTimeout=2000; 用户名=根;validationQuery=选择1;validationQueryTimeout=5;validatorClassName=null;validationInterval=3000;AccessToUnderlyingConnectionLowed=true;removeAbandoned=true;removeAbandonedTimeout=60;LOG放弃=false;connectionProperties=null;initSQL=null;jdbcInterceptors=null;jmxEnabled=true;fairQueue=true;useEquals=true;当百分比为0时放弃;最大年龄=0;useLock=false;数据源=null;数据源jndi=null;suspectTimeout=0;alternateUsernameAllowed=false;commitOnReturn=false;回滚返回=false;useDisposableConnectionFacade=true;logValidationErrors=false;传播中断状态=false;ignoreexceptionnonpreload=false;useStatementFacade=true;}

查询日志速度慢-删除服务器/敏感详细信息[1]后:https://i.stack.imgur.com/X5jbh.jpg

来自评论:

CREATE TABLE history (
    capi_id varchar(60) NOT NULL, 
    major_revision bigint(20) NOT NULL, 
    minor_revision bigint(20) NOT NULL, 
    version varchar(20) NOT NULL, 
    document_id varchar(60) DEFAULT NULL, 
    operation varchar(10) DEFAULT NULL, 
    status varchar(10) DEFAULT NULL, 
    transaction_id varchar(60) DEFAULT NULL, 
    PRIMARY KEY (capi_id,major_revision,minor_revision,version)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

共有2个答案

孟翰海
2023-03-14

解决方案:DB连接池问题通过切换到hikari连接池来解决,hikari连接池是springboot 2的默认设置。x、 应用程序负载测试中存在高延迟和504网关超时(或nginx 499),这可以通过减少db来解决

董和泽
2023-03-14

对于此查询(来自评论):

select  history0_.capi_id as capi_id1_9_0_,
        history0_.major_revision as major_re2_9_0_,
        history0_.minor_revision as minor_re3_9_0_,
        history0_.version as version4_9_0_,
        history0_.document_id as document5_9_0_,
        history0_.operation as operatio6_9_0_,
        history0_.status as status7_9_0_,
        history0_.transaction_id as transact8_9_0_
    from  history history0_
    where  history0_.capi_id='ID'
      and  history0_.major_revision=1485757299000
      and  history0_.minor_revision=0
      and  history0_.version='publish'

历史可能受益于

INDEX(capi_id, major_revision, minor_revision, version)

索引列的顺序对于此查询并不重要。)

请提供“显示创建表历史记录”。

对于那些插入时间为2-4秒的插入来说,这似乎很不寻常。也许其中一些是插入。。。选择 我看不到完整的查询?

 类似资料:
  • WARNING 本升级指南仅适用于 2.2 版本升级至 2.3 版本,如果你并非 2.2 版本,请查看其他升级指南,Plus 程序不允许跨版本升级! 更新代码 预计耗时: 2 小时 这是你自我操作的步骤,确认将你的 2.2 版本代码升级到 2.3 版本,如果你做过一些自定义修改可能会出现代码冲突,你需要解决。 升级依赖 预计耗时: 3 分钟 进入 Plus 程序目录,执行: composer up

  • 我正在尝试将springboot应用程序从1.5.x迁移到2.3.x。已经走了很长一段路。我知道现在对于健康检查,endpoint是/acture/health而不是旧版本中的/health。 在openshift上,配置在执行就绪探测时仍然引用/healthendpoint。我想知道怎样才能仍然使用/healthendpoint而不是/acturet/health。SpringBoot2是否有任

  • 老版本的Flask-SocketIO有完全不同的一系列依赖包。老版本依赖gevent-socketio和gevent-websocket,这些包 1.0 版本都不需要了。 尽管依赖的改变,但是 1.0 版本却没有太多重要的改变。下面是一个实际改变的详细的清单: * 1.0 版本放弃支持Python 2.6,增加了对Python 3.3, Python 3.4 和 pypy 的支持。 * 0.x 版

  • 类名修改 StrUtils -> StrUtil FileUtils -> FileUtil ClassKits -> ClassUtil EncryptCookieUtils -> CookieUtil RequestUtils -> RequestUtil ArrayUtils -> ArrayUtil JbootHttpKit -> HttpUtil @JBootRPCService ->

  • Symfony 2.7于2015年4月30日发布,是继2.3版本之后的当前LTS(长期支持)版本。Symfony 2.3的这些版本的维护将于2016年5月结束,Symfony 2.7的维护将于2018年5月结束。两个版本的安全补丁将在维护结束后的一年内发布。 正如Massimiliano Arione在公告评论中所建议的那样,从Symfony 2.3升级到2.7需要做哪些更改,而无需检查所有次要升

  • 如果您打算升级一个早先版本的 Jekyll,那么一些发生在 1.0 及 2.0 版本中的相关变化,您需要首先了解下。 在我们开始动手之前,请先获取最新版本的 Jekyll: $ gem update jekyll 立即开始 想快速构建并运行一个全新的 Jekyll 站点吗?那么只要执行 jekyll new SITENAME 即可!该命令会创建一个包含了 Jekyll 最基础框架的文件夹。 Jek