Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
ÏêÊöMySQLÊÂÎñµÄʵÏÖÔ­Àí
 
×÷ÕߣºÊý¾ÝºÍÔÆ
  1727  次浏览      30
2020-7-1 
 
±à¼­ÍƼö:

ÏàÐÅ´ó¼Ò¶¼ÓùýÊÂÎñÒÔ¼°Á˽âËûµÄÌØµã£¬ÈçÔ­×ÓÐÔ(Atomicity),Ò»ÖÂÐÔ(Consistency),¸ôÀëÐÍ(Isolation)ÒÔ¼°³Ö¾ÃÐÔ(Durability)µÈ¡£½ñÌìÏë¸ú´ó¼ÒÒ»ÆðÑо¿ÏÂÊÂÎñÄÚ²¿µ½µ×ÊÇÔõôʵÏֵġ£
±¾ÎÄÀ´×ÔËѺü£¬ÓÉ»ðÁú¹ûÈí¼þAnna±à¼­¡¢ÍƼö¡£

ÔÚ½²½âǰÎÒÏëÏÈÅ׳ö¸öÎÊÌ⣺

ÊÂÎñÏëÒª×öµ½Ê²Ã´Ð§¹û£¿

°´ÎÒÀí½â£¬ÎÞ·ÇÊÇÒª×öµ½¿É¿¿ÐÔÒÔ¼°²¢·¢´¦Àí¡£

¿É¿¿ÐÔ£ºÊý¾Ý¿âÒª±£Ö¤µ±insert»òupdate²Ù×÷ʱÅ×Òì³£»òÕßÊý¾Ý¿âcrashµÄʱºòÐèÒª±£ÕÏÊý¾ÝµÄ²Ù×÷ǰºóµÄÒ»Ö£¬ÏëÒª×öµ½Õâ¸ö£¬ÎÒÐèÒªÖªµÀÎÒÐÞ¸Ä֮ǰºÍÐÞ¸ÄÖ®ºóµÄ״̬£¬ËùÒÔ¾ÍÓÐÁËundo logºÍredo log¡£

²¢·¢´¦Àí£ºÒ²¾ÍÊÇ˵µ±¶à¸ö²¢·¢ÇëÇó¹ýÀ´£¬²¢ÇÒÆäÖÐÓÐÒ»¸öÇëÇóÊǶÔÊý¾ÝÐ޸IJÙ×÷µÄʱºò»áÓÐÓ°Ï죬ΪÁ˱ÜÃâ¶Áµ½ÔàÊý¾Ý£¬ËùÒÔÐèÒª¶ÔÊÂÎñÖ®¼äµÄ¶Áд½øÐиôÀ룬ÖÁÓÚ¸ôÀ뵽ɶ³Ì¶ÈµÃ¿´ÒµÎñϵͳµÄ³¡¾°ÁË£¬ÊµÏÖÕâ¸ö¾ÍµÃÓÃMySQL µÄ¸ôÀë¼¶±ð¡£

ÏÂÃæÎÒÊ×ÏȽ²ÊµÏÖÊÂÎñ¹¦ÄܵÄÈý¸ö¼¼Êõ£¬·Ö±ðÊÇÈÕÖ¾Îļþ(redo log ºÍ undo log)£¬Ëø¼¼ÊõÒÔ¼°MVCC£¬È»ºóÔÙ½²ÊÂÎñµÄʵÏÖÔ­Àí£¬°üÀ¨Ô­×ÓÐÔÊÇÔõôʵÏֵ쬏ôÀëÐÍÊÇÔõôʵÏֵĵȵȡ£×îºóÔÚ×öÒ»¸ö×ܽᣬϣÍû´ó¼ÒÄܹ»ÄÍÐÄ¿´Íê

redo logÓëundo log½éÉÜ

mysqlËø¼¼ÊõÒÔ¼°MVCC»ù´¡

ÊÂÎñµÄʵÏÖÔ­Àí

×ܽá

redo log Óë undo log½éÉÜ

1. redo log

ʲôÊÇredo log ?

redo log½Ð×öÖØ×öÈÕÖ¾£¬ÊÇÓÃÀ´ÊµÏÖÊÂÎñµÄ³Ö¾ÃÐÔ¡£¸ÃÈÕÖ¾ÎļþÓÉÁ½²¿·Ö×é³É£ºÖØ×öÈÕÖ¾»º³å£¨redo log buffer£©ÒÔ¼°ÖØ×öÈÕÖ¾Îļþ£¨redo log£©,ǰÕßÊÇÔÚÄÚ´æÖУ¬ºóÕßÔÚ´ÅÅÌÖС£µ±ÊÂÎñÌá½»Ö®ºó»á°ÑËùÓÐÐÞ¸ÄÐÅÏ¢¶¼»á´æµ½¸ÃÈÕÖ¾ÖС£¼ÙÉèÓиö±í½Ð×ötb1(id,username) ÏÖÔÚÒª²åÈëÊý¾Ý£¨3£¬ceshi£©

starttransaction; selectbalancefrombankwherename="zhangsan";//Éú³ÉÖØ×öÈÕÖ¾
balance=600updatebanksetbalance= balance-400;//Éú³ÉÖØ×öÈÕÖ¾
amount=400updatefinancesetamount =amount+400;commit;

