Ho una configurazione di base in cui il database viene letto da più applicazioni Web e periodicamente ho un'applicazione batch che esegue molte operazioni di scrittura. Durante la scrittura, la performa- zione delle web-app degrada pesantemente (le letture del loro database sono molto lente).Aggiornamenti a bassa priorità su MySQL utilizzando JDBC - come verificare se funzionano
The env. MySQL db utilizza il motore MYISAM, l'applicazione batch è un'app Java SE, utilizzando spring-batch e SimpleJDBCTemplate per l'emissione di comandi SQL tramite JDBC. Ho scoperto che MySQL ha un parametro che riduce la priorità delle operazioni di scrittura sul motore MYISAM: low_priority_updates. Per citare i documenti, tra gli altri, puoi "SET LOW_PRIORITY_UPDATES = 1 per cambiare la priorità in un thread". Ho optato per questo perché è più semplice dal punto di vista della mia applicazione. Quello che ho fatto è stato configurato il mio DataSource in modo tale che exectutes che "SET ..." per ogni connessione si apre, in questo 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>
Ora la mia domanda è: come posso effettivamente controllare che uno SQL emesso tramite questa origine dati viene effettivamente eseguita con bassa priorità? Se faccio SHOW FULL PROCESSLIST
in MySQL mentre gli inserti sono accadendo solo dirmi cosa SQL che stanno eseguendo, nulla circa la priorità:
Se controllo le variabili del server low_priority_updates è "off", ma che è solo la variabile server, non sa nulla del valore locale del thread.
Quindi, c'è ancora un modo effettivo per verificare se i valori di query/thread low_priority_updates sono presi in considerazione?
Sì, ha funzionato alla grande. Posso usare JDBC per verificare che una connessione abbia il corretto valore low_priority_value emettendo 'select connection_id(), @@ session.low_priority_updates da dual'. E infatti funziona bene, il valore di sessione della variabile cambia in base a come lo inizializzo alla connessione init. Grazie! –