> ÜÔÏ ÂÙÌÏ ÐÏÎÑÔÎÏ, ÎÏ ÞÅÇÏ ÔÙ ÜÔÉÍ ÈÏÞÅÛØ ÄÏÂÉÔÓÑ? × ÏÂÝÅÍ ÓÌÕÞÁÅ

ÄÏÂÉÔÓÑ ÈÏÞÕ ÏÄÎÏÇÏ - ÐÏÎÑÔØ ËÁË ÒÁÂÏÔÁÅÔ update (ÐÏËÁ ÔÏËÏ update) × FB.
ÎÕ É ÚÁÏÄÎÏ, ÞÔÏ ÒÁÚÒÁÂÏÔÞÉËÉ ÄÕÍÁÀÔ ÐÏ ÜÔÏÍÕ ÐÏ×ÏÄÕ (× ÓÍÙÓÌÅ ÞÔÏ ÓÞÉÔÁÅÔÓÑ 
ÎÏÒÍÁÌØÎÁÍ ÐÏ×ÅÄÅÎÉÅÍ, Á ÞÔÏ "ÎÕ ËÏÇÄÁ-ÎÉÂÕÄØ ÓÄÅÌÁÅÍ ÐÒÁ×ÉÌØÎÅÅ")

> ÐÒÏÂÌÅÍÕ deadlock ÔÙ ÎÅ ÒÅÛÉÌ, ÐÏÓËÏÌØËÕ × ÏÄÎÏÊ ÔÒÁÎÚÁËÃÉÉ ÍÏÖÎÏ 
> ÉÓÐÏÌØÚÏ×ÁÔØ ÎÅÓËÏÌØËÏ update. ÎÕ ÄÁ, × Ô×ÏÅÍ ËÏÎËÒÅÔÎÏÍ ÓÌÕÞÁÅÅ ÜÔÏ ÂÙ 
> ÒÅÛÉÌÏ Ô×ÏÀ ÐÒÏÂÌÅÍÕ _ÅÓÌÉ_ ÓÒÁÚÕ ÐÏÓÌÅ update ÓÄÅÌÁÔØ commit. ÅÓÌÉ ÜÔÏÇÏ 
> ÎÅ ÓÄÅÌÁÔØ, ÔÏ ÎÁ deadlock ÔÙ ÎÁÒ×ÅÛÓÑ × ËÁËÏÍ-ÔÏ ÄÒÕÇÏÍ update.

× ÄÒÕÇÏÍ ÍÅÓÔÅ ÍÁÌÏ ×ÅÒÏÑÔÎÏ ÅÓÌÉ ×ÅÒÉÔØ ×ÏÔ ÜÔÏÍÕ ÄÏËÕÍÅÎÔÕ 
http://www.ibase.ru/devinfo/norecver.htm (ËÓÔÁÔÉ Á ÅÍÕ ÍÏÖÎÏ ×ÅÒÉÔØ, 
ÉÎÆÏÒÍÁÃÉÑ ÐÏ ÐÒÅÖÎÅÍÕ ÁËÔÕÌØÎÁ Ó ÐÏÑ×ÌÅÎÉÅÍ ÎÏ×ÙÈ ×ÅÒÓÉÊ?)

> ÔÁË ÞÔÏ ÅÄÉÎÓÔ×ÅÎÎÏÅ, ÞÔÏ ÔÅÂÅ ÐÏÍÏÖÅÔ - ÚÁÂÌÏËÉÒÏ×ÁÔØ ÚÁÐÉÓÉ _× ÎÁÞÁÌÅ_ 
> ÔÒÁÎÚÁËÃÉÉ (ÜÔÏ ÄÏÌÖÅÎ ÂÙÔØ ÄÅÊÓÔ×ÉÔÅÌØÎÏ ÓÁÍÙÊ ÐÅÒ×ÙÊ ÏÐÅÒÁÔÏÒ × 
> ÔÒÁÎÚÁËÃÉÉ), Á ÕÖÅ ÐÏÔÏÍ ÄÅÌÁÔØ update. ÜÔÏ ÔÁË ÎÁÚÙ×ÁÅÍÙÊ two-phase 
> locking.

ÜÔÏ ÐÏÎÑÔÎÏ

> ÅÓÌÉ ÔÙ ÎÅ × ËÕÒÓÅ, ÔÏ Õ ÎÁÓ update some_table set pk = pk + 1 ÐÒÉ×ÅÄÅÔ Ë 
> ÎÁÒÕÛÅÎÉÀ ÕÎÉËÁÌØÎÏÓÔÉ ËÌÀÞÁ (Á × ÄÒÕÇÉÈ ÓÅÒ×ÅÒÁÈ - ÎÅÔ), Á ÜÔÏ ÂÏÌÅÅ 
> ÓÅÒØÅÚÎÁÑ ÐÒÏÂÌÅÍÁ ÞÅÍ Ô×ÏÑ, ÎÏ ÅÅ ÅÝÅ ÎÅ ÒÅÛÉÌÉ, ÐÏÓËÏÌØËÕ ÎÅ ×ÓÅ ÔÁË 
> ÔÒÉ×ÉÁÌØÎÏ.

ÄÁ Õ ÍÅÎÑ × ÏÂÝÅÍ-ÔÏ ÐÏËÁ ÐÒÏÂÌÅÍÙ ÎÅÔÕ, Ñ ÅÝÅ ÎÁ ÔÏÊ ÓÔÁÄÉÉ ËÏÇÄÁ ÍÏÇÕ 
×ÙÂÉÒÁÔØ ËÁËÏÊ ÆÕÎËÃÉÏÎÁÌ ÄÏÌÖÅÎ ÂÙÔØ × ËÏÎÅÞÎÏÊ ÓÉÓÔÅÍÅ. ÔÁË ÞÔÏ ÍÏÇÕ 
ÐÒÏÓÔÏ ÎÉËÏÍÕ ÎÅ ÇÏ×ÏÒÉÔØ ÞÔÏ ÞÔÏ ÔÏ ÈÏÔÅÌ ÓÄÅÌÁÔØ :). ÚÄÅÓØ ÚÁÄÁÞÁ ÉÍÅÎÎÏ 
ÐÏÎÑÔØ ÞÔÏ É ËÁËÉÍÉ ÓÐÏÓÏÂÁÍÉ ÍÏÖÎÏ ÒÅÁÌÉÚÏ×ÁÔØ É ËÁËÉÅ ÚÁÔÒÁÔÙ ÒÅÓÕÒÓÏ× 
(×ÒÅÍÅÎÉ) ÜÔÏ ÐÏÔÒÅÂÕÅÔ.

>
> ÔÁË ÞÔÏ ÏÔ×ÅÔ ÎÁ Ô×ÏÊ ×ÏÐÒÏÓ: "ÄÁ, ÂÙÌÏ ÂÙ ÌÏÇÉÞÎÅÅ, ÎÏ ÎÅÔ, ÐÏËÁ ×ÓÅ 
> ÏÓÔÁÅÔÓÑ ÔÁË ËÁË ÂÙÌÏ ÄÁ É ÐÒÏÂÌÅÍÕ Ô×ÏÀ ÒÅÛÁÔØ ÎÁÄÏ ÐÏ ÄÒÕÇÏÍÕ".
>

ÏËÉ 



Ответить