redo log ÓÐʲô×÷Óã¿

mysql ΪÁËÌáÉýÐÔÄܲ»»á°Ñÿ´ÎµÄÐ޸Ķ¼ÊµÊ±Í¬²½µ½´ÅÅÌ£¬¶øÊÇ»áÏÈ´æµ½Boffer Pool(»º³å³Ø)ÀïÍ·£¬°ÑÕâ¸öµ±×÷»º´æÀ´Óá£È»ºóʹÓúǫ́Ïß³ÌÈ¥×ö»º³å³ØºÍ´ÅÅÌÖ®¼äµÄͬ²½¡£

ÄÇôÎÊÌâÀ´ÁË£¬Èç¹û»¹Ã»À´µÄͬ²½µÄʱºòå´»ú»ò¶ÏµçÁËÔõô°ì£¿»¹Ã»À´µÃ¼°Ö´ÐÐÉÏÃæÍ¼ÖкìÉ«µÄ²Ù×÷¡£ÕâÑù»áµ¼Ö¶ª²¿·ÖÒÑÌá½»ÊÂÎñµÄÐÞ¸ÄÐÅÏ¢£¡

ËùÒÔÒýÈëÁËredo logÀ´¼Ç¼Òѳɹ¦Ìá½»ÊÂÎñµÄÐÞ¸ÄÐÅÏ¢£¬²¢ÇÒ»á°Ñredo log³Ö¾Ã»¯µ½´ÅÅÌ£¬ÏµÍ³ÖØÆôÖ®ºóÔÚ¶ÁÈ¡redo log»Ö¸´×îÐÂÊý¾Ý¡£

×ܽ᣺

redo logÊÇÓÃÀ´»Ö¸´Êý¾ÝµÄ ÓÃÓÚ±£ÕÏÒÑÌá½»ÊÂÎñµÄ³Ö¾Ã»¯ÌØÐÔ¡£

2.undo log

ʲôÊÇ undo log £¿

undo log ½Ð×ö»Ø¹öÈÕÖ¾£¬ÓÃÓڼǼÊý¾Ý±»ÐÞ¸ÄǰµÄÐÅÏ¢¡£ËûÕýºÃ¸úÇ°ÃæËù˵µÄÖØ×öÈÕÖ¾Ëù¼Ç¼µÄÏà·´£¬ÖØ×öÈÕÖ¾¼Ç¼Êý¾Ý±»Ð޸ĺóµÄÐÅÏ¢¡£undo logÖ÷Òª¼Ç¼µÄÊÇÊý¾ÝµÄÂß¼­±ä»¯£¬ÎªÁËÔÚ·¢Éú´íÎóʱ»Ø¹ö֮ǰµÄ²Ù×÷£¬ÐèÒª½«Ö®Ç°µÄ²Ù×÷¶¼¼Ç¼ÏÂÀ´£¬È»ºóÔÚ·¢Éú´íÎóʱ²Å¿ÉÒԻعö¡£

»¹ÓÃÉÏÃæÄÇÁ½Õűí

ÿ´ÎдÈëÊý¾Ý»òÕßÐÞ¸ÄÊý¾Ý֮ǰ¶¼»á°ÑÐÞ¸ÄǰµÄÐÅÏ¢¼Ç¼µ½ undo log¡£

undo log ÓÐʲô×÷Óã¿

undo log ¼Ç¼ÊÂÎñÐÞ¸Ä֮ǰ°æ±¾µÄÊý¾ÝÐÅÏ¢£¬Òò´Ë¼ÙÈçÓÉÓÚϵͳ´íÎó»òÕßrollback²Ù×÷¶ø»Ø¹öµÄ»°¿ÉÒÔ¸ù¾Ýundo logµÄÐÅÏ¢À´½øÐлعöµ½Ã»±»ÐÞ¸ÄǰµÄ״̬¡£

×ܽ᣺

undo logÊÇÓÃÀ´»Ø¹öÊý¾ÝµÄÓÃÓÚ±£ÕÏ Î´Ìá½»ÊÂÎñµÄÔ­×ÓÐÔ

mysqlËø¼¼ÊõÒÔ¼°MVCC»ù´¡

1. mysqlËø¼¼Êõ

µ±Óжà¸öÇëÇóÀ´¶ÁÈ¡±íÖеÄÊý¾Ýʱ¿ÉÒÔ²»²ÉÈ¡ÈκβÙ×÷£¬µ«ÊǶà¸öÇëÇóÀïÓжÁÇëÇó£¬ÓÖÓÐÐÞ¸ÄÇëÇóʱ±ØÐëÓÐÒ»ÖÖ´ëÊ©À´½øÐв¢·¢¿ØÖÆ¡£²»È»ºÜÓпÉÄÜ»áÔì³É²»Ò»Ö¡£

¶ÁÐ´Ëø

½â¾öÉÏÊöÎÊÌâºÜ¼òµ¥£¬Ö»ÐèÓÃÁ½ÖÖËøµÄ×éºÏÀ´¶Ô¶ÁдÇëÇó½øÐпØÖƼ´¿É£¬ÕâÁ½ÖÖËø±»³ÆÎª£º

¹²ÏíËø(shared lock),ÓÖ½Ð×ö"¶ÁËø"

¶ÁËøÊÇ¿ÉÒÔ¹²ÏíµÄ£¬»òÕß˵¶à¸ö¶ÁÇëÇó¿ÉÒÔ¹²ÏíÒ»°ÑËø¶ÁÊý¾Ý£¬²»»áÔì³É×èÈû¡£

ÅÅËûËø(exclusive lock),ÓÖ½Ð×ö"Ð´Ëø"

Ð´Ëø»áÅųâÆäËûËùÓлñÈ¡ËøµÄÇëÇó£¬Ò»Ö±×èÈû£¬Ö±µ½Ð´ÈëÍê³ÉÊÍ·ÅËø¡£

×ܽ᣺

ͨ¹ý¶ÁÐ´Ëø£¬¿ÉÒÔ×öµ½¶Á¶Á¿ÉÒÔ²¢ÐУ¬µ«ÊDz»ÄÜ×öµ½Ð´¶Á£¬Ð´Ð´²¢ÐÐ

ÊÂÎñµÄ¸ôÀëÐÔ¾ÍÊǸù¾Ý¶ÁÐ´ËøÀ´ÊµÏֵģ¡£¡£¡Õâ¸öºóÃæÔÙ˵¡£

2. MVCC»ù´¡

MVCC (MultiVersion Concurrency Control) ½Ð×ö¶à°æ±¾²¢·¢¿ØÖÆ¡£

InnoDBµÄ MVCC £¬ÊÇͨ¹ýÔÚÿÐмǼµÄºóÃæ±£´æÁ½¸öÒþ²ØµÄÁÐÀ´ÊµÏֵġ£ÕâÁ½¸öÁУ¬Ò»¸ö±£´æÁËÐеĴ´½¨Ê±¼ä£¬Ò»¸ö±£´æÁËÐеĹýÆÚʱ¼ä£¬µ±È»´æ´¢µÄ²¢²»ÊÇʵ¼ÊµÄʱ¼äÖµ£¬¶øÊÇϵͳ°æ±¾ºÅ

ÒÔÉÏÆ¬¶ÎÕª×Ô¡¶¸ßÐÔÄÜMysql¡·Õâ±¾Êé¶ÔMVCCµÄ¶¨Òå¡£ËûµÄÖ÷ҪʵÏÖ˼ÏëÊÇͨ¹ýÊý¾Ý¶à°æ±¾À´×öµ½¶Áд·ÖÀë¡£´Ó¶øÊµÏÖ²»¼ÓËø¶Á½ø¶ø×öµ½¶Áд²¢ÐС£

MVCCÔÚmysqlÖеÄʵÏÖÒÀÀµµÄÊÇundo logÓëread view

undo log :undo log ÖмǼijÐÐÊý¾ÝµÄ¶à¸ö°æ±¾µÄÊý¾Ý¡£

read view :ÓÃÀ´Åжϵ±Ç°°æ±¾Êý¾ÝµÄ¿É¼ûÐÔ

ÊÂÎñµÄʵÏÖ

Ç°Ãæ½²µÄÖØ×öÈÕÖ¾£¬»Ø¹öÈÕÖ¾ÒÔ¼°Ëø¼¼Êõ¾ÍÊÇʵÏÖÊÂÎñµÄ»ù´¡¡£

ÊÂÎñµÄÔ­×ÓÐÔÊÇͨ¹ýundologÀ´ÊµÏÖµÄÊÂÎñµÄ³Ö¾ÃÐÔÐÔÊÇͨ¹ýredologÀ´ÊµÏÖµÄÊÂÎñµÄ¸ôÀëÐÔÊÇͨ¹ý(¶ÁÐ´Ëø+MVCC)À´ÊµÏֵĶøÊÂÎñµÄÖÕ¼«´ó boss Ò»ÖÂÐÔÊÇͨ¹ýÔ­×ÓÐÔ£¬³Ö¾ÃÐÔ£¬¸ôÀëÐÔÀ´ÊµÏֵģ¡£¡£¡

Ô­×ÓÐÔ£¬³Ö¾ÃÐÔ£¬¸ôÀëÐÔÕÛÌÚ°ëÌìµÄÄ¿µÄÒ²ÊÇΪÁ˱£ÕÏÊý¾ÝµÄÒ»ÖÂÐÔ£¡

×ÜÖ®£¬ACIDÖ»ÊǸö¸ÅÄÊÂÎñ×îÖÕÄ¿µÄÊÇÒª±£ÕÏÊý¾ÝµÄ¿É¿¿ÐÔ£¬Ò»ÖÂÐÔ¡£

1.Ô­×ÓÐÔµÄʵÏÖ

ʲôÊÇÔ­×ÓÐÔ£º

