sql >> Databáze >  >> RDS >> Mysql

Mysql jconnector tráví 50 % času v com.myql.jdbc.utils.ReadAheadInputStream.fill()

VisualVM počítá vlákno jako využívající čas CPU, kdykoli si JVM myslí, že je spustitelné. To znamená, že každé vlákno, které nečeká na zámek, je víceméně považováno za spustitelné, včetně vláken čekajících na I/O v jádře! Zde dochází k velkému využití CPU v com.myql.jdbc.utils.ReadAheadInputStream.fill() pochází z. Takže místo problému s CPU máte problém s I/O.

Existuje několik věcí, které můžete udělat na straně JVM, ale ne moc přímočaré optimalizace:

  1. Upravte velikost fondu připojení. 1 000 souběžných dotazů je hodně . Pokud vaše instance MySQL není skutečně masivní, bude mít potíže zvládnout tuto úroveň zatížení a zabere spoustu času pouhé přepínání mezi dotazy. Zkuste snížit velikost fondu na 250 nebo dokonce 50 a poměřte tam.
  2. Zadávejte méně nebo menší dotazy. Pokud je vaše aplikace malá, může být triviálně zřejmé, že je nezbytný každý řádek z každého dotazu, ale možná je vaše aplikace větší. Jsou různá místa, která se dotazují na stejná data, nebo lze dva různé dotazy sloučit do jednoho, který uspokojí oba?


  1. Entity framework přidává další podmínku pro klauzuli where

  2. Co virtuální statistika souborů dělá a co ne, řekne vám o latenci I/O

  3. Převést výsledky dotazu mysql na CSV (s kopírováním/vkládáním)

  4. Předejte funkci více sad nebo polí hodnot