Mysql
 sql >> база данни >  >> RDS >> Mysql

Mysql jconnector прекарва 50% време в com.myql.jdbc.utils.ReadAheadInputStream.fill()

VisualVM отчита дадена нишка като използваща процесорно време, когато JVM смята, че е изпълнима. Това означава, че всяка нишка, която не чака заключване, се счита за изпълнима, повече или по-малко, включително нишки, чакащи за I/O в ядрото! Това е мястото, където голямото използване на процесора в com.myql.jdbc.utils.ReadAheadInputStream.fill() идва от. Така че вместо проблем с процесора, имате I/O проблем.

Има някои неща, които можете да направите от страна на JVM, но не много просто оптимизиране:

  1. Настройте размера на пула за връзки. 1000 едновременни заявки са много . Освен ако вашият MySQL екземпляр не е наистина огромен, той ще има проблеми със справянето с това ниво на натоварване и ще изяде много време само при превключване между заявки. Опитайте да намалите размера на пула до 250 или дори 50 и направете сравнение.
  2. Правете по-малко или по-малки заявки. Ако приложението ви е малко, може да е тривиално очевидно, че всеки ред от всяка заявка е необходим, но може би приложението ви е по-голямо от това. Различните места, които заявяват едни и същи данни ли са или две различни заявки могат да бъдат комбинирани в една, която да удовлетвори и двете?


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mysql:Функцията за агрегиране не работи без групиране по

  2. създайте слайдшоу от изображения вътре в bootstrap модално динамично с помощта на PHP

  3. Кога е време таблицата да се промени от MyISAM на InnoDb?

  4. Предаване на PHP променливи в MySQL

  5. Уведомяване на потребителя при промяна на базата данни? JavaScript/AJAX