Ò»¸öÊÂÎñ±ØÐë±»ÊÓΪ²»¿É·Ö¸îµÄ×îС¹¤×÷µ¥Î»£¬Ò»¸öÊÂÎñÖеÄËùÓвÙ×÷Ҫôȫ²¿³É¹¦Ìá½»£¬ÒªÃ´È«²¿Ê§°Ü»Ø¹ö£¬¶ÔÓÚÒ»¸öÊÂÎñÀ´Ëµ²»¿ÉÄÜÖ»Ö´ÐÐÆäÖеIJ¿·Ö²Ù×÷£¬Õâ¾ÍÊÇÊÂÎñµÄÔ­×ÓÐÔ¡£

ÉÏÃæÕâ¶Î»°È¡×Ô¡¶¸ßÐÔÄÜMySQL¡·Õâ±¾Êé¶ÔÔ­×ÓÐԵ͍Ò壬ԭ×ÓÐÔ¿ÉÒÔ¸ÅÀ¨Îª¾ÍÊÇҪʵÏÖҪôȫ²¿Ê§°Ü£¬ÒªÃ´È«²¿³É¹¦¡£

ÒÔÉϸÅÄîÏàÐÅ´ó¼Ò»ï¶ù¶¼Á˽⣬ÄÇôÊý¾Ý¿âÊÇÔõôʵÏÖµÄÄØ£¿¾ÍÊÇͨ¹ý»Ø¹ö²Ù×÷¡£Ëùν»Ø¹ö²Ù×÷¾ÍÊǵ±·¢Éú´íÎóÒì³£»òÕßÏÔʽµÄÖ´ÐÐrollbackÓï¾äʱÐèÒª°ÑÊý¾Ý»¹Ô­µ½Ô­ÏȵÄÄ£Ñù£¬ËùÒÔÕâʱºò¾ÍÐèÒªÓõ½undo logÀ´½øÐлعö£¬½ÓÏÂÀ´¿´Ò»ÏÂundo logÔÚʵÏÖÊÂÎñÔ­×ÓÐÔʱÔõô·¢»Ó×÷ÓõÄ

1.1 undo log µÄÉú³É

¼ÙÉèÓÐÁ½¸ö±í bankºÍfinance£¬±íÖÐԭʼÊý¾ÝÈçͼËùʾ£¬µ±½øÐвåÈ룬ɾ³ýÒÔ¼°¸üвÙ×÷ʱÉú³ÉµÄundo logÈçÏÂÃæÍ¼Ëùʾ£º

´ÓÉÏͼ¿ÉÒÔÁ˽⵽Êý¾ÝµÄ±ä¸ü¶¼°éËæ×ŻعöÈÕÖ¾µÄ²úÉú£º

(1) ²úÉúÁ˱»ÐÞ¸ÄǰÊý¾Ý(zhangsan,1000) µÄ»Ø¹öÈÕÖ¾

(2) ²úÉúÁ˱»ÐÞ¸ÄǰÊý¾Ý(zhangsan,0) µÄ»Ø¹öÈÕÖ¾

¸ù¾ÝÉÏÃæÁ÷³Ì¿ÉÒԵóöÈçϽáÂÛ£º

1.ÿÌõÊý¾Ý±ä¸ü(insert/update/delete)²Ù×÷¶¼°éËæÒ»Ìõundo logµÄÉú³É,²¢ÇһعöÈÕÖ¾±ØÐëÏÈÓÚÊý¾Ý³Ö¾Ã»¯µ½´ÅÅÌÉÏ

2.ËùνµÄ»Ø¹ö¾ÍÊǸù¾Ý»Ø¹öÈÕÖ¾×öÄæÏò²Ù×÷£¬±ÈÈçdeleteµÄÄæÏò²Ù×÷Ϊinsert£¬insertµÄÄæÏò²Ù×÷Ϊdelete£¬updateµÄÄæÏòΪupdateµÈ¡£

˼¿¼£ºÎªÊ²Ã´ÏÈдÈÕÖ¾ºóдÊý¾Ý¿â£¿--- ÉÔºó×ö½âÊÍ

1.2 ¸ù¾Ýundo log ½øÐлعö

ΪÁË×öµ½Í¬Ê±³É¹¦»òÕßʧ°Ü£¬µ±ÏµÍ³·¢Éú´íÎó»òÕßÖ´ÐÐrollback²Ù×÷ʱÐèÒª¸ù¾Ýundo log ½øÐлعö

»Ø¹ö²Ù×÷¾ÍÊÇÒª»¹Ô­µ½Ô­À´µÄ״̬£¬undo log¼Ç¼ÁËÊý¾Ý±»ÐÞ¸ÄǰµÄÐÅÏ¢ÒÔ¼°ÐÂÔöºÍ±»É¾³ýµÄÊý¾ÝÐÅÏ¢£¬¸ù¾Ýundo logÉú³É»Ø¹öÓï¾ä£¬±ÈÈ磺

(1) Èç¹ûÔڻعöÈÕÖ¾ÀïÓÐÐÂÔöÊý¾Ý¼Ç¼£¬ÔòÉú³Éɾ³ý¸ÃÌõµÄÓï¾ä

(2) Èç¹ûÔڻعöÈÕÖ¾ÀïÓÐɾ³ýÊý¾Ý¼Ç¼£¬ÔòÉú³ÉÉú³É¸ÃÌõµÄÓï¾ä

