Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Mysql jconnector spędza 50% czasu w com.myql.jdbc.utils.ReadAheadInputStream.fill()

VisualVM zlicza wątek jako używający czasu procesora, ilekroć JVM uważa, że ​​można go uruchomić. Oznacza to, że każdy wątek, który nie czeka na blokadę, jest mniej lub bardziej możliwy do uruchomienia, włączając w to wątki oczekujące na I/O w jądrze! W tym miejscu występuje duże zużycie procesora w com.myql.jdbc.utils.ReadAheadInputStream.fill() pochodzi. Więc zamiast problemu z procesorem masz problem z wejściami/wyjściami.

Jest kilka rzeczy, które możesz zrobić po stronie JVM, ale nie za dużo prostej optymalizacji:

  1. Dostosuj rozmiar puli połączeń. 1000 jednoczesnych zapytań to dużo . O ile twoja instancja MySQL nie jest naprawdę ogromna, będzie miała problemy z obsługą tego poziomu obciążenia i pochłonie dużo czasu na samo przełączanie się między zapytaniami. Spróbuj zmniejszyć rozmiar puli do 250 lub nawet 50 i porównaj tam.
  2. Wykonuj mniej lub mniejsze zapytania. Jeśli Twoja aplikacja jest mała, może być banalnie oczywiste, że każdy wiersz z każdego zapytania jest niezbędny, ale może Twoja aplikacja jest większa. Czy różne miejsca wysyłają zapytania do tych samych danych, czy też można połączyć dwa różne zapytania w jedno, które zaspokoi oba?


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. uwaga:konwersja tablicy na ciąg znaków w php

  2. Jak mogę zasymulować instrukcję print w MySQL?

  3. PreparedStatement nigdy nie przekroczy limitu czasu, nawet jeśli zostanie wyraźnie ustawiony

  4. java.sql.SQLException:Indeks kolumn poza zakresem, 0 <1

  5. Połączenie MySQL RDS i JDBC SSL daje błąd:nie można znaleźć prawidłowej ścieżki certyfikacji do żądanego celu