/ / Mysql je sania pre veľké dáta [closed] - mysql, databáza, heidisql

Mysql sála pre veľké údaje [closed] - mysql, databáza, heidisql

Mám databázu mysql s približne 30gb dátami. Niektoré tabuľky obsahujú viac ako 40 miliónov riadkov. Pomocou innoDB. I dotaz iba pomocou "vyberte počet (*) z table_name" v miestnom PC mi trvá asi 5 minút. Myslím, že je to pre mňa nemožné, aby som sa pripojil k stolu. Chcel by som sa opýtať, či by som mohol niečo urobiť, aby som zlepšil výkon. Alebo musím prejsť na inú databázu. Pomoc.

odpovede:

4 pre odpoveď č. 1

Spustil som inštancie mysql s viac ako 100 miliónmi záznamov a poskytol viac ako 30 miliónov dopytov denne. Možno to urobiť.

Problémy, ktoré sa vyskytnú, sa vyskytnú s iným databázovým systémom, ak je nakonfigurovaný podobne.

Môžem vám dať len niekoľko tipov, ak je to kritické, zvážte prenájom profesionála, ktorý vám umožní vylepšiť váš systém.

Základy, na ktoré sa musíte pozerať;

  • Táto databáza veľkostí sa najlepšie prevádzkuje na vyhradenom serveri s diskami SSD a najmenej 2 jadrami;
  • Budete potrebovať veľa pamäte RAM na vašom serveri, aspoň vašu celkovú veľkosť databázy + 20% pre iné systémové zdroje;
  • Uistite sa, že mysql bol nakonfigurovaný s dostatočnou pamäťou, 80% celkovej pamäte RAM. Primárne nastavenie, ktoré to urobí, bude innodb_buffer_pool_size;
  • Optimalizujte svoje dotazy a indexujte ich tam, kde je to potrebné - jedná sa o výtvarné umenie, ale môže výrazne zlepšiť výkon, naučiť sa používať EXPLAIN ... na vaše dotazy.

0 pre odpoveď č. 2

MySQL InnoDB tabuľky neuchovávajú počet riadkov, teda SELECT COUNT(*) môže byť pomalá. Nie je to údaj o tom, ako by mohli ostatné dotazy fungovať, ale je to údaj o tom, ako pomalá môže byť úplná kontrola tabuľky. Päť minút je naozaj zlé len pre 40 miliónov riadkov a môže znamenať vážny problém s databázou alebo diskom.

Tu je blog o tejto téme, tiež pozri túto súvisiacu odpoveď.


0 pre odpoveď č. 3

Predtým som sa stretol s veľkým problémom veľkosti dátumu a dúfam, že moja skúsenosť je pre vás užitočná.

Po prvé, vaša potreba vytvoriť index pre vašu tabuľku, ale aký druh indexu by sa mal použiť v závislosti od logiky vášho dotazu.

po indexovaní, ak je dotaz stále pomalý, "dlepšie rozdeliť údaje do hierarchie, napríklad zdrojové tabuľky, stredné tabuľky a tabuľky správ. tabuľka reportov len ukladá nejaké konečné dáta a dotaz bude rýchly, tiež pre neho vytvorí index.

po tretie, skúste použiť niečo ako memsql ak vyššie uvedené nemôže splniť vaše požiadavky.

okrem toho sa naučte nejaký príkaz ako:

set profiling = 1
do some slow query
show profiles;
SHOW PROFILE FOR QUERY N;