(3) Èç¹ûÔڻعöÈÕÖ¾ÀïÓÐÐÞ¸ÄÊý¾Ý¼Ç¼£¬ÔòÉú³ÉÐ޸ĵ½Ô­ÏÈÊý¾ÝµÄÓï¾ä

2.³Ö¾ÃÐÔµÄʵÏÖ

ÊÂÎñÒ»µ©Ìá½»£¬ÆäËù×öµÄÐ޸ĻáÓÀ¾Ã±£´æµ½Êý¾Ý¿âÖУ¬´Ëʱ¼´Ê¹ÏµÍ³±ÀÀ£Ð޸ĵÄÊý¾ÝÒ²²»»á¶ªÊ§¡£

ÏÈÁ˽âÒ»ÏÂMySQLµÄÊý¾Ý´æ´¢»úÖÆ£¬MySQLµÄ±íÊý¾ÝÊÇ´æ·ÅÔÚ´ÅÅÌÉϵģ¬Òò´ËÏëÒª´æÈ¡µÄʱºò¶¼Òª¾­Àú´ÅÅÌIO,È»¶ø¼´Ê¹ÊÇʹÓÃSSD´ÅÅÌIOÒ²ÊǷdz£ÏûºÄÐÔÄܵġ£Îª´Ë£¬ÎªÁËÌáÉýÐÔÄÜInnoDBÌṩÁË»º³å³Ø(Buffer Pool)£¬Buffer PoolÖаüº¬ÁË´ÅÅÌÊý¾ÝÒ³µÄÓ³É䣬¿ÉÒÔµ±×ö»º´æÀ´Ê¹Óãº

¶ÁÊý¾Ý£º»áÊ×ÏÈ´Ó»º³å³ØÖжÁÈ¡£¬Èç¹û»º³å³ØÖÐûÓУ¬Ôò´Ó´ÅÅ̶ÁÈ¡ÔÙ·ÅÈ뻺³å³Ø£»

дÊý¾Ý£º»áÊ×ÏÈдÈ뻺³å³Ø£¬»º³å³ØÖеÄÊý¾Ý»á¶¨ÆÚͬ²½µ½´ÅÅÌÖУ»

ÉÏÃæÕâÖÖ»º³å³ØµÄ´ëÊ©ËäÈ»ÔÚÐÔÄÜ·½Ãæ´øÀ´ÁËÖʵķÉÔ¾£¬µ«ÊÇËüÒ²´øÀ´ÁËеÄÎÊÌ⣬µ±MySQLϵͳ崻ú£¬¶ÏµçµÄʱºò¿ÉÄܻᶪÊý¾Ý£¡£¡£¡

ÒòΪÎÒÃǵÄÊý¾ÝÒѾ­Ìá½»ÁË£¬µ«´ËʱÊÇÔÚ»º³å³ØÀïÍ·£¬»¹Ã»À´µÃ¼°ÔÚ´ÅÅ̳־û¯£¬ËùÒÔÎÒÃǼ±ÐèÒ»ÖÖ»úÖÆÐèÒª´æÒ»ÏÂÒÑÌá½»ÊÂÎñµÄÊý¾Ý£¬Îª»Ö¸´Êý¾ÝʹÓá£

ÓÚÊÇ redo log¾ÍÅÉÉÏÓó¡ÁË¡£ÏÂÃæ¿´ÏÂredo logÊÇʲôʱºò²úÉúµÄ

¼ÈÈ»redo logÒ²ÐèÒª´æ´¢£¬Ò²Éæ¼°´ÅÅÌIOΪɶ»¹ÓÃËü£¿

£¨1£©redo log µÄ´æ´¢ÊÇ˳Ðò´æ´¢£¬¶ø»º´æÍ¬²½ÊÇËæ»ú²Ù×÷¡£

£¨2£©»º´æÍ¬²½ÊÇÒÔÊý¾ÝҳΪµ¥Î»µÄ£¬Ã¿´Î´«ÊäµÄÊý¾Ý´óС´óÓÚredo log¡£

3.¸ôÀëÐÔʵÏÖ

¸ôÀëÐÔÊÇÊÂÎñACIDÌØÐÔÀï×ÔÓµÄÒ»¸ö¡£ÔÚSQL±ê×¼ÀﶨÒåÁËËÄÖÖ¸ôÀë¼¶±ð£¬Ã¿Ò»ÖÖ¼¶±ð¶¼¹æ¶¨Ò»¸öÊÂÎñÖеÄÐ޸ģ¬ÄÄЩÊÇÊÂÎñÖ®¼ä¿É¼ûµÄ£¬ÄÄЩÊDz»¿É¼ûµÄ¡£

¼¶±ðÔ½µÍµÄ¸ôÀë¼¶±ð¿ÉÒÔÖ´ÐÐÔ½¸ßµÄ²¢·¢£¬µ«Í¬Ê±ÊµÏÖ¸´ÔÓ¶ÈÒÔ¼°¿ªÏúÒ²Ô½´ó¡£

MySQL¸ôÀë¼¶±ðÓÐÒÔÏÂËÄÖÖ£¨¼¶±ðÓɵ͵½¸ß£©£º

READUNCOMMITED(δÌá½»¶Á)

READCOMMITED(Ìá½»¶Á)

