Database
 sql >> база данни >  >> RDS >> Database

Промяна на голяма маса в RDS Решение за пълна грешка на таблицата

Промяна на голяма маса в RDS Решение за пълна грешка на таблицата. Да вземем пример, Таблици, които са много големи по размер (~> 100GB до 600GB). Правенето на промени на такива големи таблици е задача с ВИСОКА памет и процесор. Когато се опитате да промените заявка на една от таблиците, тя даде „ГРЕШКА 1114 (HY000):таблица пълна ” грешка...

Защо възникна този проблем, въпреки че обемът за съхранение на Amazon Aurora автоматично ще нарасне до 64TB.?

Първо, ще разберем съхранението в RDS Aurora. Има 2 вида съхранение в Aurora. Съхранение на екземпляри е локално хранилище, където се съхраняват временни обекти и основното хранилище за данни. Следователно, когато стартирате ALTER на таблица, той ще генерира временна таблица и RDS aurora ще използва хранилище на екземпляри за съхраняване на временната таблица. За вашия екземпляр, който е db.r3.large екземпляр, той има 1×32 GB  локално хранилище, така че ако вашите временни обекти в екземпляра станат по-големи от този размер, получавате грешка „пълна таблица“. Освен това ограничението за локално хранилище е различно от общия обем на съхранение наличен за вашия екземпляр на Aurora и въз основа на използването на вашата база данни обемът ви за съхранение на Amazon Aurora автоматично ще нараства до 64 TB на стъпки от 10 GB.

Промяна на голяма маса в RDS  решение на пълната таблица Грешка

  1. За да преодолеете проблема, можете да увеличите екземпляра, за да получите повече локално хранилище, за да стартирате вашия ALTER, да промените таблицата и след това да намалите типа на екземпляра. Това води до известно време на престой при надграждане/понижаване на типа на екземпляра.
  2. Можете също да използвате:командата “pt-online-schema-change”, ако използвате тази команда, тя прави оригиналната таблица все още достъпна за използване без прекъсване или без заключване на масата.
Ако не можете да си позволите да имате прекъсване в системата, използвайте командата pt-online-schema-change вместо да мащабирате екземпляра. Въпреки това, документацията за pt-online-schema-change  казва, че трябва да направим резервно копие, преди да изпълним тази команда. Следователно, за да избегнете всякакви заключвания и откази на таблицата по време на промяна на производствената таблица, можете да тествате тази команда върху точно копие на базата данни на приложението със същия тип RDS екземпляр. Също така, опитайте се да добавите тежък товар при запис в таблицата, за да имитирате трафика . За да постигнете това, създайте bash скрипт, който непрекъснато вмъква нов ред в таблицата. За да имате бързо точно копие на текущата си DB, направете моментна снимка на RDS DB и я възстановете от моментна снимка за тестване.  Преди да изпълним тази команда, трябва да зададем log_bin_trust_function_creators на 1 в групата параметри на RDS DB. След като приключите с процеса ALTER, можете отново да промените променливата на „0“.
Резултати:
Ако променяте таблицата с pt -online-schema-change  команда на  таблица с размер 35-40GB, тогава може да отнеме около 30 часа.

Защо да използвате команда pt-online-schema-change и защо да активирате  “log_bin_trust_function_creators “  в групата параметри на DB? ?

pt-online-schema-change  не заключва масата. Тази команда създава тригери в оригиналната таблица. Но за това се нуждае от привилегии на суперпотребител. когато използвате процедура за съхранение, ще получите грешката:
#1419 – Нямате привилегията SUPER и двоичното регистриране е активирано (може би *може да искате да използвате по-малко безопасната променлива log_bin_trust_function_creators
Причина:  Тази грешка възниква в RDS екземпляри, когато се опитате да използвате „Съхранени процедури“. Скоро ще разберете, че предоставянето на супер привилегия за потребител няма да работи. Така че единственият начин да накарате нещата да работят е да зададете log_bin_trust_function_creators на 1.   Съгласно документите на Percona: В крайна сметка създаването на тригери на сървър с активирани двоични регистрационни файлове изисква потребител със СУПЕР привилегии (което е невъзможно в Amazon RDS). Съобщението за грешка указва заобикалянето. Трябва да активираме променливата в групата параметри на DB „log_bin_trust_function_creators“. Активирането му е като да кажете на сървъра: „Доверявам се на тригерите и функциите на обикновените потребители и че те няма да създават проблеми, така че позволете на потребителите ми да ги създават.“ Тъй като функционалността на базата данни няма да се промени, става въпрос за доверие на вашите потребители. log_bin_trust_function_creators е глобална променлива, която може да се променя динамично. Опитвам се да намеря повече подробности за „Super_priv“, Когато проверите разрешенията на потребителите в потребителската таблица на MySQL базата данни. можете да видите, че Super_priv не е зададен за никого освен за потребителя rdsadmin.
MySQL> select User,Super_priv from user;
+-----------+------------+
| User | Super_priv |
+-----------+------------+
| rdsadmin | Y |
| root | N |
| dbuser | N |
+-----------+------------+
3 rows in set (0.00 sec)

Тук „root“ е главният потребител, а „dbuser“ е потребителят на DB, тези потребители са създадени от нас, а потребителят „rdsadmin“ се създава автоматично от AWS, до който ние нямаме достъп до този потребител. rdsadmin MySQL потребителят се използва от Amazon за работа по поддръжка и управление.

Това е краят на урока как да промените голяма маса в RDS Solution към пълна грешка на масата.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Информационни системи, данни и информация

  2. Каква е употребата на SQL GROUP BY изявление?

  3. Модел на база данни за онлайн проучване. част 3

  4. Още онлайн операции са налични сега или скоро

  5. Модел на данни за животозастраховане