Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 15232|Antwoord: 3

[Bron] MySQL CPU 100% hoge oplossing

[Link kopiëren]
Geplaatst op 11-10-2018 11:20:31 | | | |
Open de server taakbeheer en zie dat het CPU-proces altijd 99% heeft gehad, en dat het zicht wordt ingenomen door het MySQL-proces, dat hoog is geweest.


De output van het processlist-commando toont welke threads draaien, en je kunt de huidige loopstatus van de database controleren.

1. Ga naar de mysql/bin-map en voer mysqladmin processlist in;
2. Start MySQL en voer de proceslijst aan.
Als je SUPER-toestemming hebt, kun je alle threads zien, anders kun je alleen de threads van je account zien.





De betekenis en het doel van elke kolom

id: Een identificatie
user: toont de huidige gebruiker, als het geen root is, toont dit commando alleen SQL-instructies binnen uw permissies.
host: geeft aan van welk IP deze instructie van welke poort komt
db: Toont de database waarmee het proces momenteel verbonden is.
commando: Toont de commando's die door de huidige verbinding worden uitgevoerd, meestal slaap, query en connect.
tijd: De tijd die deze staat duurt, in seconden.
State: Toont de status van de SQL-instructie die de huidige verbinding gebruikt, maar alleen een bepaalde status in de uitvoering van de statement, een SQL-statement, is geraadpleegd, bijvoorbeeld, het kan nodig zijn om te kopiëren naar tmp-tabel, Sorteerresultaat, Verzenddata, enzovoort
info: Toont deze SQL-instructie, omdat de lengte beperkt is, waardoor de lange SQL-instructie niet volledig wordt weergegeven, maar het is een belangrijke basis om de probleemstelling te beoordelen.


Er blijkt dat er twee SQL-query-statements zijn die het langst duren en niet langer dan 1000 seconden zijn uitgevoerd, en de SQL-statements die we uit het infoveld hebben gekopieerd zijn een gezamenlijke query, als volgt:

selecteer cast (count(*) als SIGNED) als col_0_0_ uit 'RatedPassenger' ratedpasse0_, 'BaseInfoCompany' baseinfoco1_, 'OrderMatch' ordermatch2_ waar baseinfoco1_. CompanyId=ratedpasse0_. CompanyId en ordermatch2_. OrderId=ratedpasse0_. OrderId

We beëindigen het proces van deze twee query-statements

Na 10 seconden wachten ontdekte ik dat de CPU flink was uitgevallen, maar het was nog steeds erg hoog, en ik blijf de reden navragen!



Voor de join joint query-instructie voeg je een index toe aan het bijbehorende veld of wijzig je de programmaquerycode.
Maak een index SQL-instructie aan

Einde





Vorig:C# inloggen op Wordpress
Volgend:Wijzig de methode van port mapping voor docker-containers
 Huisbaas| Geplaatst op 11-10-2018 13:03:02 |
De meest kritische van dit commando is de statuskolom, en de states die in MySQL worden vermeld zijn voornamelijk als volgt:

