加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

使用JDBC对MySQL进行低优先级更新 – 如何检查它们是否有效

发布时间:2020-12-15 01:28:28 所属栏目:大数据 来源:网络整理
导读:我有一个基本设置,其中数据库由多个Web应用程序读取,并且我有一个批处理应用程序,它做了大量的写作.在编写过程中,Web应用程序的性能严重下降(其数据库读取速度非常慢). 环境是使用MYISAM引擎的MySQL数据库,批处理应用程序是一个Java SE应用程序,使用spring-b

我有一个基本设置,其中数据库由多个Web应用程序读取,并且我有一个批处理应用程序,它做了大量的写作.在编写过程中,Web应用程序的性能严重下降(其数据库读取速度非常慢).

环境是使用MYISAM引擎的MySQL数据库,批处理应用程序是一个Java SE应用程序,使用spring-batch和SimpleJDBCTemplate通过JDBC发出SQL命令.我发现MySQL有一个参数可以降低MYISAM引擎上写操作的优先级:low_priority_updates.要引用文档,除其他外,你可以“设置LOW_PRIORITY_UPDATES = 1来改变一个线程中的优先级”.我选择了这个,因为从我的应用程序的配置角度来看它是最容易的.我所做的是配置我的DataSource,以便为它打开的每个连接执行“SET …”,如下所示:

现在我的问题是,我如何实际检查通过此数据源发出的SQL是否确实以低优先级运行?如果我在插件发生时在MySQL中显示完全进程列表,它只是告诉我他们正在执行什么SQL,没有关于优先级:

如果我检查服务器变量low_priority_updates是“OFF”但这只是服务器变量,那么它与线程本地值无关.

那么,是否有任何实际的方法来检查每个查询/线程low_priority_updates的值是否被考虑在内?

最佳答案
通过发出SET LOW_PRIORITY_UPDATES = 1命令,您将影响会话的变量值.因此,可以通过检查会话中变量的值来看到这一点.

我知道有两种方法可以做到:

1-显示会话变量类似’low_priority_dapdates’

这显示ON / OFF

2-选择@@ session.low_priority_updates

这给了0/1

重要提示:上述语句/调用将显示运行它们的会话中的变量值.
因此,您需要使用连接本身运行它们才能查看值.我不知道MySQL中的哪种方法可以为属于另一个会话的变量选择值.

如果您希望将它们视为列表,则可能需要通过创建表并自行记录该信息来解决此问题.例如:

CREATE TABLE `mydb`.`my_low_priority_updates` (
  `connection_id` INT,`low_priority_updates_value` INT  NOT NULL
)
ENGINE = MyISAM;

那么你需要一个语句,将连接ID??和值插入表中:

insert into my_low_priority_updates(connection_id,low_priority_updates_value)
select connection_id(),@@session.low_priority_updates
from dual
where not exists (select 1 from my_low_priority_updates where connection_id=connection_id())

你可以把这个语句放在一个过程中并确保它被调用,或者将它添加到你知道更新/插入的表的触发器中.

之后,稍后查询my_low_priority_updates表将显示每个连接中变量的值.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读