REPEATABLEREAD(¿ÉÖØ¸´¶Á)

SERIALIZABLE (¿ÉÖØ¸´¶Á)

Ö»Òª³¹µ×Àí½âÁ˸ôÀë¼¶±ðÒÔ¼°ËûµÄʵÏÖÔ­Àí¾ÍÏ൱ÓÚÀí½âÁËACIDÀïµÄ¸ôÀëÐÍ¡£Ç°ÃæËµ¹ýÔ­×ÓÐÔ£¬¸ôÀëÐÔ£¬³Ö¾ÃÐÔµÄÄ¿µÄ¶¼ÊÇΪÁËÒª×öµ½Ò»ÖÂÐÔ£¬µ«¸ôÀëÐ͸úÆäËûÁ½¸öÓÐËùÇø±ð£¬Ô­×ÓÐԺͳ־ÃÐÔÊÇΪÁËҪʵÏÖÊý¾ÝµÄ¿ÉÐÔ±£ÕÏ¿¿£¬±ÈÈçÒª×öµ½å´»úºóµÄ»Ö¸´£¬ÒÔ¼°´íÎóºóµÄ»Ø¹ö¡£

ÄÇô¸ôÀëÐÔÊÇÒª×öµ½Ê²Ã´ÄØ£¿¸ôÀëÐÔÊÇÒª¹ÜÀí¶à¸ö²¢·¢¶ÁдÇëÇóµÄ·ÃÎÊ˳Ðò¡£ÕâÖÖ˳Ðò°üÀ¨´®ÐлòÕßÊDz¢ÐÐ

˵Ã÷Ò»µã£¬Ð´ÇëÇó²»½ö½öÊÇÖ¸insert²Ù×÷£¬ÓÖ°üÀ¨update²Ù×÷¡£

×ÜÖ®£¬´Ó¸ôÀëÐÔµÄʵÏÖ¿ÉÒÔ¿´³öÕâÊÇÒ»³¡Êý¾ÝµÄ ¿É¿¿ÐÔÓëÐÔÄÜÖ®¼äµÄȨºâ£º

¿É¿¿ÐÔÐԸߵ쬲¢·¢ÐÔÄܵÍ(±ÈÈçSerializable)¡£¿É¿¿ÐԵ͵쬲¢·¢ÐÔÄܸß(±ÈÈç Read Uncommited)

READ UNCOMMITTED

ÔÚREAD UNCOMMITTED¸ôÀë¼¶±ðÏ£¬ÊÂÎñÖеÄÐ޸ļ´Ê¹»¹Ã»Ìá½»£¬¶ÔÆäËûÊÂÎñÊǿɼûµÄ¡£ÊÂÎñ¿ÉÒÔ¶ÁȡδÌá½»µÄÊý¾Ý£¬Ôì³ÉÔà¶Á¡£

ÒòΪ¶Á²»»á¼ÓÈκÎËø£¬ËùÒÔд²Ù×÷ÔÚ¶ÁµÄ¹ý³ÌÖÐÐÞ¸ÄÊý¾Ý£¬ËùÒÔ»áÔì³ÉÔà¶Á¡£ºÃ´¦ÊÇ¿ÉÒÔÌáÉý²¢·¢´¦ÀíÐÔÄÜ£¬ÄÜ×öµ½¶Áд²¢ÐС£

»»¾ä»°Ëµ£¬¶ÁµÄ²Ù×÷²»ÄÜÅųâдÇëÇó¡£

Óŵ㣺¶Áд²¢ÐУ¬ÐÔÄܸß

ȱµã£ºÔì³ÉÔà¶Á

READ COMMITTED

Ò»¸öÊÂÎñµÄÐÞ¸ÄÔÚËûÌύ֮ǰµÄËùÓÐÐ޸ģ¬¶ÔÆäËûÊÂÎñ¶¼ÊDz»¿É¼ûµÄ¡£ÆäËûÊÂÎñÄܶÁµ½ÒÑÌá½»µÄÐ޸ı仯¡£Ôںܶೡ¾°ÏÂÕâÖÖÂß¼­ÊÇ¿ÉÒÔ½ÓÊܵġ£

InnoDBÔÚ READ COMMITTED£¬Ê¹ÓÃÅÅËüËø,¶ÁÈ¡Êý¾Ý²»¼ÓËø¶øÊÇʹÓÃÁËMVCC»úÖÆ¡£»òÕß»»¾ä»°ËµËû²ÉÓÃÁ˶Áд·ÖÀë»úÖÆ¡£

µ«ÊǸü¶±ð»á²úÉú²»¿ÉÖØ¶ÁÒÔ¼°»Ã¶ÁÎÊÌâ¡£

ʲôÊDz»¿ÉÖØ¶Á£¿

ÔÚÒ»¸öÊÂÎñÄÚ¶à´Î¶ÁÈ¡µÄ½á¹û²»Ò»Ñù¡£

Ϊʲô»á²úÉú²»¿ÉÖØ¸´¶Á£¿

