Tengo una configuración básica donde la base de datos es leída por múltiples aplicaciones web, y periódicamente tengo una aplicación por lotes que hace mucha escritura. Durante la redacción, el rendimiento de las aplicaciones web se degrada considerablemente (sus lecturas de base de datos son muy lentas).Actualizaciones de baja prioridad en MySQL usando JDBC - cómo verificar si funcionan
The env. es MySQL db utilizando el motor MYISAM, la aplicación por lotes es una aplicación Java SE, que utiliza Spring-batch y SimpleJDBCTemplate para emitir comandos SQL a través de JDBC. Descubrí que MySQL tiene un parámetro que reduce la prioridad de las operaciones de escritura en el motor MYISAM: low_priority_updates. Para citar los documentos, entre otros, puede "ESTABLECER LOW_PRIORITY_UPDATES = 1 para cambiar la prioridad en un hilo". Opté por esto porque es más fácil desde el punto de vista de la configuración de mi aplicación. Lo que he hecho está configurado mi fuente de datos de tal manera que exectutes que "SET ..." para cada conexión se abre, de este modo:
<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>
Ahora mi pregunta es, ¿cómo puedo comprobar realmente que un SQL emitido a través de este datasource realmente se ejecuta con baja prioridad? Si hago SHOW FULL PROCESSLIST
en MySQL, mientras que los insertos están sucediendo que sólo dime lo que SQL que están ejecutando, nada acerca de la prioridad:
Si puedo comprobar los LOW_PRIORITY_UPDATES variables de servidor está en "OFF", pero eso es sólo la variable de servidor, no tiene nada que ver con el valor local del subproceso.
De nuevo, ¿hay alguna manera real de comprobar si por consulta/thread se tienen en cuenta los valores de low_priority_updates?
Sí, funcionó muy bien. Puedo usar JDBC para verificar que una conexión tenga el low_priority_value correcto al emitir 'select connection_id(), @@ session.low_priority_updates desde dual'. Y, de hecho, funciona bien, el valor de la sesión de la variable cambia según la inicialización en la conexión init. ¡Gracias! –