sql >> Databasteknik >  >> RDS >> Mysql

mysql långsam vid den första frågan, sedan snabb för relaterade frågor

Sidor i innodb-datafilerna cachelagras i innodb-buffertpoolen. Det här är vad du kan förvänta dig. Det går långsamt att läsa filer, även på bra hårddiskar, särskilt slumpmässiga läsningar, vilket mestadels är vad databaser ser.

Det kan vara så att din första fråga gör någon form av tabellskanning som drar in många sidor i buffertpoolen, sedan går det snabbt att komma åt dem. Eller något liknande.

Det här är vad jag förväntar mig.

Använd helst samma motor för alla tabeller (undantag:systemtabeller, tillfälliga tabeller (kanske) och mycket små eller kortlivade tabeller). Om du inte gör detta måste de slåss om ram.

Förutsatt att alla dina tabeller är innodb, låt buffertpoolen använda upp till 75 % av serverns fysiska ram (förutsatt att du inte kör för många andra uppgifter på maskinen).

Då kommer du att kunna passa in cirka 12G av din databas i ram, så när den väl har "värmts upp" kommer de "mest använda" 12G i din databas att vara i ram, där åtkomst till den går snabbt och smidigt.

Vissa användare av mysql tenderar att "värma upp" produktionsservrar efter en omstart genom att skicka frågor som kopierats från en annan maskin ett tag (dessa kommer att vara replikeringsslavar) tills de lägger till dem i sin produktionspool. Detta undviker den extrema långsamheten som kan ses när cachen är kall. Till exempel gör Youtube detta (eller åtminstone brukade det; Google köpte dem och de kan nu använda Google-fu)



  1. Infoga flera rader med en MySQL-fråga

  2. ATAN2() Funktion i Oracle

  3. postgres installation initieringen av databasklustret misslyckades ( Postgresql version 9.4.4 )

  4. MySQLTest Fel vid försök att ansluta C# till MySql