![]() |
Köra MySQL på ramdisk?
Tja!
Har suttit och funderat lite på framtida serverköp och konfiguration. (Sjukt trött just nu så nedanstående kommer nog bli sjukt flummigt) Jag vet, många är kritiska till ramdisk av den enkla anledningen att mycket, om inte det mesta ändå läggs in i ram och operativsystemen + caching sköter det hyffsat bra idag MEN jag har ett lite unikt användningsområde för just databasen som gör att jag lätt kan offra utrymme till en ramdisk. För 99% av alla hemsidor på nätet så blir databasen bara större år efter år så det ställer ju vissa krav på utrymme, skalning, osv, min sida däremot har aldrig mer än 1 månad gammal data i databasen och oftast sparas data i bara några dagar innan den raderas. Dom enda tabellerna som aldrig raderas är användarkonton. Jag tvivlar starkt på att databasen någonsin kommer överstiga 2-3GB Så istället för att köpa en jäkla massa disk för att få någorlunda hög IOPS så borde det ju vara lämpligare att lägga pengarna på minne istället för disk då jag inte på något sätt har behov av utrymme. Så istället för att köpa 6st Seagate Savvio för 2´000kr/st så köper jag 4st Intel 520 60GB för runt 2´000kr (konsument SSD borde kunna fungera i servermiljö då dom ändå kommer ha ytterst lite skrivning) och 4st extra 8GB 1600mhz minnen för 5´000kr, en besparing på 5´000kr men ändå ett sjukt högt prestandalyft jämfört med Savvio setupen. Totalt kommer servern då ha 64GB ram, gör 1 ramdisk på 4GB som databasen körs på, en ramdisk på 1GB för PHP/CSS/JS/Bilder till markupen. (Ja, dom kunde lika gärna ligga kvar på SSD setupen då dom ändå cachas i RAM men filerna invalideras ju med jämna mellanrum och lite andra anledningar, men tråden handlar om databasen så det behöver vi inte gå in på). Så då finns det ändå 59GB ram över till OS:et och cachingen. Vad tror ni om detta? Ja, jag är mycket väl medveten att man ändå cachar databasen i RAM men jag tvivlar ändå på att 100% av databas anropen kommer slå rätt på cachen utan den skulle hämta några av sina queries från disk, och då kan den ju lika gärna hämta från en RAM-disk istället för 6st Savvio diskar i Raid10, man lär få en överlägsen IOPS och söktid på RAM-disken. Det är ingen viktig data som ligger i databasen, det görs en automatisk backup av databasen till SSD raiden varje natt så högst skulle jag förlora 24 timmars data om strömmen skulle gå, vilket jag skulle kunna leva med, inga problem. Denna setupen lär inte ge mig något extra arbete heller, inte överdrivet jobbigt att mounta RAM-disken på nytt om jag skulle behöva starta om servern eller om strömmen går, bara att slänga in backupen på RAM-disken med efter omstart, tar högst 1 minut efter omstart. Tror denna setupen skulle vara ganska smidig ur cache synpunkt också, lär inte behöva någon memcache setup på bra länge då 100% av all databasanrop kommer att landa i RAM, oavsett om en query går på det som är cachat i ram eller om den behöver läsa från databasen på RAM-disken. Setupen är som sagt även billigare än en setup med mekaniska diskar. Så ja, vad tror ni, vilka nackdelar kommer ni på? |
Måste du köra MySQL?
Annars har du ju Redis som vad jag förstår använder RAM för allt vilket gör den extremt snabb. |
Till att börja med kan jag säga att jag inte vet om det är en bra idé, men nedan är mina funderingar.
Känns till en början som att du får lite tårta på tårta. Sätter du buffer pool till en vettig nivå kommer hela din dataset att ligga i buffer pool i minnet, dit den hämtats från en ramdisk. Jag tror du får de allra flesta fördelar, men inte lika mycket osäkerhet, om du bara konfigurerar mysql till att lagra innodb-loggen, temp tables osv till ramdisken samt ändrar innodb-flush-log-at-trx-commit. Du får fortfarande en disk io overhead - men genom tillräcklig log-file-size borde den inte bli någon bottleneck. Memcached eller annan optimerad in memory key value store kommer alltid vara mycket effektivare för key-lookups. Med mysql har du mycket annat overhead pga att det är just en RDBMS (dataintegriteten, authen, optimizern osv). Försöker du ersätta detta med minnesbaserad mysql låter det mer som att du försöker lägga hårdvara på ett problem som borde kosta ett par extra utvecklingstimmar istället. |
Jag försökte att köra MySQL med memory engine men det var sjuk overhead, se här http://dev.mysql.com/doc/refman/5.0/...ge-engine.html
Nu kör jag uteslutande Redis istället istället för mysql + memcached för lagring i ram. |
Citat:
|
Prova nyaste versionen av Revodrive...;)
|
Alla tider är GMT +2. Klockan är nu 22:58. |
Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson