ПредишенСледващото

В PostgreSQL, така наречената MVCC (многоверсионен Concurrency Control), която гарантира, че всяка сделка вижда гласове на данни, както и данни прочетете сделки никога не блокират запис на данни сделка. и писане никога блокове четене.

За тази цел, при изпълнение на SQL-команди UPDATE и DELETE действителната заличаване и промяна на реда никога не се случва веднага. В действителност, когато актуализация се създава всеки път, когато има нова версия на линията, но старият продължава да съществува. И когато се изтрие договорена само версия е маркиран като изтрит дадена сделка, но не и в действителност изтрит.

В крайна сметка, тя не остане една жива сделки, които могат да видят съдържанието на низа. В този случай е възможно да се премахне низа, а местоположението му маркиран като на разположение за ползване, когато поставяте редове. Това е, което се занимава с вакуум.

ВАКУУМ отбор има две възможности: нормална и пълна.

Нормална версия само маркира линията за бъдеща употреба, но не се връща заетото пространство на операционната система, освен в изключителни случаи, когато една или няколко страници в края на пространството за таблици са напълно безплатни:

ВАКУУМ се използва по-често. и вакуумни Пълното се извиква след всяка процедура, която активно актуализира данните. В PostgreSQL е стандартна услуга, която периодично започва точно операция вакуум. когато това стане необходимо.

MVCC разчита на възможността за сравняване на ID (XID) версии на сделката, която е низ вмъква с XID сегашната сделка. Ред, който XID на сделката, която го постави по-XID сегашната сделка е била поставена в бъдеще, и поради това не трябва да се вижда от сегашната сделка. Идентификационен номер на транзакцията се използва за 32 бита, така че при извършване на достатъчно голям брой сделки (над четири милиарда) се срещат така наречената ID сделка обгръщаща. тоест, ID сделка отново става 0, и изведнъж се сделки, които са били в миналото, ще бъде и в бъдеще, което ще доведе до факта, че техните промени ще станат видими.

За да се избегне операция ID обгръщащ, че е необходимо да се извърши ВАКУУМ всяка база данни най-малко веднъж на всеки 2 милиарда транзакции.

Как тогава, ВАКУУМ екип решава проблема? В PostgreSQL, специална XID FrozenXID сделка. Това XID не следва на обичайните правила на сравнение име и винаги се счита по-стар от всеки нормален XID. Конвенционални XID не сравнение като прости числа, и като цикличен. За всеки XID има два милиарда XID-ите, които са на възраст над два милиарда и XID-S, който е нова, е пространствено-XID е затворен в пръстена. След създаването на една линия с обикновен XID низ се превръща в "последната" за два милиарда последващи сделки, независимо от броя им в XID. Ако тази линия все още съществува след два милиарда транзакции, то се случва да бъде и в бъдеще. За да се предотврати това, старите версии на редове в XID е необходимо да се регистрирате FrozenXID преди да стигнем крайъгълен камък на 2 милиарда транзакции. След възлагане на тази специална XID, те ще бъдат "в миналото" на всички нормални сделки, и поради това те ще бъдат в сила до отстраняване, без значение колко време ще се случи. Определяне FrozenXID изпълнява ВАКУУМ команда. Ето защо е толкова важно, че тя се извършва периодично.

Още записи от този раздел:

Свързани статии

Подкрепете проекта - споделете линка, благодаря!