当前位置: 首页>行业 >

每日时讯!mysql connector 执行 select 和 shardingshpere-proxy 的处理过程

来源: 博客园 | 时间: 2023-04-18 15:58:12 |


(资料图片)

use java mysql connector

// fake mysql select code// ... datasource initConnection conn = datasource.getConnection();PreparedStatement pst = conn.prepareStatement("select id, task_name from t_task where id = ?");pst.setLong(1, 31);pst.executeQuery();

按照直觉, 既然用了 preparedStatement, 执行过一次后会在服务端缓存好预编译的语句, 之后就能省去这个解析过程,直接提交参数执行就好了

  1. 但是, mysql connector 默认创建的是 ClientPreparedStatement
public PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency) throws SQLException {        try {            synchronized(this.getConnectionMutex()) {                this.checkClosed();                ClientPreparedStatement pStmt = null;                boolean canServerPrepare = true;                String nativeSql = (Boolean)this.processEscapeCodesForPrepStmts.getValue() ? this.nativeSQL(sql) : sql;                if ((Boolean)this.useServerPrepStmts.getValue() && (Boolean)this.emulateUnsupportedPstmts.getValue()) {                    canServerPrepare = this.canHandleAsServerPreparedStatement(nativeSql);                }              // useServerPrepStmts = false                if ((Boolean)this.useServerPrepStmts.getValue() && canServerPrepare) {                      // ... 省略一些代码                    } else {                    //... 省略一些代码                            pStmt = (ClientPreparedStatement)this.clientPrepareStatement(nativeSql, resultSetType, resultSetConcurrency, false);                        }                    }                } else {                    pStmt = (ClientPreparedStatement)this.clientPrepareStatement(nativeSql, resultSetType, resultSetConcurrency, false);                }                return (PreparedStatement)pStmt;            }        } catch (CJException var17) {            throw SQLExceptionsMapping.translateException(var17, this.getExceptionInterceptor());        }    }

因为默认并没有设置 useServerPrepStmts = true, 默认是false 去指定要求服务端缓存 创建的 clientPrepareStatement 客户端语句

  1. 是不是 ClientPreparedStatement 看着客户端侧进行一些元数据的缓存?pst.executeQuery(); 代码中有一段逻辑, 如果cacheResultSetMetadata=true的话,会缓存元数据,但是并没有
boolean cacheResultSetMetadata = (Boolean)locallyScopedConn.getPropertySet().getBooleanProperty(PropertyKey.cacheResultSetMetadata).getValue();                    String origSql = ((PreparedQuery)this.query).getOriginalSql();                    if (cacheResultSetMetadata) {                        cachedMetadata = locallyScopedConn.getCachedMetaData(origSql);                    }

所以,虽然每次还是从服务端拿返回 参数 和 resultSet 的一些元数据

  1. 最终发往服务端(这边场景是proxy) 的 sql 其实是非参数化的 com_query 命令

  2. proxy 接收到 com_query 交由 MySQLComQueryPacketExecutor 处理

public Collection> execute() throws SQLException {        ResponseHeader responseHeader = proxyBackendHandler.execute();        if (responseHeader instanceof QueryResponseHeader) {            return processQuery((QueryResponseHeader) responseHeader);        }        responseType = ResponseType.UPDATE;        return processUpdate((UpdateResponseHeader) responseHeader);    }

MySQLComQueryPacketExecutor 常规文本查询,在 proxy frontend 处理过程较为的简单,直接交给 backend 执行,后续就和 sharding-jdbc 核心处理逻辑一致了,比如 分库分表、读写分离、单库单表直接执行

扩展:

  • mysql connector 性能相关属性 https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-connp-props-performance-extensions.html
  • mysql/server cache 对比 https://vladmihalcea.com/mysql-jdbc-statement-caching/

关键词:

 

热文推荐

每日时讯!mysql connector 执行 select 和 shardingshpere-proxy 的处理过程

usejavamysqlconnector fakemysqlselectcode datasourceinitConnectionconn=datasour

2023-04-18

厦门今年首批三块商住用地下月起拍

昨日,市自然资源和规划局发布公告,计划于5月10日集中出让今年第一批商住用地。本批次地块共计3宗,其中岛内湖里区2宗、岛外翔安区1宗。湖里

2023-04-18

超级阴线炸板次日的处理方式_天天快资讯

这一篇主要针对次日分时处理,对超短选手更好的分时处理上的参考。另外配合情绪周期来处理大阴,也是很重要的思路。常言道“常在河边走哪有不

2023-04-18

焦点短讯!突发!美国外交使团在苏丹遇袭

美国国务卿布林肯证实美国外交使团的车队17日在苏丹遭到袭击。

2023-04-18

今日pd999钯金回收价格查询(2023年04月18日)

今日pd999钯金多少钱一克回收价格(2023年04月18日)每日更新

2023-04-18

天津港北港路南延工程二标段打桩作业正式开工

日前,天津港北港路南延工程二标段打桩作业正式开工。该工程作为天津市重点推动项目,建成投用后将为港区集疏运公路网体系建设再添一条集疏运

2023-04-18

要闻速递:拦截信访“挂号”的种种怪象:销号

1、《拦截信访“挂号”的种种怪象:销号》作者是刘一纯。2、是在新浪读书连载的宦海沉浮小说。本文到此分享完毕,希望对大

2023-04-18

全球播报:福特Ka + Active从城市汽车到坚固的城市巡洋舰

SeatArona只是福特的Ka+Active中许多紧凑型SUV之一,在该品牌的小型城市车中增加了SUV提示-但值

2023-04-18

​文心一言嵌入百度内部工作平台,全体员工都能使用_环球快讯

鞭牛士4月18日消息,据科创板日报消息,文心一言在百度内部全面应用在智能工作平台“如流”,已经为全体员工开通使用。文心一言可根据员工输入

2023-04-18

出行注意!大雨持续,湖南部分高速交通管制|环球热头条

记者从湖南高速公路获悉,受降雨影响,截至4月18日9时30分,湖南实施交通管制的路段包括:9时24分

2023-04-18

天弘基金陈国光:乘时代之风,做基本面驱动的科技投资

要问最近风头最盛的是哪个板块,那科技定是当仁不让。2023年以来,科技板块的表现超越了消费、金融、地产等一众优质赛道,其中的TMT、计算机和

2023-04-18

特斯拉中国工厂薪资曝光:普通工人月薪1万块,还有股票拿

据上海临港招聘发布,近日刚刚签约落户上海临港的特斯拉储能超级工厂开始招聘,2019年,特斯拉上海工厂建成招聘时,曾掀起一股招聘热,原以为

2023-04-18

富士康老板郭台铭_郭台铭祖籍-每日观点

1、郭台铭,著名企业家,祖籍山西省晋城市泽州县(现属晋城市)南岭乡葛万村人,出生于台北县板桥市,毕业于台北市的中国海专,

2023-04-18

上车盘跌价 屯门元朗单日4宗蚀让

大公网地产频道

2023-04-18

微头条丨炸学校歌曲_炸学校

1、第一段:太阳当空照,花儿对我笑,小鸟说:早早早,你为什么背着炸药包。2、第二段:我去炸学校,老师不知道,一拉线,我就

2023-04-18

今日报丨五一档电影你想看哪部?

00:23人民日报微博2023“五一档”即将开启,目前已有十余部电影定档,包括《长空之王》《人生路不熟》《检察风云》《惊

2023-04-17

损坏的图像没有被指定在windows上运行(损坏的图像没有被指定在windows上运行)

损坏的图像没有被指定在windows上运行,损坏的图像没有被指定在windows上运行这个很多人还不知道,现在让我们一起来看看吧!1、把windows升级。本文

2023-04-17

维科技术(600152.SH)发2022业绩,净亏损1.05亿元|当前讯息

智通财经讯,维科技术(600152 SH)发布2022年年度报告,实现营业收入23 25亿元,同比增长12 03%。归属

2023-04-17

当日快讯:国家发改委社会司赴上海 青岛开展邮轮旅游专题调研

据国家发改委网站4月17日消息,为加快促进邮轮旅游行业复苏及高质量发展,4月中旬,社会司相关负责同志带队赴上海市吴淞港、青岛市青岛港实地

2023-04-17

每日快播:企业所得税年报流程

今天来聊聊关于企业所得税年报流程的文章,现在就为大家来简单介绍下企业所得税年报流程,希望对各位小伙伴们有所帮助。1、您好

2023-04-17

资讯

北京推出14条秋游文化线路

金秋时节,北京市文化和旅游局以赏银杏品文化为主题,推出14条“叶落的季节——漫步北京赏银杏品文化主题线路”,邀市民和游客以步行、骑行

2021-10-27     
基因编辑发力 培育高质量人源化供体猪

此次人体试验,仅仅验证了基因编辑猪克服异种器官移植的超急性排斥反应,还需解决延迟性排斥反应、消耗性血栓等问题。但通过这次试验,能更

2021-10-27     
中国经济高质量发展步伐稳健 长期向好基本面未变

在全球疫情走势和经济走势趋于复杂的背景下,中国经济巨轮将驶向何方,举世关注。2020年10月26日至29日,党的十九届五中全会在京举行,明确

2021-10-27     
南美解放者杯决赛允许近4.5万观众入场

南美洲足联主席多明格斯25日与今年解放者杯决赛对阵的两支俱乐部负责人会晤,宣布决赛现场观众人数增加到球场容量的75%,即近4 5万人。今年

2021-10-27     
22年从警生涯 面对荣誉他说不要给我报功

9月24日,时任安徽省安庆市公安局迎江分局刑警大队大要案中队中队长周磊因在工作中激烈搏斗引发心源性猝死,倒在了工作岗位上,经医院抢救

2021-10-27     
走近冬奥|五棵松体育中心场馆“黑科技”全面上岗 助力冬

“相约北京”冰球国内测试活动将于2021年11月7日至10日在五棵松体育中心场馆举行,在疫情防控方面,场馆引入了诸多“黑科技”,为防疫安全

2021-10-27