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

MySQL/InnoDB и продължителни заявки

Първо, мисля, че би било полезно като фон да прочетете контрол на едновременното използване на много версии (MVCC) като фон на този отговор.

InnoDB внедрява MVCC, което означава, че може да използва незаключващи четения за обикновени SELECT . Това не изисква създаване на "моментна снимка" и всъщност InnoDB няма реална концепция за моментна снимка като обект. Вместо това всеки запис в базата данни следи своя собствен номер на версията и поддържа "указател за преобръщане" към запис "отмяна на дневника" (който може да съществува или да не съществува), който променя реда към предишната му версия. Ако е необходима по-стара версия на запис, текущата версия се чете и тези указатели се следват и се прилагат записи за отмяна, докато се създаде достатъчно стара версия на записа.

Обикновено системата постоянно почиства тези регистрационни файлове за отмяна и използва повторно пространството, което консумират.

По всяко време всяка дългосрочна транзакция (забележете, че не е непременно една заявка), регистрационните файлове за отмяна трябва да се съхраняват (не се почистват), за да се пресъздадат достатъчно стари версии на всички записи, за да се удовлетвори тази транзакция. В много натоварена система тези регистрационни файлове за отмяна могат много бързо да се натрупват, за да консумират гигабайти пространство. Освен това, ако конкретни отделни записи се променят много често, връщането на този запис към достатъчно стара версия, за да удовлетвори заявката, може да отнеме много приложения за отмяна на регистрационните файлове (хиляди).

Това прави „дълготрайните заявки“ скъпи и ненавиждани. Те ще увеличат потреблението на дисково пространство за запазване на регистрационните файлове за отмяна в системното пространство за таблици и ще се представят лошо поради приложението за запис на регистрационни файлове за отмяна за връщане на версиите на ред при четене.

Някои бази данни внедряват максимално количество пространство в регистрационния файл за отмяна, което може да се консумира, и след като достигнат това ограничение, започват да изхвърлят по-старите записи в дневника за отмяна и да обезсилват изпълняваните транзакции. Това генерира съобщение за грешка „моментна снимка твърде стара“ до потребителя. InnoDB няма такова ограничение и позволява натрупване за неопределено време.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да използвате ролите, които са се променили в MySQL 8.0

  2. Как да съхранявам евро символ в базата данни на mysql?

  3. Модел за глобални настройки на Laravel

  4. Урок за MySQL – Управление на регистрационни файлове на MySQL сървър:завъртане, компресиране, запазване и изтриване

  5. Как да нулирате паролата на MySQL root