2011-02-04 7 views
9

Do celów prowadzenia dużej ilości testów, które współdziałają z bazy danych, chcę zrobić dwie rzeczy:Wymusza całą bazę danych MySQL się w pamięci

  1. chciałbym skopiować schemat baza danych bez kopiowania jej danych. Mogę to zrobić za pomocą skryptu, który pobiera instrukcje CREATE TABLE z każdej tabeli w bazie danych.

  2. Po utworzeniu tej bazy danych chciałbym wymusić jej 100% w pamięci.

Utknąłem, jak wykonać część 2 - Czy jest łatwiejszy sposób na zrobienie tego innego niż określenie silnika każdej tabeli? Jakoś to wygląda na kiepski sposób robienia tego.

Odpowiedz

11

Utwórz bazę danych w /dev/shm (ubuntu | debian) i będzie w pamięci RAM. Może wzrosnąć do 0,5 dostępnej pamięci.

+0

To brzmi dobrze, ale czy istnieje podobne rozwiązanie dla CentOS? – Fragsworth

+0

Sprawdź, czy masz: $ mount | grep shm. W przeciwnym razie możesz utworzyć system plików na jednym z/dev/ram * i zamontować go gdzieś. –

+0

Centos 5.0+ zawsze ma zamontowane/dev/shm. Możesz jednak zamontować tmpfs w dowolnym miejscu. tmpfs jest dostępny od jakiegoś czasu. – MarkR

1
SET storage_engine=MEMORY; 

To ustawi domyślny silnik zapisu dla bieżącej sesji.

+0

Istnieje limit jak duży stół pamięć może być. wątpliwe (ale możliwe), że wszystkie tabele w bazie danych będą mogły być tablicami MEMORY. –

+2

Tabele pamięci nadal zawierają metadane na dysku i nie zachowują się tak samo jak inne silniki. – MarkR

+0

Dalsze rozszerzenie komentarza @MarkR: 'MyISAM' i' Innodb' są już bardzo różne i mogą prowadzić do różnych zachowań, prowadząc do błędów, które występują tylko w jednym silniku. Dlatego nie zalecamy zmiany silnika bazy danych na 'PAMIĘĆ ', ponieważ bardzo prawdopodobne jest wprowadzenie błędów specyficznych dla silnika. –

2

Jako dtmilano powiedział, można umieścić go na systemie plików zamontowanym tmpfs. Nie musi to być/dev/shm, ale jest to miejsce, w którym tmpfs jest zwykle montowany.

Można utworzyć nowy wszędzie, choć:

mount none -t tmpfs /path/to/dir 

Jeśli wypełnia wszystkie swoje dostępnej pamięci RAM, użyje zamianę jako zapasową.

Umieść go w/etc/fstab, aby ponownie zamontować przy starcie. Pamiętaj tylko, że jest to RAM RAM, więc zaczyna się pusty przy każdym ponownym uruchomieniu. Zobacz: http://www.howtoforge.com/storing-files-directories-in-memory-with-tmpfs

Alternatywnie, jak sugeruje yuxhuang można utworzyć tabelę typu MEMORY. Opróżnia się również po ponownym uruchomieniu, chociaż definicja tabeli pozostaje. Typ tabeli MEMORY ma jednak kilka ograniczeń. Używa na przykład wierszy o stałych rozmiarach, więc kolumny text i blob nie są dozwolone, a varchar nie ma zmiennej długości. Zobacz: http://dev.mysql.com/doc/refman/5.0/en/memory-storage-engine.html

0

Jeśli używasz systemu Windows, w skrypcie tworzenia bazy danych można tworzyć tabele dodanie parametru MEMORY tak:

CREATE TABLE IF NOT EXISTS `user` (
    `id` varchar(23) NOT NULL, 
    `username` varchar(250) NOT NULL, 
    ... 
) ENGINE=MEMORY DEFAULT CHARSET=utf8; 
Powiązane problemy