Controletafel  
  Het datasheet controleren (dit is automatisch).  
  Afsluitende tabellen  
  De gegevens die in de tabel zijn gewijzigd, worden naar de schijf gespoeld, en de gebruikte tabel wordt gesloten. Dit is een snelle handeling; zo niet, dan moet je controleren of de schijfruimte vol is of dat de schijf onder belasting staat.  
  Verbind Je  
  De replicatieslave-server maakt verbinding met de primaire server.  
  Kopiëren naar tmp-tabel op schijf  
  Omdat de tijdelijke resultaatset groter is dan tmp_table_size, wordt de tijdelijke tabel van in-memory naar schijfopslag omgezet om geheugen te besparen.  
  Het maken van tmp-tabel  
  Er wordt een tijdelijke tabel aangemaakt om enkele van de zoekresultaten op te slaan.  
  verwijderen uit de hoofdtabel  
  De server voert het eerste deel van een multi-table verwijdering uit en heeft net de eerste tabel verwijderd.  
  verwijderen uit referentietabellen  
  De server voert het tweede deel van multi-table verwijdering uit, namelijk het verwijderen van records uit andere tabellen.  
  Spoeltabellen  
  Ik doe de FLUSH TABLES, wacht tot andere threads de datatabel sluiten.  
  Gedood  
  Als er een kill-verzoek naar een thread wordt gestuurd, zal de thread de kill-vlag controleren en het volgende kill-verzoek laten vallen. MySQL controleert op kill-flags in elke hoofdlus, hoewel de thread in sommige gevallen voor een korte periode kan uitvallen. Als de thread door een andere thread wordt vergrendeld, wordt het kill-verzoek direct ingegaan zodra de lock wordt opgeheven.  
  Vergrendeld  
  Vergrendeld door andere queries.  
  Verzending van data  
  Het record van de SELECT-query wordt verwerkt terwijl de resultaten naar de client worden gestuurd.  
  Sortering naar groep  
  Sorteren voor GROEP OP.  
  Sorteren op volgorde  
  Sortering wordt gedaan voor ORDER BY.  
  Openingstafels  
  Dit proces moet snel verlopen, tenzij andere factoren dit belemmeren. Een datatabel kan bijvoorbeeld niet door een andere thread worden geopend totdat de ALTER TABLE- of LOCK TABLE-instructie is uitgevoerd. Proberen een tafel open te maken.  
  Duplicaten verwijderen  
  Er wordt een select discent-query uitgevoerd, maar MySQL kan de dubbele records in de vorige fase niet optimaliseren. Daarom moet MySQL de dubbele records opnieuw verwijderen voordat de resultaten naar de client worden gestuurd.  
  Heropende tafel  
  Een lock op een tabel wordt verkregen, maar deze moet worden aangepast nadat de tabelstructuur is aangepast. Ik heb het slot al losgemaakt, het datasheet gesloten en probeer de datatabel opnieuw te openen.  
  Herstellen door sorteren  
  De fix-instructie sorteert om een index te maken.  
  Repareren met keycache  
  De fix-richtlijn gebruikt de indexcache om nieuwe indexen één voor één te maken. Het zal langzamer zijn dan Repareren door te sorteren.  
  Rijen zoeken naar update  
  In aanmerking komende dossiers worden geïdentificeerd voor updates. Dit moet gebeuren voordat de UPDATE het relevante record aanpast.  
  Slapen  
  Wachten tot de klant een nieuw verzoek stuurt.  
  Systeemvergrendeling  
  Wachten op het verkrijgen van een externe systeemvergrendeling. Als er geen mysqld-servers tegelijk draaien die dezelfde tabel aanvragen, kunnen externe systeemvergrendelingen worden verboden door de parameter –skip-external-locking toe te voegen.  
  Sluis upgraden  
  INSERT DELAYED probeert een vergrendelingstabel te krijgen om een nieuw record in te voegen.  
  Bijwerken  
  Zoeken naar overeenkomende records en ze aanpassen.  
  User Lock  
  wacht op GET_LOCK().  
  Tafelbediening  
  De thread werd geïnformeerd dat de datasheetstructuur was aangepast en opnieuw geopend moest worden om de nieuwe structuur te krijgen. Vervolgens moet je, om de datatabel opnieuw te openen, wachten tot alle andere threads de tabel sluiten. Deze melding vindt plaats in de volgende gevallen: FLUSH TABLES tbl_name, VERANDER TABLE, HERNOEM TABLE, REPAIR TABLE, ANALYZE TABLE of OPTIMIZE TABLE.  
  wachten op handler-invoeging  
  INSERT DELAYED heeft alle lopende inserts verwerkt en wacht op een nieuw verzoek.  
  De meeste toestanden komen overeen met snelle bewerkingen; zolang een thread enkele seconden in dezelfde toestand blijft, kan er een probleem ontstaan dat gecontroleerd moet worden.
 Huisbaas| Geplaatst op 01-03-2019 10:26:49 |
 Huisbaas| Geplaatst op 01-03-2019 10:34:13 |


Het duurt 10 seconden om een stuk data te bevragen.
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com