sql >> Databáze >  >> RDS >> Database

Změnit na velkém stole v řešení RDS na plný stůl Chyba

Změnit na velkém stole v RDS Řešení plné tabulky Chyba. Vezměme si příklad, tabulky, které mají velmi velkou velikost (~> 100 GB až 600 GB). Provádění změn na tak velkých stolech je VYSOKÁ úloha náročná na paměť a CPU. Když se pokusíte změnit dotaz na jedné z tabulek, zobrazí se „CHYBA 1114 (HY000):tabulka je plná ” chyba...

Proč k tomuto problému došlo, i když objem úložiště Amazon Aurora automaticky naroste až na 64 TB.?

Nejprve budeme rozumět ukládání v RDS Aurora. V Auroře jsou 2 typy úložiště. Instantní obchod je místní úložiště, kde jsou uloženy dočasné objekty, a hlavní úložiště pro data. Proto, když spustíte ALTER na tabulce, vygeneruje dočasnou tabulku a RDS aurora použije úložiště instance k uložení dočasné tabulky. Pro vaši instanci, kterou je instance db.r3.large, má 1×32 GB  místního úložiště, takže pokud budou vaše dočasné objekty v instanci větší než tato velikost, zobrazí se chyba „Tabulka je plná“. Limit místního úložiště se také liší od celkového objemu úložiště dostupné pro vaši instanci Aurora a na základě využití vaší databáze se objem vašeho úložiště Amazon Aurora automaticky zvětší až na 64 TB v krocích po 10 GB.

Upravit na velkém stole v RDS  řešení k plnému stolu Chyba

  1. Chcete-li tento problém vyřešit, můžete škálovat instanci, abyste získali více místního úložiště pro spuštění ALTER, změnit tabulku a poté zmenšit typ instance. To má za následek určité prostoje při upgradu/downgradu typu instance.
  2. Můžete také použít:příkaz „pt-online-schema-change“, pokud použijete tento příkaz, bude původní tabulka stále dostupná pro použití bez prostojů nebo žádný zámek stolu.
Pokud si nemůžete dovolit žádné výpadky systému, použijte namísto škálování instance příkaz pt-online-schema-change . Nicméně dokumentaci pt-online-schema-change  říká, že před spuštěním tohoto příkazu bychom měli udělat zálohu. Abyste se vyhnuli jakémukoli uzamčení tabulky a selhání během změny produkční tabulky, můžete tento příkaz otestovat na přesné kopii aplikační databáze se stejným typem instance RDS. Zkuste také přidat na stůl velkou zátěž pro zápis, abyste napodobili provoz . Chcete-li toho dosáhnout, vytvořte bash skript, který průběžně vkládá nový řádek do tabulky. Chcete-li získat rychlou přesnou kopii vaší aktuální DB, udělejte snímek RDS DB a obnovte jej ze snímku pro testování.  Před spuštěním tohoto příkazu musíme nastavit log_bin_trust_function_creators na 1 ve skupině parametrů RDS DB. Po dokončení procesu ALTER můžete změnit proměnnou znovu na „0“.
Výsledky:
Pokud upravujete tabulku pomocí pt -online-schema-change  příkaz na  tabulka o velikosti 35-40 GB pak může trvat přibližně 30 hodin.

Proč používat příkaz pt-online-schema-change a proč jej povolit  „log_bin_trust_function_creators“  ve skupině parametrů DB? ?

pt-online-schema-change  nezamyká stůl. Tento příkaz vytvoří spouštěče na původní tabulce. K tomu však potřebuje oprávnění superuživatele. při použití procedury store se zobrazí chyba:
#1419 – Nemáte oprávnění SUPER a je povoleno binární protokolování (možná* budete chtít použít méně bezpečnou proměnnou log_bin_trust_function_creators
Důvod:  K této chybě dochází v instancích RDS, když se pokusíte použít „Uložené procedury“. Brzy zjistíte, že udělení super oprávnění pro uživatele nebude fungovat. Takže jediný způsob, jak zajistit, aby věci fungovaly, je nastavit log_bin_trust_function_creators na 1.   Podle dokumentů Percona: Sečteno a podtrženo, vytváření spouštěčů na serveru s povolenými binárními protokoly vyžaduje uživatele s oprávněními SUPER (což v Amazon RDS není možné). Chybová zpráva určuje řešení. Musíme povolit proměnnou ve skupině parametrů DB „ log_bin_trust_function_creators“. Povolení je jako říci serveru: „Věřím spouštěčům a funkcím běžných uživatelů a že nezpůsobí problémy, takže dovolte mým uživatelům, aby je vytvořili.“ Vzhledem k tomu, že funkce databáze se nezmění, je třeba důvěřovat svým uživatelům. log_bin_trust_function_creators je globální proměnná, kterou lze dynamicky měnit. Pokuste se najít další podrobnosti o „Super_priv“, když zkontrolujete oprávnění uživatelů v uživatelské tabulce databáze MySQL. mohli jste vidět, že Super_priv není nastaven pro nikoho kromě uživatele rdsadmin.
MySQL> select User,Super_priv from user;
+-----------+------------+
| User | Super_priv |
+-----------+------------+
| rdsadmin | Y |
| root | N |
| dbuser | N |
+-----------+------------+
3 rows in set (0.00 sec)

Zde „root“ je hlavní uživatel a „dbuser“ je uživatel DB, tito uživatelé jsou vytvořeni námi a uživatel „rdsadmin“ je automaticky vytvořen AWS, ke kterému nemáme přístup k tomuto uživateli. rdsadmin MySQL uživatele používá Amazon pro údržbu a správu.

Toto je konec tutoriálu, jak změnit na velkém stole v řešení RDS tak, aby došlo k úplné chybě tabulky.


  1. Proč žádný výstup, když se dokončí anonymní blok PLSQL?

  2. Slovník databáze DevOps pro začátečníky v MySQL

  3. Zabraňuje SELECT FOR UPDATE vkládání dalších připojení, když řádek není přítomen?

  4. Cílový čas obnovení Pgbackrest