( ricpet | 2014. 10. 01., sze – 16:19 )

Tegyük fel, hogy nem trollkodás volt a kérdés, hanem komoly. Olyan naiv alapja lehetne a gondolatnak, hogyha egyszer beolvasta a file-t (és kiírta akárhová, mondjuk /dev/null -ba), akkor annak tartalma bekerül az oprendszer file cache-ébe. Azt gondolhatnánk, hogy onnantól gyorsabbal lesznek a query-k, hiszen már az egész adatbázis file RAM-ban van, nem kell I/O műveletet végezni.

De ez a legtöbb relációsadatbázis-kezelő esetén nem igaz, ugyanis szándékosan olyan az architektúrájuk, hogy saját maguk csinálják ezt a cache-elést. Fenntartanak egy memóriaterületet, ahová ők maguk az oprendszertől függetlenül explicit cache-elik a file tartalmát, tipikusan adatbázis laponként. Az adatbázis file-t pedig direkt olyan rendszerhívással nyitják meg, hogy az oprendszer ne cache-elje az olvasásokat és írásokat. Ha az adatbázis mérete kisebb, mint a rendelkezésre álló RAM, akkor lényegében az egész adatbázis előbb-utóbb úgyis a RAM-ban lesz. Ha pedig nagyobb az adatbázis (tipikusan ez szokott lenni), akkor valószínűleg az adatbázis-kezelő egy jobb cache-elést tud elérni, mint az oprendszer file cache-e.

Lásd még:
http://dev.mysql.com/doc/refman/5.5/en/innodb-buffer-pool.html
http://docs.oracle.com/cd/B19306_01/server.102/b14220/memory.htm
http://msdn.microsoft.com/en-us/library/ms178067.aspx