sql >> Databasteknik >  >> RDS >> Mysql

MySQL Temp Tabell Plats

MySQL använder ett trick som har varit en del av POSIX-system för alltid. Den öppnar den tillfälliga filen och kopplar omedelbart bort den. Därför är den inte synlig i någon kataloglista. Men POSIX-system som UNIX och Linux borde faktiskt inte ta bort en olänkad fil medan en process har ett öppet filhandtag. Så när frågan med den tillfälliga tabellen är klar kommer den att stänga filhandtaget och sedan tar operativsystemet automatiskt bort filen och frigör lagringsutrymmet som det använde.

Detta är generellt sett bättre än att kräva att serverkoden kom ihåg att ta bort tempfilen när den är klar med den. Det står också för som att tråden avslutas eller mysqld kraschar. Åtminstone kommer det inte att lämna inaktuella temporära filer nedskräpande i ditt filsystem.

Du kan se storleken på olänkade filer med lsof -s . Jag överlåter åt dig att leta upp exempel på hur du använder det kommandot (Google är din vän här).

Det är mycket möjligt att en tillfällig fil använder dina 167 GB ledigt utrymme.

Eller så kan det vara så att den temporära filen bara använder 8GB, men du kan ha 20 trådar som gör samma fråga samtidigt. Jag har sett det hända en gång.

Men det är förmodligen mer troligt att du har värdet tmp_table_size som begränsar storleken på temptabellen.

Om du når gränsen kan du höja det konfigurationsalternativet, antingen som en sessionsvariabel när du behöver den, eller globalt i my.cnf .

Men jag skulle först försöka optimera frågan. Varför behöver det skapa så stora tempbord? Kan den optimeras för att undersöka färre rader, eller kanske undvika att skapa en tillfällig tabell helt och hållet?



  1. Hur man installerar SQL Server på en M1 Mac (ARM64)

  2. PostgreSQL:Query Parallelism in Action

  3. Mycket långsamma (1 sekund) anslutningar

  4. Hur visar man värdet på en variabel på kommandoraden i MySQL?