sql >> Database teknologi >  >> RDS >> Mysql

MySQL Insert-ydeevnen forringes på et stort bord

Du sagde ikke, om dette var et testsystem eller produktion; Jeg går ud fra, at det er produktion.

Det er sandsynligt, at du har fået bordet til en størrelse, hvor dets indekser (eller hele partiet) ikke længere passer ind i hukommelsen.

Det betyder, at InnoDB skal læse sider ind under indsættelser (afhængigt af fordelingen af ​​dine nye rækkers indeksværdier). Læsning af sider (tilfældig læsning) er virkelig langsom og skal undgås, hvis det er muligt.

Partitionering virker som den mest oplagte løsning, men MySQL's partitionering passer muligvis ikke til din use-case.

Du bør bestemt overveje alle mulige muligheder - få bordet til en testserver i dit laboratorium for at se, hvordan det opfører sig.

Din primære nøgle ser for mig ud, som om den muligvis ikke er påkrævet (du har et andet unikt indeks), så at eliminere det er én mulighed.

Overvej også innodb plugin og komprimering, dette vil få din innodb_buffer_pool til at gå længere.

Du skal virkelig analysere dine use-cases for at afgøre, om du rent faktisk skal beholde alle disse data, og om partitionering er en fornuftig løsning.

Hvis du foretager ændringer på denne applikation, vil det sandsynligvis introducere nye ydeevneproblemer for dine brugere, så du vil være virkelig forsigtig her. Hvis du finder en måde at forbedre indsætningsydelsen på, er det muligt, at det vil reducere søgeydelsen eller ydeevnen af ​​andre operationer. Du skal lave en grundig ydeevnetest på hardware i produktionskvalitet, før du frigiver en sådan ændring.



  1. MySQL match() mod() - rækkefølge efter relevans og kolonne?

  2. enkelte anførselstegn vises omkring værdien efter at have kørt kopi i postgres 9.2

  3. Yii CDbConnection kunne ikke åbne DB-forbindelsen:kunne ikke finde driver med google cloud sql

  4. Find ud af den opkaldende lagrede procedure i SQL Server