Õâ¸ú READ COMMITTED ¼¶±ðϵÄMVCC»úÖÆÓйØÏµ£¬ÔڸøôÀë¼¶±ðÏÂÿ´Î selectµÄʱºòÐÂÉú³ÉÒ»¸ö°æ±¾ºÅ£¬ËùÒÔÿ´ÎselectµÄʱºò¶ÁµÄ²»ÊÇÒ»¸ö¸±±¾¶øÊDz»Í¬µÄ¸±±¾¡£

ÔÚÿ´ÎselectÖ®¼äÓÐÆäËûÊÂÎñ¸üÐÂÁËÎÒÃǶÁÈ¡µÄÊý¾Ý²¢Ìá½»ÁË£¬ÄǾͳöÏÖÁ˲»¿ÉÖØ¸´¶Á

REPEATABLE READ(MysqlĬÈϸôÀë¼¶±ð)

ÔÚÒ»¸öÊÂÎñÄڵĶà´Î¶ÁÈ¡µÄ½á¹ûÊÇÒ»ÑùµÄ¡£ÕâÖÖ¼¶±ðÏ¿ÉÒÔ±ÜÃ⣬Ôà¶Á£¬²»¿ÉÖØ¸´¶ÁµÈ²éѯÎÊÌâ¡£mysql ÓÐÁ½ÖÖ»úÖÆ¿ÉÒÔ´ïµ½ÕâÖÖ¸ôÀë¼¶±ðµÄЧ¹û£¬·Ö±ðÊDzÉÓöÁÐ´ËøÒÔ¼°MVCC¡£

²ÉÓöÁÐ´ËøÊµÏÖ£º

ΪʲôÄÜ¿ÉÖØ¸´¶Á£¿Ö»ÒªÃ»ÊͷŶÁËø£¬ÔڴζÁµÄʱºò»¹ÊÇ¿ÉÒÔ¶Áµ½µÚÒ»´Î¶ÁµÄÊý¾Ý¡£

Óŵ㣺ʵÏÖÆðÀ´¼òµ¥

ȱµã£ºÎÞ·¨×öµ½¶Áд²¢ÐÐ

²ÉÓÃMVCCʵÏÖ£º

ΪʲôÄÜ¿ÉÖØ¸´¶Á£¿ÒòΪ¶à´Î¶ÁȡֻÉú³ÉÒ»¸ö°æ±¾£¬¶Áµ½µÄ×ÔÈ»ÊÇÏàͬÊý¾Ý¡£

Óŵ㣺¶Áд²¢ÐÐ

ȱµã£ºÊµÏֵĸ´ÔӶȸß

µ«ÊÇÔڸøôÀë¼¶±ðÏÂÈÔ»á´æÔڻöÁµÄÎÊÌ⣬¹ØÓڻöÁµÄ½â¾öÎÒ´òËãÁí¿ªÒ»ÆªÀ´½éÉÜ¡£

SERIALIZABLE

¸Ã¸ôÀë¼¶±ðÀí½âÆðÀ´×î¼òµ¥£¬ÊµÏÖÒ²×î¼òµ¥¡£ÔÚ¸ôÀë¼¶±ðϳýÁ˲»»áÔì³ÉÊý¾Ý²»Ò»ÖÂÎÊÌ⣬ûÆäËûÓŵ㡣

--Õª×Ô¡¶¸ßÐÔÄÜMysql¡·

4.Ò»ÖÂÐÔµÄʵÏÖ

Êý¾Ý¿â×ÜÊÇ´ÓÒ»¸öÒ»ÖÂÐÔµÄ×´Ì¬×ªÒÆµ½ÁíÒ»¸öÒ»ÖÂÐÔµÄ״̬¡£

ÏÂÃæ¾Ù¸öÀý×Ó£¬zhangsan ´ÓÒøÐп¨×ª400µ½Àí²ÆÕË»§:

starttransaction; selectbalancefrombankwherename ="zhangsan";//Éú³ÉÖØ×öÈÕÖ¾
balance=600updatebanksetbalance =balance-400;//Éú³ÉÖØ×öÈÕÖ¾
amount=400updatefinancesetamount =amount+400;commit;

1.¼ÙÈçÖ´ÐÐÍê update bank set balance = balance - 400;Ö®·¢ÉúÒì³£ÁË£¬ÒøÐп¨µÄǮҲ²»ÄÜÆ½°×Î޹ʵļõÉÙ£¬¶øÊǻعöµ½×î³õ״̬¡£

2.ÓÖ»òÕßÊÂÎñÌá½»Ö®ºó£¬»º³å³Ø»¹Ã»Í¬²½µ½´ÅÅ̵Äʱºòå´»úÁË£¬ÕâÒ²ÊDz»ÄܽÓÊܵģ¬Ó¦¸ÃÔÚÖØÆôµÄʱºò»Ö¸´²¢³Ö¾Ã»¯¡£

3.¼ÙÈçÓв¢·¢ÊÂÎñÇëÇóµÄʱºòÒ²Ó¦¸Ã×öºÃÊÂÎñÖ®¼äµÄ¿É¼ûÐÔÎÊÌ⣬±ÜÃâÔì³ÉÔà¶Á£¬²»¿ÉÖØ¸´¶Á£¬»Ã¶ÁµÈ¡£ÔÚÉæ¼°²¢·¢µÄÇé¿öÏÂÍùÍùÔÚÐÔÄܺÍÒ»ÖÂÐÔÖ®¼ä×öƽºâ£¬×öÒ»¶¨µÄÈ¡ÉᣬËùÒÔ¸ôÀëÐÔÒ²ÊǶÔÒ»ÖÂÐÔµÄÒ»ÖÖÆÆ»µ¡£

