sql >> Databasteknik >  >> RDS >> Mysql

MySQL Inserts prestanda försämras på ett stort bord

Du sa inte om detta var ett testsystem eller produktion; Jag antar att det är produktion.

Det är troligt att du har fått tabellen till en storlek där dess index (eller hela partiet) inte längre får plats i minnet.

Det betyder att InnoDB måste läsa in sidor under infogning (beroende på fördelningen av dina nya raders indexvärden). Att läsa sidor (slumpmässig läsning) går väldigt långsamt och måste undvikas om möjligt.

Partitionering verkar vara den mest uppenbara lösningen, men MySQL:s partitionering kanske inte passar ditt användningsfall.

Du bör absolut överväga alla möjliga alternativ - skicka bordet till en testserver i ditt labb för att se hur det beter sig.

Din primära nyckel ser för mig ut som om den möjligen inte är nödvändig (du har ett annat unikt index), så att eliminera det är ett alternativ.

Tänk också på innodb-plugin och komprimering, detta kommer att få din innodb_buffer_pool att gå längre.

Du måste verkligen analysera dina användningsfall för att avgöra om du verkligen behöver behålla all denna data och om partitionering är en vettig lösning.

Om du gör några ändringar i den här applikationen kommer sannolikt att introducera nya prestandaproblem för dina användare, så du vill vara riktigt försiktig här. Om du hittar ett sätt att förbättra insättningsprestanda är det möjligt att det kommer att minska sökprestanda eller prestanda för andra operationer. Du måste göra ett grundligt prestandatest på hårdvara av produktionskvalitet innan du släpper en sådan ändring.



  1. Skapa en funktion i Postgresql som inte returnerar sammansatta värden

  2. Fel 1329:Inga data - noll rader hämtade, markerade eller bearbetade - även när allt är rätt gjort

  3. MySQL GROUP &COUNT Flera tabeller

  4. Nätverksadaptern kunde inte upprätta anslutningen - Oracle 11g