Ma znaczenie tylko pamięć RAM?


4

Muszę pracować nad projektem, który miałby dodatkowy duży stół z miliardami rekordów, ale tylko dwa pola to id, a drugi to tekst.

I id zostanie ustawione na BIGINT i PK, a jeśli 8 + 2 (dodatkowe 2 bajty na nadmiar) bajtów na wiersz zostanie przejęte do indeksu, to w moich obliczeniach 64 GB pamięci RAM powinno wystarczyć na co najmniej 5 miliardów indeksów rekordów.

Ale to tylko jeden czynnik, który rozważam.

Czy uważasz, że są też inne czynniki, które powinienem rozważyć?

W razie potrzeby można również zwiększyć rozmiar pamięci RAM. Tabela ta byłaby najbardziej ruchliwym stołem z kilkoma zapisami i wieloma odczytami.

+1

Czy mogę prosić o trochę więcej informacji o tym projekcie?Do czego służy ta tabela?Jaki problem próbujesz rozwiązać? 15 wrz. 112011-09-15 07:14:14

3

Musisz wziąć pod uwagę silnik pamięci masowej, którego będziesz używać dla swojego projektu, ponieważ MySQL buforuje inaczej dla każdego silnika pamięci masowej.

MyISAM buforuje tylko strony indeksowe.InnoDB buforuje dane i strony indeksu.

Biorąc pod uwagę, że masz tabelę z dużymi identyfikatorami, mam nadzieję, że używasz MyISAM.

Oto zapytanie, które pomoże Ci określić najlepszy rozmiar key_buffer_size:

SELECT CONCAT(ROUND(KBS/POWER(1024,
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.4999),
SUBSTR(' KMG',IF(PowerOf1024<0,0,
IF(PowerOf1024>3,0,PowerOf1024))+1,1))
recommended_key_buffer_size FROM
(SELECT LEAST(POWER(2,32),KBS1) KBS
FROM (SELECT SUM(index_length) KBS1
FROM information_schema.tables
WHERE engine='MyISAM' AND
table_schema NOT IN ('information_schema','mysql')) AA ) A,
(SELECT 2 PowerOf1024) B;

Spowoduje to ustawienie zalecanego ustawienia pamięci podręcznej klucza MyISAM (key_buffer_size) przy aktualnym zestawie danych (the query will cap the recommendation at 4G (4096M). W przypadku 32-bitowego systemu operacyjnego limit to 4 GB. Dla 64-bitowych, 8 GB.

AKTUALIZACJA 2011-09-16 14:49 EDT

Jeśli używasz InnoDB, zmiana rozmiaru key_buffer_size nie pomoże.InnoDB and MyISAM cache differently .

Oto taki sam rodzaj zapytania, aby zmierzyć pulę buforów InnoDB:

SELECT CONCAT(ROUND(KBS/POWER(1024,
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.49999),
SUBSTR(' KMG',IF(PowerOf1024<0,0,
IF(PowerOf1024>3,0,PowerOf1024))+1,1)) recommended_innodb_buffer_pool_size
FROM (SELECT SUM(data_length+index_length) KBS FROM information_schema.tables
WHERE engine='InnoDB') A,
(SELECT 2 PowerOf1024) B;
  0

Co ciekawe myślę o użyciu InnoDB, ponieważ działa lepiej pod obciążeniem.Tak więc dowiedziałem się z twojej odpowiedzi, że dopóki jest wystarczająco dużo pamięci podręcznej kluczy.Rozmiar bazy danych nie ma znaczenia? 16 wrz. 112011-09-16 16:56:43

  0

Zaktualizowałem swoją odpowiedź na adres za pomocą InnoDB 16 wrz. 112011-09-16 18:49:40

  0

Ale jak wspomniałeś, że maksymalny limit wynosi 8 GB dla MyISAM, oznacza to, że zasoby RAM nie będą efektywnie wykorzystywane?{Przepraszam, że zadałem to pytanie za późno ..} 01 paź. 112011-10-01 22:14:09

+1

@Gary: Masz rację.Pamięć przydzielona powyżej 8 GB dla key_buffer_size jest marnowana.Jest to bardzo ważne, ponieważ tylko MySAM są przechowywane w pamięci podręcznej.Możesz utworzyć pamięci podręczne kluczy dedykowane określonym tabelom MyISAM: http://dev.mysql.com/doc/refman/5.5/en/cache-index.html 01 paź. 112011-10-01 22:41:42