×ܽá

±¾³ö·¢µãÊÇÏë½²Ò»ÏÂMysqlµÄÊÂÎñµÄʵÏÖÔ­Àí¡£

ʵÏÖÊÂÎñ²ÉÈ¡ÁËÄÄЩ¼¼ÊõÒÔ¼°Ë¼Ï룿

Ô­×ÓÐÔ£º ʹÓà undo log £¬´Ó¶ø´ïµ½»Ø¹ö

³Ö¾ÃÐÔ£º ʹÓà redo log£¬´Ó¶ø´ïµ½¹ÊÕϺó»Ö¸´

¸ôÀëÐÔ£º ʹÓÃËøÒÔ¼°MVCC,ÔËÓõÄÓÅ»¯Ë¼ÏëÓжÁд·ÖÀ룬¶Á¶Á²¢ÐУ¬¶Áд²¢ÐÐ

Ò»ÖÂÐÔ£º ͨ¹ý»Ø¹ö£¬ÒÔ¼°»Ö¸´£¬ºÍÔÚ²¢·¢»·¾³ÏµĸôÀë×öµ½Ò»ÖÂÐÔ¡£

 

   
1727 ´Îä¯ÀÀ       30
Ïà¹ØÎÄÕÂ

»ùÓÚEAµÄÊý¾Ý¿â½¨Ä£
Êý¾ÝÁ÷½¨Ä££¨EAÖ¸ÄÏ£©
¡°Êý¾Ýºþ¡±£º¸ÅÄî¡¢ÌØÕ÷¡¢¼Ü¹¹Óë°¸Àý
ÔÚÏßÉ̳ÇÊý¾Ý¿âϵͳÉè¼Æ ˼·+Ч¹û
 
Ïà¹ØÎĵµ

GreenplumÊý¾Ý¿â»ù´¡Åàѵ
MySQL5.1ÐÔÄÜÓÅ»¯·½°¸
ijµçÉÌÊý¾ÝÖÐ̨¼Ü¹¹Êµ¼ù
MySQL¸ßÀ©Õ¹¼Ü¹¹Éè¼Æ
Ïà¹Ø¿Î³Ì

Êý¾ÝÖÎÀí¡¢Êý¾Ý¼Ü¹¹¼°Êý¾Ý±ê×¼
MongoDBʵս¿Î³Ì
²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿âÉè¼ÆÓëÓÅ»¯
PostgreSQLÊý¾Ý¿âʵսÅàѵ
×îл¼Æ»®
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢ 6-12[ÏÃÃÅ]
È˹¤ÖÇÄÜ.»úÆ÷ѧϰTensorFlow 6-22[Ö±²¥]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 6-30[±±¾©]
ǶÈëʽÈí¼þ¼Ü¹¹-¸ß¼¶Êµ¼ù 7-9[±±¾©]
Óû§ÌåÑé¡¢Ò×ÓÃÐÔ²âÊÔÓëÆÀ¹À 7-25[Î÷°²]
ͼÊý¾Ý¿âÓë֪ʶͼÆ× 8-23[±±¾©]
 
×îÐÂÎÄÕÂ
InfluxDB¸ÅÄîºÍ»ù±¾²Ù×÷
InfluxDB TSM´æ´¢ÒýÇæÖ®Êý¾ÝдÈë
Éî¶ÈÂþ̸Êý¾Ýϵͳ¼Ü¹¹¡ª¡ªLambda architecture
Lambda¼Ü¹¹Êµ¼ù
InfluxDB TSM´æ´¢ÒýÇæÖ®Êý¾Ý¶ÁÈ¡
×îпγÌ
OracleÊý¾Ý¿âÐÔÄÜÓÅ»¯¡¢¼Ü¹¹Éè¼ÆºÍÔËÐÐά»¤
²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿âÉè¼ÆÓëÓÅ»¯
NoSQLÊý¾Ý¿â£¨Ô­Àí¡¢Ó¦Óá¢×î¼Ñʵ¼ù£©
ÆóÒµ¼¶Hadoop´óÊý¾Ý´¦Àí×î¼Ñʵ¼ù
OracleÊý¾Ý¿âÐÔÄÜÓÅ»¯×î¼Ñʵ¼ù
³É¹¦°¸Àý
ij½ðÈÚ¹«Ë¾ Mysql¼¯ÈºÓëÐÔÄÜÓÅ»¯
±±¾© ²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿âÉè¼ÆÓëÓÅ»¯
ÖªÃûijÐÅϢͨÐŹ«Ë¾ NoSQL»º´æÊý¾Ý¿â¼¼Êõ
±±¾© oracleÊý¾Ý¿âSQLÓÅ»¯
ÖйúÒÆ¶¯ IaaSÔÆÆ½Ì¨-Ö÷Á÷Êý¾Ý¿â¼°´æ´¢¼¼Êõ