Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用JDBC在MySQL上进行低优先级更新-如何检查它们是否工作_Java_Mysql_Spring_Jdbc - Fatal编程技术网

Java 使用JDBC在MySQL上进行低优先级更新-如何检查它们是否工作

Java 使用JDBC在MySQL上进行低优先级更新-如何检查它们是否工作,java,mysql,spring,jdbc,Java,Mysql,Spring,Jdbc,我有一个基本的设置,其中数据库由多个web应用程序读取,并且定期有一个批处理应用程序进行大量的编写。在编写过程中,web应用程序的性能严重下降(它们的数据库读取速度非常慢) 环境署。是使用MYISAM引擎的MySQL db,批处理应用程序是Java SE应用程序,使用spring batch和SimpleJDBCTemplate通过JDBC发出SQL命令。我发现MySQL有一个参数降低了MYISAM引擎上写操作的优先级:。要引用文档和其他文档,您可以“将低优先级设置为1以更改一个线程中的优先级”

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

环境署。是使用MYISAM引擎的MySQL db,批处理应用程序是Java SE应用程序,使用spring batch和SimpleJDBCTemplate通过JDBC发出SQL命令。我发现MySQL有一个参数降低了MYISAM引擎上写操作的优先级:。要引用文档和其他文档,您可以“将低优先级设置为1以更改一个线程中的优先级”。我选择这样做是因为从我的应用程序的配置角度来看,这是最简单的。我所做的是配置我的数据源,以便它为打开的每个连接执行“设置…”,如下所示:

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <!-- other props omitted -->
        <property name="connectionInitSqls">
            <list>
                <value>SET low_priority_updates="ON"</value>
            </list>
        </property>
    </bean>

设置低优先级更新=“ON”
现在我的问题是,如何检查通过该数据源发布的SQL是否以低优先级运行?如果我在MySQL中执行插入时显示完整的PROCESSLIST,只需告诉我它们执行的是什么SQL,而与优先级无关:

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


那么,是否有任何实际的方法来检查是否考虑了每个查询/线程的低优先级更新值?

通过发出SET low\u priority\u updates=1命令,您正在影响会话的变量值。因此,通过检查会话中变量的值可以看到这一点

我知道两种方法:

1-显示“低优先级”等会话变量

这显示开/关

2-选择@@session.low_priority_更新

这是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表将显示每个连接中变量的值。

是的,结果非常好。我可以使用JDBC通过发出“select connection\u id(),@@session.low\u priority\u updates from dual”来检查连接是否具有正确的低优先级值。实际上,它工作正常,变量的会话值根据我在connection init初始化它的方式而变化。谢谢