java mysql sesssion_MySQL之如何消除大量的@@session.tx_read_only

1.发现大量的"select @@session.tx_read_only"

当有好多个线程(我测试时是300个线程)去对数据库进行操作时,用如下命令查看

List-1

show processlist;

得到的结果如下图1,会发现有大量的"select @@session.tx_read_only",占了很大一部分,我们是否可以消除它呢?MySQL具体在做什么。

d91a64601c04593bd6f6fc8f12d59282.png

图1 show processlist的结果

2.这个表示什么

经过google,找到了原因:

JDBC driver每次都要去检查target database是否是isReadOnly,所以发送"select @@session.tx_read_only"给MySQL,所以我们在show processlist时才看到大量的"select @@session.tx_read_only"。建议自行阅读原文。

3.出于提升性能的考虑,怎么消除这么多的"select @@session.tx_read_only"呢

最简单的方法是在JDBC url上面加上:

List-2

&useLocalSessionState=true

加上List-2之后,再去show processlist;查看下,会发现之前出现的大量的"select @@session.tx_read_only"消失不见了。

Reference:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`requests.session()` 是用于创建一个会话对象的方法,它是 `requests` 库中的一个类。会话对象可以发送多个HTTP请求,同时保留会话的状态,例如cookies、headers等。通过会话对象发送的每个请求都可以共享这些状态。 使用 `requests.session()` 方法创建会话对象的示例代码如下: ```python import requests # 创建会话对象 session = requests.session() # 使用会话对象发送HTTP请求 response = session.get('https://www.example.com') # 关闭会话 session.close() ``` 在这个示例中,我们首先导入了 `requests` 库,然后通过 `requests.session()` 创建了一个会话对象 `session`。使用会话对象发送请求时,可以直接调用相应的HTTP方法,例如 `session.get()`、`session.post()`、`session.put()` 等。 通过创建会话对象,我们可以实现以下功能: 1. 在多个请求之间共享cookies。会话对象自动处理服务器返回的cookies,并在后续请求中自动附带。 2. 保持长连接。在同一个会话中发送多个请求时,可以使用同一个底层TCP连接,提高性能。 3. 共享headers等请求信息。可以在会话对象中设置一次headers等信息,在所有请求中自动应用。 需要注意的是,使用完会话对象后应该关闭它,以释放底层资源。可以调用 `session.close()` 方法来关闭会话。另外,也可以使用上下文管理器来自动管理会话的生命周期: ```python import requests # 创建会话对象 with requests.session() as session: # 使用会话对象发送HTTP请求 response = session.get('https://www.example.com') ``` 这样,在代码块结束后,会话对象会自动关闭,无需显式调用 `session.close()`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值