sql >> Database >  >> RDS >> Mysql

De prestaties van MySQL Insert nemen af ​​op een grote tafel

Je zei niet of dit een testsysteem of productie was; Ik neem aan dat het productie is.

Het is waarschijnlijk dat u de tabel zo groot heeft gemaakt dat de indexen (of het hele lot) niet langer in het geheugen passen.

Dit betekent dat InnoDB pagina's moet inlezen tijdens het invoegen (afhankelijk van de verdeling van de indexwaarden van uw nieuwe rijen). Het lezen van pagina's (willekeurig gelezen) is erg traag en moet indien mogelijk worden vermeden.

Partitionering lijkt de meest voor de hand liggende oplossing, maar de partitionering van MySQL past mogelijk niet in uw gebruikssituatie.

U moet zeker alle mogelijke opties overwegen - breng de tabel naar een testserver in uw laboratorium om te zien hoe deze zich gedraagt.

Je primaire sleutel ziet eruit alsof het mogelijk niet nodig is (je hebt een andere unieke index), dus het elimineren ervan is een optie.

Overweeg ook de innodb-plug-in en compressie, hierdoor gaat uw innodb_buffer_pool verder.

Je moet echt je use-cases analyseren om te beslissen of je al deze gegevens echt moet bewaren en of partitionering een verstandige oplossing is.

Als u wijzigingen aanbrengt in deze toepassing, introduceert u waarschijnlijk nieuwe prestatieproblemen voor uw gebruikers, dus u wilt hier heel voorzichtig zijn. Als u een manier vindt om de invoegprestaties te verbeteren, is het mogelijk dat dit de zoekprestaties of de prestaties van andere bewerkingen vermindert. U moet een grondige prestatietest uitvoeren op hardware van productiekwaliteit voordat u een dergelijke wijziging doorgeeft.



  1. Spring Mvc Hibernate Encoding/Multi-line import sql

  2. Rijen in Database bijwerken met waarden uit data.frame in R voorwaardelijk

  3. AccountController met MySQL in ASP.NET MVC

  4. De backend-versie wordt niet ondersteund om databasediagrammen of tabellen te ontwerpen