做网站都需要什么资料,企业网站建设ppt,开展农业信息网站建设工作,网站备案代码#x1f47d;System.out.println(“#x1f44b;#x1f3fc;嗨#xff0c;大家好#xff0c;我是代码不会敲的小符#xff0c;双非大四#xff0c;Java实习中…”); #x1f4da;System.out.println(“#x1f388;如果文章中有错误的地方#xff0c;恳请大家指正System.out.println(“嗨大家好我是代码不会敲的小符双非大四Java实习中…”); System.out.println(“如果文章中有错误的地方恳请大家指正共同进步共同成长✊”); System.out.println(“如果文章对您有所帮助希望您可以三连支持一下博主噢”); System.out.println(正在完成计划中接下来的三个月里对梦想的追逐 ); 背景
在周五的下午小符已经打开了bilibili正打算继续摸鱼…
新哥问我是不是没事干呀…于是指给我了一个线上bug让我修一下
bug是调用接口太慢了长达19s的耗时这不得不让客户怀疑 ”诶怎么不动了我卡死了吗“ 用户体验很不好。
开始
拿到bug之后小符也一脸懵呀其实我想先判断是否是后端的问题呢但好像有点多余ld把另一个项目的代码权限给我加上了因为另一个项目有个类似的功能且没有bug我对比着看一下。
果然…我看了一下午之后并没有发现什么特别的数据库交互的次数也都是2次。
新哥看我一筹莫展给我说了一下思路可以把2次查询优化到一次查询。于是周五快乐的下班了…
后来
周一又到了上班的时间想要复现接口查询慢时又发现了原因。我只是一个小小的实习生呀不能直接进行线上操作的。
在本地复现bug写了段代码向数据库插入1w条数据执行了50分钟。插入1w条数据之后呢再次执行本地也仅耗时3s左右但也很满足了。
优化代码后的执行操作时2.2s提高了40%左右这波优化并不完美啊但实力有限就这样把bug提交了不知后面会不会再次小符优化这个bug
过程
学习trino查询引擎架构体系大致了解了一下 trino提供了统一查询接口可以跨不同的数据源进行数据的查询。通过统一sql访问各类的数据源比如mysql、redis、Oracle、db2等等。大幅度提高了查询效率也简化了代码。
bug本地复现随便写一段代码能插1w条数据把时间提上去就行
public class GetConnection {public static void getConnection() throws SQLException, ClassNotFoundException {Class.forName(io.trino.jdbc.TrinoDriver);TimeZone.setDefault(TimeZone.getTimeZone(08:00));String url jdbc:trino://1.2.3.4:8081/hive/a;Properties properties new Properties();properties.setProperty(user, abc);properties.setProperty(password, 123456);Connection connection DriverManager.getConnection(url, properties);Statement statement connection.createStatement();String insertSql INSERT INTO A (a1, a2, a3, a4, a5) VALUES (?, ?, ?, ?, ?);PreparedStatement preparedStatement connection.prepareStatement(insertSql);long start System.currentTimeMillis();for (int i 1; i 10000; i) {AA data new AA(A1 i, A2 i, A3 i, A4 i, A5 i);preparedStatement.setDouble(1, data.getA1());preparedStatement.setString(2, data.getA2());preparedStatement.setString(3, data.getA3());preparedStatement.setString(4, data.getA4());preparedStatement.setString(5, data.getA5());preparedStatement.addBatch();System.out.println(i);}preparedStatement.executeBatch();long end System.currentTimeMillis();System.out.println(1w次总耗时(end - start) ms);connection.close();}public static void main(String [] args) throws SQLException, ClassNotFoundException {GetConnection.getConnection();System.out.println(11111);}}
利用postman和arthas的trace命令进行优化前后的一个追踪和测试… 结束的有点潦草了…太困了 睡觉去了