Mam podstawową konfigurację, w której baza danych jest odczytywana przez wiele aplikacji internetowych i okresowo mam aplikację wsadową, która ma dużo pisania. W trakcie pisania wydajność aplikacji internetowych ulega znacznemu pogorszeniu (ich odczyty w bazie danych są bardzo powolne).Aktualizacje o niskim priorytecie na MySQL przy użyciu JDBC - jak sprawdzić, czy działają
The env. jest bazą danych MySQL db z wykorzystaniem silnika MYISAM, aplikacja wsadowa to aplikacja Java SE, wykorzystująca wiosenne zadania wsadowe i SimpleJDBCTemplate do wydawania poleceń SQL za pośrednictwem JDBC. Zauważyłem, że MySQL ma parametr, który obniża priorytet operacji zapisu na silniku MYISAM: low_priority_updates. Aby zacytować dokumenty, można między innymi ustawić "SET LOW_PRIORITY_UPDATES = 1, aby zmienić priorytet w jednym wątku". Zdecydowałem się na to, ponieważ jest to najłatwiejsze z punktu widzenia konfiguracji mojej aplikacji. Co robiłem jest skonfigurowany tak, że mój DataSource to exectutes że „SET ...” dla każdego połączenia otwiera, tak jak poniżej:
<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>
Teraz moje pytanie brzmi, jak mogę sprawdzić, że faktycznie wydane SQL za pośrednictwem tego źródła danych rzeczywiście działa z niskim priorytetem? Jeśli robię SHOW FULL PROCESSLIST
w MySQL podczas gdy wkładki są dzieje się to po prostu powiedz mi, co SQL oni wykonywać, nic o priorytecie:
Gdybym sprawdzić zmienne serwerowe low_priority_updates jest „OFF”, ale to tylko zmienna serwerowa, nie ma nic o wartości lokalnej wątku.
Czy istnieje również aktualny sposób sprawdzenia, czy wartości zapytania/wątku uwzględniają wartości low_priority_updates?
Tak, udało się. Mogę użyć JDBC, aby sprawdzić, czy połączenie ma poprawną wartość low_priority, wydając "select connection_id(), @@ session.low_priority_updates from dual". I rzeczywiście działa dobrze, wartość sesji zmiennej zmienia się w zależności od tego, jak ją zainicjuję przy połączeniu init. Dzięki! –