sql >> Database >  >> RDS >> Mysql

Mysql jconnector brengt 50% tijd door in com.myql.jdbc.utils.ReadAheadInputStream.fill()

VisualVM telt dat een thread CPU-tijd gebruikt wanneer de JVM denkt dat deze kan worden uitgevoerd. Dit betekent dat elke thread die niet op een slot wacht, min of meer als uitvoerbaar wordt beschouwd, inclusief threads die wachten op I/O in de kernel! Dit is waar het grote CPU-gebruik in com.myql.jdbc.utils.ReadAheadInputStream.fill() vandaan komt. Dus in plaats van een CPU-probleem heb je een I/O-probleem.

Er zijn een aantal dingen die u kunt doen aan de JVM-kant, maar niet veel eenvoudige optimalisatie:

  1. Tweak de grootte van de verbindingspool. 1000 gelijktijdige zoekopdrachten is een veel . Tenzij uw MySQL-instantie echt enorm is, zal het moeite hebben om dat niveau van belasting te verwerken en veel tijd in beslag nemen door alleen maar tussen query's te schakelen. Probeer de poolgrootte te verlagen tot 250 of zelfs 50, en benchmark daar.
  2. Doe minder of kleinere zoekopdrachten. Als uw app klein is, is het misschien triviaal voor de hand liggend dat elke rij van elke zoekopdracht nodig is, maar misschien is uw app groter dan dat. Zijn de verschillende plaatsen die dezelfde gegevens opvragen, of kunnen twee verschillende zoekopdrachten worden gecombineerd tot één die aan beide voldoet?


  1. Standen MySQL Volleybal

  2. Geef sommige velden meer relevantie en sorteer op relevantie in mysql full text search

  3. T-SQL gesplitste tekenreeks

  4. Groeperen op LIKE van een kolomwaarde