MySQL Troubleshooting
MySQL Troubleshooting
||p
Us '
/
ime i
Sveta Smirnova
O’REILLY* Foreword by Dr. Charles Bell
Databases
Twitter: @oreillymedia
facebook.com/oreilly
C
O’REILLY
oreilly.com
9 M78 1 449n3 1 2008
MySQL Troubleshooting
6YHWD6PLUQRYD
g
O REILLY
Beijing • Cambridge • Farnham • Köln • Sebastopol • Tokyo
MySQL Troubleshooting
E\6YHWD6PLUQRYD
&RS\ULJKW6YHWD6PLUQRYD$OOULJKWVUHVHUYHG
3ULQWHGLQWKH8QLWHG6WDWHVRI$PHULFD
3XEOLVKHGE\2¦5HLOO\0HGLD,QF*UDYHQVWHLQ+LJKZD\1RUWK6HEDVWRSRO&$
2¦5HLOO\ERRNVPD\EHSXUFKDVHGIRUHGXFDWLRQDOEXVLQHVVRUVDOHVSURPRWLRQDOXVH2QOLQHHGLWLRQV
DUHDOVRDYDLODEOHIRUPRVWWLWOHV KWWSP\VDIDULERRNVRQOLQHFRP )RUPRUHLQIRUPDWLRQFRQWDFWRXU
FRUSRUDWHLQVWLWXWLRQDOVDOHVGHSDUWPHQW RUFRUSRUDWH#RUHLOO\FRP
)HEUXDU\ )LUVW(GLWLRQ
1XWVKHOO+DQGERRNWKH1XWVKHOO+DQGERRNORJRDQGWKH2¦5HLOO\ORJRDUHUHJLVWHUHGWUDGHPDUNVRI
2¦5HLOO\0HGLD,QF0\64/7URXEOHVKRRWLQJWKHLPDJHRID0DOD\DQEDGJHUDQGUHODWHGWUDGHGUHVV
DUHWUDGHPDUNVRI2¦5HLOO\0HGLD,QF
0DQ\RIWKHGHVLJQDWLRQVXVHGE\PDQXIDFWXUHUVDQGVHOOHUVWRGLVWLQJXLVKWKHLUSURGXFWVDUHFODLPHGDV
WUDGHPDUNV:KHUHWKRVHGHVLJQDWLRQVDSSHDULQWKLVERRNDQG2¦5HLOO\0HGLD,QFZDVDZDUHRID
WUDGHPDUNFODLPWKHGHVLJQDWLRQVKDYHEHHQSULQWHGLQFDSVRULQLWLDOFDSV
:KLOHHYHU\SUHFDXWLRQKDVEHHQWDNHQLQWKHSUHSDUDWLRQRIWKLVERRNWKHSXEOLVKHUDQGDXWKRUDVVXPH
QRUHVSRQVLELOLW\IRUHUURUVRURPLVVLRQVRUIRUGDPDJHVUHVXOWLQJIURPWKHXVHRIWKHLQIRUPDWLRQFRQ
WDLQHGKHUHLQ
,6%1
>/6,@
Table of Contents
Foreword . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii
Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix
1. Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
,QFRUUHFW6\QWD[
:URQJ5HVXOWVIURPD6(/(&7
:KHQWKH3UREOHP0D\+DYH%HHQD3UHYLRXV8SGDWH
*HWWLQJ,QIRUPDWLRQ$ERXWD4XHU\
7UDFLQJ%DFN(UURUVLQ'DWD
6ORZ4XHULHV
7XQLQJD4XHU\ZLWK,QIRUPDWLRQIURP(;3/$,1
7DEOH7XQLQJDQG,QGH[HV
:KHQWR6WRS2SWLPL]LQJ
(IIHFWVRI2SWLRQV
4XHULHV7KDW0RGLI\'DWD
1R6LOYHU%XOOHW
:KHQWKH6HUYHU'RHV1RW$QVZHU
,VVXHVZLWK6ROXWLRQV6SHFLILFWR6WRUDJH(QJLQHV
0\,6$0&RUUXSWLRQ
,QQR'%&RUUXSWLRQ
3HUPLVVLRQ,VVXHV
iii
,PSOLFLW&RPPLWV
0HWDGDWD/RFNLQJ
0HWDGDWD/RFNLQJ9HUVXVWKH2OG0RGHO
+RZ&RQFXUUHQF\$IIHFWV3HUIRUPDQFH
0RQLWRULQJ,QQR'%7UDQVDFWLRQVIRU&RQFXUUHQF\3UREOHPV
0RQLWRULQJ2WKHU5HVRXUFHVIRU&RQFXUUHQF\3UREOHPV
2WKHU/RFNLQJ,VVXHV
5HSOLFDWLRQDQG&RQFXUUHQF\
6WDWHPHQW%DVHG5HSOLFDWLRQ,VVXHV
0L[LQJ7UDQVDFWLRQDODQG1RQWUDQVDFWLRQDO7DEOHV
,VVXHVRQWKH6ODYH
(IIHFWLYHO\8VLQJ0\64/7URXEOHVKRRWLQJ7RROV
6+2:352&(66/,67DQGWKH
,1)250$7,21B6&+(0$352&(66/,677DEOH
6+2:(1*,1(,112'%67$786DQG,QQR'%0RQLWRUV
,1)250$7,21B6&+(0$7DEOHV
3(5)250$1&(B6&+(0$7DEOHV
/RJ)LOHV
iv | Table of Contents
5. Troubleshooting Replication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
'LVSOD\LQJ6ODYH6WDWXV
3UREOHPVZLWKWKH,27KUHDG
3UREOHPVZLWKWKH64/7KUHDG
:KHQ'DWD,V'LIIHUHQWRQWKH0DVWHUDQG6ODYH
&LUFXODU5HSOLFDWLRQDQG1RQUHSOLFDWLRQ:ULWHVRQWKH6ODYH
,QFRPSOHWHRU$OWHUHG64/6WDWHPHQWV
'LIIHUHQW(UURUVRQWKH0DVWHUDQG6ODYH
&RQILJXUDWLRQ
:KHQWKH6ODYH/DJV)DU%HKLQGWKH0DVWHU
Table of Contents | v
7RROV
*DWKHULQJWKH,QIRUPDWLRQ<RX1HHG
:KDW'RHV,W$OO0HDQ"
7HVWLQJ
3UHYHQWLRQ
3ULYLOHJHV
(QYLURQPHQW
7KLQN$ERXW,W
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
vi | Table of Contents
Foreword
6ROYLQJDV\VWHPSUREOHPFDQEHRQHRIWKHPRVWIUXVWUDWLQJH[SHULHQFHVDV\VWHPV
H[SHUWFDQHQFRXQWHU5HSDLURIWKHSUREOHPRUWKHH[HFXWLRQRIWKHVROXWLRQLVW\SLFDOO\
WKHHDV\SDUW'LDJQRVLQJWKHFDXVHRIWKHSUREOHPLVWKHUHDOFKDOOHQJH
([SHULHQFHG DGPLQLVWUDWRUV KDYH OHDUQHG¢VRPH E\ GRLQJ DQG RWKHUV E\ WULDO DQG
HUURU¢WKDWWKHEHVWZD\WRVROYHDSUREOHPLVWRXVHDVWDQGDUGL]HGSURFHVVIRUGHILQLQJ
WKHSUREOHPIRUPLQJDOLVWRISRVVLEOHFDXVHVDQGWKHQWHVWLQJHDFKXQWLOWKHVROXWLRQ
LVIRXQG7KLVPD\VRXQGQDwYHEXWLWJHQHUDOO\ZRUNV DOWKRXJKLWLVQRWVXIILFLHQWIRU
VSHFLDOL]HGV\VWHPV
0\64/LVDVSHFLDOL]HGFRPSOH[PDWXUHDQGSRZHUIXOGDWDEDVHV\VWHPFDSDEOHRI
PHHWLQJWKHQHHGVRIDYDVWQXPEHURIRUJDQL]DWLRQV0\64/LVDOVRYHU\HDV\WRLQVWDOO
DQGFRQILJXUH,QGHHGPRVWGHIDXOWLQVWDOODWLRQVGRQRWQHHGWREHFRQILJXUHGRUWXQHG
DWDOO+RZHYHU0\64/LVDOVRDV\VWHPZLWKPDQ\OD\HUVRIIXQFWLRQDOLW\WKDWFDQ
VRPHWLPHVJRDZU\DQGSURGXFHDZDUQLQJRUHUURU
6RPHWLPHVWKHZDUQLQJRUHUURULVVSHFLILFHQRXJK RUKDVEHHQVHHQDQGGRFXPHQWHG
HQRXJK WKDWDVROXWLRQFDQEHLPSOHPHQWHGLPPHGLDWHO\2WKHUWLPHVDQGWKDQNIXOO\
LQIUHTXHQWO\DSUREOHPLVHQFRXQWHUHGWKDWGRHVQRWKDYHDNQRZQVROXWLRQRULVVSH
FLILFWR\RXUDSSOLFDWLRQGDWDEDVHRUHQYLURQPHQW)LQGLQJDVROXWLRQIRUVXFKDZDUQ
LQJHUURURURWKHUSUREOHPZLWK0\64/FDQEHDGDXQWLQJWDVN
:KHQ HQFRXQWHULQJ VXFK DQ LVVXH GDWDEDVH SURIHVVLRQDOV W\SLFDOO\ VHDUFK YDULRXV
UHVRXUFHVORRNLQJIRUFOXHVRUDWOHDVWGRFXPHQWDWLRQWKDWGHVFULEHVDVLPLODUSUREOHP
DQGVROXWLRQ0RVWZLOOILQGWKDWWKHUHDUHVLPSO\WRRPDQ\UHIHUHQFHVWRSUREOHPVWKDW
DUHVRPHZKDWVLPLODURUWKDWFRQWDLQVXJJHVWHGVROXWLRQVWKDWVLPSO\GRQ¦WZRUNRU
GRQ¦WDSSO\WR\RXUVLWXDWLRQ
$ILQHH[DPSOHRIWKLVLVVHDUFKLQJWKH,QWHUQHWXVLQJWKHHUURUPHVVDJHDVVHDUFKFULWHULD
0RUHRIWHQWKDQQRW\RXZLOOILQGDOOPDQQHURIKLWVYDU\LQJIURPDUFKLYHGHPDLOORJV
WREORJVDQGVLPLODUFRPPHQWDU\WKDWPD\RUPD\QRWUHIHUWRWKHHUURUPHVVDJH7KLV
RIWHQOHDGVWRDORWRIZDVWHGWLPHDQGIUXVWUDWLRQ:KDWLVQHHGHGLVDUHIHUHQFHJXLGH
IRUKRZWRVROYHSUREOHPVZLWK0\64/
vii
1RW RQO\ GRHV WKLV ERRN IXOILOO WKDW QHHG LW DOVR HVWDEOLVKHV D SURWRFRO IRU VROYLQJ
SUREOHPVWKDWFDQEHDSSOLHGWRDOPRVWDQ\V\VWHP7KHPHWKRGVSUHVHQWHGDUHZHOO
VWUXFWXUHGWKRURXJKDQGUHSHDWDEOH&RPELQHGZLWKUHDOZRUOGH[DPSOHVWKHWH[W
EHFRPHVDZDWHUVKHGZRUNWKDWGHILQHVWKHSURSHUZD\WRGLDJQRVHDQGUHSDLU0\64/
6YHWDXVHVKHUILUVWKDQGH[SHULHQFHVDQGLQGHSWKNQRZOHGJHRI0\64/DQGGLDJQRVWLF
VNLOOVWRWHDFKWKHUHDGHUIXQGDPHQWDOVNLOOVWRGLDJQRVHDQGUHSDLUDOPRVWDQ\SUREOHP
\RX PD\ HQFRXQWHU ZLWK 0\64/¢PDNLQJ WKLV ERRN D PXVW KDYH IRU DQ\ 0\64/
SURIHVVLRQDO
,FRQVLGHUP\VHOID0\64/H[SHUWDQGZKLOHP\VNLOOVDUHEDFNHGE\PXFKH[SHULHQFH
,ZRQ¦WFODLPWRNQRZHYHU\WKLQJWKHUHLVWRNQRZDERXW0\64/$IWHUUHDGLQJWKLV
ERRN,FDQVD\WKDW,¦YHEURDGHQHGP\VNLOOVHYHQIXUWKHU,IDVHDVRQHGSURIHVVLRQDO
OLNHP\VHOIFDQEHQHILWIURPUHDGLQJWKLVERRNHYHU\0\64/XVHUVKRXOGUHDGWKLV
ERRN 0RUH WR WKH SRLQW LW VKRXOG EH FRQVLGHUHG UHTXLUHG UHDGLQJ IRU DOO 0\64/
GDWDEDVHDGPLQLVWUDWRUVFRQVXOWDQWVDQGGDWDEDVHGHYHORSHUV
¢'U&KDUOHV%HOO2UDFOH&RUSRUDWLRQ
$XWKRURI0\64/+LJK$YDLODELOLW\ 2¦5HLOO\
DQG([SHUW0\64/ $SUHVV
viii | Foreword
Preface
,KDYHZRUNHGVLQFH0D\DVDSULQFLSDOWHFKQLFDOVXSSRUWHQJLQHHULQWKH%XJV
9HULILFDWLRQ*URXSRIWKH0\64/6XSSRUW*URXSIRU0\64/$%WKHQ6XQDQGILQDOO\
2UDFOH'XULQJP\GDLO\MRE,RIWHQVHHXVHUVZKRDUHVWXFNZLWKDSUREOHPDQGKDYH
QRLGHDZKDWWRGRQH[W:HOOYHULILHGPHWKRGVH[LVWWRILQGWKHFDXVHRIWKHSUREOHP
DQGIL[LWHIIHFWLYHO\EXWWKH\DUHKDUGWRFXOOIURPWKHQXPHURXVLQIRUPDWLRQVRXUFHV
+XQGUHGVRIJUHDWERRNVEORJSRVWVDQGZHESDJHVGHVFULEHGLIIHUHQWSDUWVRIWKH
0\64/VHUYHULQGHWDLO%XWKHUH¦VZKHUH,VHHWKHGLIILFXOW\WKLVLQIRUPDWLRQLVRUJDQ
L]HGLQVXFKDZD\DVWRH[SODLQKRZWKH0\64/VHUYHUQRUPDOO\ZRUNVOHDYLQJRXW
PHWKRGVWKDWFDQLGHQWLI\IDLOXUHVDQGLOOSRVHGEHKDYLRU
:KHQFRPELQHGWKHVHLQIRUPDWLRQVRXUFHVH[SODLQHDFKDQGHYHU\DVSHFWRI0\64/
RSHUDWLRQ%XWLI\RXGRQ¦WNQRZZK\\RXUSUREOHPLVRFFXUULQJ\RX¦OOSUREDEO\PLVV
WKHFDXVHDPRQJGR]HQVRISRVVLELOLWLHVVXJJHVWHGE\WKHGRFXPHQWDWLRQ(YHQLI\RX
DVNDQH[SHUWZKDWFRXOGEHFDXVLQJ\RXUSUREOHPVKHFDQHQXPHUDWHPDQ\VXVSHFWV
EXW\RXVWLOOQHHGWRILQGWKHULJKWRQH2WKHUZLVHDQ\FKDQJHV\RXPDNHFRXOGMXVW
PDVNWKHUHDOSUREOHPWHPSRUDULO\RUHYHQPDNHLWZRUVH
,WLVYHU\LPSRUWDQWWRNQRZWKHVRXUFHRIDSUREOHPHYHQZKHQDFKDQJHWRDQ64/
VWDWHPHQWRUFRQILJXUDWLRQRSWLRQFDQPDNHLWJRDZD\.QRZOHGJHRIWKHFDXVHRU
IDLOXUHZLOODUP\RXWRRYHUFRPHLWSHUPDQHQWO\DQGSUHYHQWLWIURPSRSSLQJXSDJDLQ
LQWKHIXWXUH
,ZURWHWKLVERRNWRJLYH\RXWKHPHWKRGV,XVHFRQVWDQWO\WRLGHQWLI\ZKDWFDXVHGDQ
HUURULQDQ64/DSSOLFDWLRQRUD0\64/FRQILJXUDWLRQDQGKRZWRIL[LW
Audience
7KLVERRNLVZULWWHQIRUSHRSOHZKRKDYHVRPHNQRZOHGJHDERXW0\64/,WULHGWR
LQFOXGHLQIRUPDWLRQXVHIXOIRUERWKEHJLQQHUVDQGDGYDQFHGXVHUV<RXQHHGWRNQRZ
64/DQGKDYHVRPHLGHDRIKRZWKH0\64/VHUYHUZRUNVDWOHDVWIURPDXVHUPDQXDO
RUEHJLQQHU¦VJXLGH,W¦VEHWWHU\HWLI\RXKDYHUHDOH[SHULHQFHZLWKWKHVHUYHURUKDYH
DOUHDG\HQFRXQWHUHGSUREOHPVWKDWZHUHKDUGWRVROYH
ix
,GRQ¦WZDQWWRUHSHDWZKDWLVLQRWKHULQIRUPDWLRQVRXUFHVUDWKHU,ZDQWWRILOOWKRVH
JDSVWKDW,H[SODLQHGDWWKHEHJLQQLQJRIWKLV3UHIDFH6R\RX¦OOILQGJXLGDQFHLQWKLV
ERRNIRUIL[LQJDQDSSOLFDWLRQEXWQRWWKHGHWDLOVRIDSSOLFDWLRQDQGVHUYHUEHKDYLRU
)RUGHWDLOVFRQVXOWWKH0\64/5HIHUHQFH0DQXDO KWWSGHYP\VTOFRPGRFUHIPDQ
HQLQGH[KWPO
nrÿ- ,WLVYHU\LPSRUWDQWWRLGHQWLI\ZKDWWKHSUREOHPLV
)RUH[DPSOHZKHQVD\LQJWKDWD0\64/LQVWDOODWLRQLVVORZ\RXQHHG
WRLGHQWLI\ZKHUHLWLVVORZLVRQO\SDUWRIWKHDSSOLFDWLRQDIIHFWHGRU
GRDOOTXHULHVVHQWWRWKH0\64/VHUYHUUXQVORZO\",W¦VDOVRJRRGWR
NQRZZKHWKHUWKHVDPHLQVWDOODWLRQZDV£VORZ¤LQWKHSDVWDQGZKHWKHU
WKLVSUREOHPLVFRQVLVWHQWRUUHSHDWDEOHRQO\SHULRGLFDOO\
$QRWKHUH[DPSOHLVZURQJEHKDYLRU<RXQHHGWRNQRZZKDWEHKDYHG
ZURQJO\ZKDWUHVXOWV\RXKDYHDQGZKDW\RXH[SHFWHG
,KDYHEHHQYHU\GLVFLSOLQHGLQSUHVHQWLQJWURXEOHVKRRWLQJPHWKRGV0RVWSUREOHPV
FDQEHVROYHGLQGLIIHUHQWZD\VDQGWKHEHVWVROXWLRQGHSHQGVRQWKHDSSOLFDWLRQDQG
WKHXVHU¦VQHHGV,I,GHVFULEHGKRZWRJRRIILQHYHU\GLUHFWLRQWKLVERRNZRXOGEH
WLPHVELJJHUDQG\RXZRXOGPLVVWKHIL[WKDWZRUNVIRU\RX0\SXUSRVHLVWRSXW\RX
RQWKHULJKWSDWKIURPWKHVWDUWVRWKDW\RXFDQGHDOTXLFNO\ZLWKHDFKW\SHRISUREOHP
'HWDLOVDERXWIL[LQJWKHLVVXHFDQEHIRXQGLQRWKHULQIRUPDWLRQVRXUFHVPDQ\RIZKLFK
,FLWHDQGSRLQW\RXWRLQWKHFRXUVHRIRXUMRXUQH\
x | Preface
&KDSWHU<RX$UH1RW$ORQH&RQFXUUHQF\,VVXHVGHVFULEHVSUREOHPVWKDWFRPHXS
ZKHQ DSSOLFDWLRQV UXQ LQ PXOWLSOH WKUHDGV RU LQWHUIHUH ZLWK WUDQVDFWLRQV LQ RWKHU
DSSOLFDWLRQV
&KDSWHU (IIHFWV RI 6HUYHU 2SWLRQV FRQVLVWV RI WZR SDUWV 7KH ILUVW LV D JXLGH WR
GHEXJJLQJ DQG IL[LQJ D SUREOHP FDXVHG E\ D FRQILJXUDWLRQ RSWLRQ 7KH VHFRQG LV D
UHIHUHQFHWRLPSRUWDQWRSWLRQVDQGLVPHDQWWREHFRQVXOWHGDVQHHGHGLQVWHDGRIEHLQJ
UHDGVWUDLJKWWKURXJK7KHVHFRQGSDUWDOVRFRQWDLQVUHFRPPHQGDWLRQVRQKRZWRVROYH
SUREOHPVFDXVHGE\SDUWLFXODURSWLRQVDQGLQIRUPDWLRQDERXWKRZWRWHVWZKHWKHU\RX
KDYHVROYHGWKHSUREOHP,WULHGWRLQFOXGHWHFKQLTXHVQRWGHVFULEHGLQRWKHUUHIHUHQFHV
DQGWRFRQVROLGDWHLQRQHSODFHDOOWKHFRPPRQSUREOHPVZLWKFRQILJXUDWLRQRSWLRQV
,DOVRJURXSHGWKHPE\WKHNLQGRISUREOHPVVR\RXFDQHDVLO\VHDUFKIRUWKHFDXVHRI
\RXUV\PSWRP
&KDSWHU0\64/¦V(QYLURQPHQWLVDERXWKDUGZDUHDQGRWKHUDVSHFWVRIWKHHQYL
URQPHQW LQ ZKLFK WKH VHUYHU UXQV 7KLV LV D KXJH WRSLF EXW PRVW RI WKH QHFHVVDU\
LQIRUPDWLRQLVVSHFLILFWRRSHUDWLQJV\VWHPVDQGRIWHQFDQEHVROYHGRQO\E\WKHV\VWHP
DGPLQLVWUDWRU6R,OLVWVRPHSRLQWVD0\64/GDWDEDVHDGPLQLVWUDWRU '%$ PXVWORRN
LQWR$IWHU\RXUHDGWKLVVKRUWFKDSWHU\RXZLOONQRZZKHQWREODPH\RXUHQYLURQPHQW
DQGKRZWRH[SODLQWKHSUREOHPWR\RXUV\VWHPDGPLQLVWUDWRU
&KDSWHU7URXEOHVKRRWLQJ5HSOLFDWLRQLVDERXWSUREOHPVWKDWFRPHXSVSHFLILFDOO\LQ
UHSOLFDWLRQVFHQDULRV,DFWXDOO\GLVFXVVUHSOLFDWLRQLVVXHVWKURXJKRXWWKLVERRNEXW
RWKHUFKDSWHUVGLVFXVVWKHUHODWLRQVKLSEHWZHHQUHSOLFDWLRQDQGRWKHUSUREOHPV7KLV
FKDSWHULVIRULVVXHVWKDWDUHVSHFLILFWRUHSOLFDWLRQ
&KDSWHU7URXEOHVKRRWLQJ7HFKQLTXHVDQG7RROVGHVFULEHVH[WUDWHFKQLTXHVDQGWRROV
WKDW,VNLSSHGRYHURUIDLOHGWRGLVFXVVLQGHWDLOGXULQJHDUOLHUJXLGHOLQHVWRWURXEOH
VKRRWLQJ7KHSXUSRVHRIWKLVFKDSWHULVWRFORVHDOOWKHJDSVOHIWLQHDUOLHUFKDSWHUV<RX
FDQXVHLWDVDUHIHUHQFHLI\RXOLNH,VKRZSULQFLSOHVILUVWWKHQPHQWLRQDYDLODEOHWRROV
,FDQ¦WZULWHDERXWWRROV,GRQ¦WZRUNZLWKVR,H[SODLQWKHRQHV,SHUVRQDOO\XVHHYHU\
GD\ZKLFKFRQVHTXHQWO\OHDGVWRDIRFXVRQWRROVZULWWHQE\WKH0\64/7HDPDQG
QRZEHORQJLQJWR2UDFOH,GRLQFOXGHWKLUGSDUW\WRROVWKDWKHOSPHGHDOZLWKEXJV
DQGVXSSRUWWLFNHWVHYHU\GD\
&KDSWHU%HVW3UDFWLFHVGHVFULEHVJRRGKDELWVDQGEHKDYLRUVIRUVDIHDQGHIIHFWLYH
WURXEOHVKRRWLQJ ,W GRHV QRW GHVFULEH DOO WKH EHVW SUDFWLFHV IRU GHVLJQLQJ 0\64/
DSSOLFDWLRQVZKLFKDUHFRYHUHGLQPDQ\RWKHUVRXUFHVEXWLQVWHDGFRQFHQWUDWHVRQ
SUDFWLFHVWKDWKHOSZLWKSUREOHPKXQWLQJ¢RUKHOSSUHYHQWSUREOHPV
7KH$SSHQGL[,QIRUPDWLRQ5HVRXUFHVFRQWDLQVDOLVWRILQIRUPDWLRQVRXUFHVWKDW,XVH
LQP\GDLO\MREDQGWKDWFDQKHOSLQWURXEOHVKRRWLQJVLWXDWLRQV2IFRXUVHVRPHRI
WKHPLQIOXHQFHGWKLVERRNDQG,UHIHUWRWKHPZKHUHDSSURSULDWH
Preface | xi
Some Choices Made in This Book
,QWKHSDVWIHZ\HDUVPDQ\IRUNVRI0\64/ZHUHERUQ7KHPRVWLPSRUWDQWDUH3HUFRQD
VHUYHUDQG0DULD'%,VNLSSHGWKHPFRPSOHWHO\LQWKLVERRNEHFDXVH,ZRUNPRVWO\
ZLWK0\64/DQGVLPSO\FDQQRWGHVFULEHVHUYHUV,GRQ¦WZRUNZLWKGDLO\+RZHYHU
EHFDXVHWKH\DUHIRUNV\RXFDQXVHPRVWRIWKHPHWKRGVGHVFULEHGKHUH2QO\LI\RX
DUHGHDOLQJZLWKDSDUWLFXODUIHDWXUHDGGHGLQWKHIRUNZLOO\RXQHHGLQIRUPDWLRQVSHFLILF
WRWKDWSURGXFW
7RFRQVHUYHVSDFHDQGDYRLGLQWURGXFLQJDZKROHQHZGRPDLQRINQRZOHGJHZLWKDORW
RILWVRZQFRQFHUQV,OHIWRXW0\64/&OXVWHUSUREOHPV,I\RXXVH0\64/&OXVWHUDQG
UXQLQWRDQ64/RUDSSOLFDWLRQLVVXH\RXFDQWURXEOHVKRRWLWLQPXFKWKHVDPHZD\DV
DQ\RWKHUVWRUDJHHQJLQHLVVXH7KHUHIRUHWKLVERRNLVDSSOLFDEOHWRVXFKLVVXHVRQ
FOXVWHUV%XWLVVXHVWKDWDUHVSHFLILFWR0\64/&OXVWHUQHHGVHSDUDWH0\64/&OXVWHU
NQRZOHGJHWKDW,GRQ¦WGHVFULEHKHUH
%XW,GRGHYRWHDORWRIVSDFHWR0\,6$0DQG,QQR'%VSHFLILFSUREOHPV7KLVZDV
GRQHEHFDXVHWKH\DUHE\IDUWKHPRVWSRSXODUVWRUDJHHQJLQHVDQGWKHLULQVWDOODWLRQ
EDVH LV KXJH %RWK DOVR ZHUH DQG DUH GHIDXOW VWRUDJH HQJLQHV 0\,6$0 EHIRUH
YHUVLRQDQG,QQR'%VLQFHYHUVLRQ
$IHZZRUGVDERXWH[DPSOHV7KH\ZHUHDOOFUHDWHGHLWKHUVSHFLDOO\IRUWKLVERRNRUIRU
FRQIHUHQFHVZKHUH,KDYHVSRNHQDERXWWURXEOHVKRRWLQJ$OWKRXJKVRPHRIWKHH[DP
SOHVDUHEDVHGRQUHDOVXSSRUWFDVHVDQGEXJUHSRUWVDOOWKHFRGHLVQHZDQGFDQQRWEH
DVVRFLDWHGZLWKDQ\FRQILGHQWLDOGDWD,QDIHZSODFHV,GHVFULEHFXVWRPHU£WLFNHWV¤
7KHVHDUHQRWUHDOHLWKHU$WWKHVDPHWLPHWKHSUREOHPVGHVFULEHGKHUHDUHUHDODQG
KDYHEHHQVHHQPDQ\WLPHVMXVWZLWKGLIIHUHQWFRGHQDPHVDQGFLUFXPVWDQFHV
,WULHGWRNHHSDOOH[DPSOHVDVVLPSOHXQGHUVWDQGDEOHDQGXQLYHUVDODVSRVVLEOH7KHUH
IRUH,XVHWKH0\64/FRPPDQGOLQHFOLHQWLQPRVWRIWKHH[DPSOHV<RXDOZD\VKDYH
WKLVFOLHQWLQWKH0\64/LQVWDOODWLRQ
7KLVGHFLVLRQDOVRH[SODLQVZK\,GRQ¦WGHVFULEHDOOFRPSOLFDWLRQVVSHFLILFWRSDUWLFXODU
NLQGVRILQVWDOODWLRQVLWLVMXVWLPSRVVLEOHWRFRYHUWKHPDOOLQVLQJOHERRN,QVWHDG,
WULHGWRJLYHVWDUWLQJSRLQWVWKDW\RXFDQH[WHQG
,KDYHGHFLGHGWRXVHWKH&$3,WRLOOXVWUDWHWKHIXQFWLRQVGLVFXVVHGLQWKLVERRN7KH
FKRLFHZDVQ¦WHDV\EHFDXVHWKHUHDUHDORWRISURJUDPPLQJ$3,VIRU0\64/LQYDULRXV
ODQJXDJHV,FRXOGQ¦WSRVVLEO\FRYHUWKHPDOODQGGLGQ¦WZDQWWRJXHVVZKLFKRQHV
ZRXOGEHSRSXODU,UHDOL]HGWKDWPDQ\RIWKHPORRNOLNHWKH&$3, PDQ\DUHHYHQ
ZUDSSHUVDURXQGWKH&$3, VR,GHFLGHGWKDWZRXOGEHWKHEHVWFKRLFH(YHQLI\RX
DUHXVLQJDQ$3,ZLWKDYHU\GLIIHUHQWV\QWD[VXFKDV2'%&WKLVVHFWLRQVWLOOFDQEH
XVHIXOEHFDXVH\RXZLOONQRZZKDWWRORRNIRU
$IHZH[DPSOHVXVH3+3,GLGVREHFDXVH,XVH3+3DQGWKHUHIRUHFRXOGVKRZUHDO
H[DPSOHVEDVHGRQP\RZQFRGH5HDOH[DPSOHVDUHDOZD\VJRRGWRVKRZEHFDXVHWKH\
UHIOHFWUHDOOLIHSUREOHPVWKDWUHDGHUVDUHOLNHO\WRHQFRXQWHU,QDGGLWLRQWKH0\64/
xii | Preface
$3,LQ3+3LVEDVHGRQWKH&$3,DQGXVHVWKHYHU\VDPHQDPHVVRUHDGHUVVKRXOGEH
DEOHWRFRPSDUHLWHDVLO\WR&IXQFWLRQVGLVFXVVHGLQWKLVERRN
,RPLWWHG-'%&DQG2'%&H[DPSOHVEHFDXVHWKHVH$3,VDUHYHU\VSHFLILF$WWKHVDPH
WLPHWKHLUGHEXJJLQJWHFKQLTXHVDUHYHU\VLPLODULIQRWDOZD\VWKHVDPH0RVWO\WKH
V\QWD[ LV GLIIHUHQW , GHFLGHG WKDW DGGLQJ GHWDLOV DERXW WKHVH WZR FRQQHFWRUV PLJKW
FRQIXVHUHDGHUVZLWKRXWRIIHULQJDQ\QHZLQIRUPDWLRQDERXWWURXEOHVKRRWLQJ
..
0..4ÿ
4
7KLVLFRQVLJQLILHVDWLSVXJJHVWLRQRUJHQHUDOQRWH
m
UP,
7KLVLFRQLQGLFDWHVDZDUQLQJRUFDXWLRQ
■ 7KLVVTXDUHLQGLFDWHVDOHVVRQZHMXVWOHDUQHG
mysqlndXVHVLWVRZQFOLHQWSURWRFROLPSOHPHQWDWLRQEXWVWLOOQDPHVIXQFWLRQVLQWKHVDPHVW\OHDVWKH
&$3,
<RXFDQILQGGHWDLOVVSHFLILFWR&RQQHFWRU- -'%& DWKWWSGHYP\VTOFRPGRFUHIPDQHQFRQQHFWRU
MUHIHUHQFHKWPO DQG WR &RQQHFWRU2'%& DW KWWSGHYP\VTOFRPGRFUHIPDQHQFRQQHFWRURGEF
UHIHUHQFHKWPO
Preface | xiii
Using Code Examples
7KLVERRNLVKHUHWRKHOS\RXJHW\RXUMREGRQH,QJHQHUDO\RXPD\XVHWKHFRGHLQ
WKLVERRNLQ\RXUSURJUDPVDQGGRFXPHQWDWLRQ<RXGRQRWQHHGWRFRQWDFWXVIRU
SHUPLVVLRQXQOHVV\RX¦UHUHSURGXFLQJDVLJQLILFDQWSRUWLRQRIWKHFRGH)RUH[DPSOH
ZULWLQJDSURJUDPWKDWXVHVVHYHUDOFKXQNVRIFRGHIURPWKLVERRNGRHVQRWUHTXLUH
SHUPLVVLRQ6HOOLQJRUGLVWULEXWLQJD&'520RIH[DPSOHVIURP2¦5HLOO\ERRNVGRHV
UHTXLUHSHUPLVVLRQ $QVZHULQJ D TXHVWLRQ E\FLWLQJWKLVERRNDQGTXRWLQJH[DPSOH
FRGHGRHVQRWUHTXLUHSHUPLVVLRQ,QFRUSRUDWLQJDVLJQLILFDQWDPRXQWRIH[DPSOHFRGH
IURPWKLVERRNLQWR\RXUSURGXFW¦VGRFXPHQWDWLRQGRHVUHTXLUHSHUPLVVLRQ
:HDSSUHFLDWHEXWGRQRWUHTXLUHDWWULEXWLRQ$QDWWULEXWLRQXVXDOO\LQFOXGHVWKHWLWOH
DXWKRUSXEOLVKHUDQG,6%1)RUH[DPSOH£0\64/7URXEOHVKRRWLQJE\6YHWD6PLUQRYD
2¦5HLOO\ &RS\ULJKW6YHWD6PLUQRYD¤
,I\RXIHHO\RXUXVHRIFRGHH[DPSOHVIDOOVRXWVLGHIDLUXVHRUWKHSHUPLVVLRQJLYHQKHUH
IHHOIUHHWRFRQWDFWXVDWSHUPLVVLRQV#RUHLOO\FRP
How to Contact Us
3OHDVHDGGUHVVFRPPHQWVDQGTXHVWLRQVFRQFHUQLQJWKLVERRNWRWKHSXEOLVKHU
2¦5HLOO\0HGLD,QF
*UDYHQVWHLQ+LJKZD\1RUWK
6HEDVWRSRO&$
LQWKH8QLWHG6WDWHVRU&DQDGD
LQWHUQDWLRQDORUORFDO
ID[
xiv | Preface
:HKDYHDZHESDJHIRUWKLVERRNZKHUHZHOLVWHUUDWDH[DPSOHVDQGDQ\DGGLWLRQDO
LQIRUPDWLRQ<RXFDQDFFHVVWKLVSDJHDW
KWWSZZZRUHLOO\FRPFDWDORJ
7RFRPPHQWRUDVNWHFKQLFDOTXHVWLRQVDERXWWKLVERRNVHQGHPDLOWR
ERRNTXHVWLRQV#RUHLOO\FRP
)RUPRUHLQIRUPDWLRQDERXWRXUERRNVFRXUVHVFRQIHUHQFHVDQGQHZVVHHRXUZHEVLWH
DWKWWSZZZRUHLOO\FRP
)LQGXVRQ)DFHERRNKWWSIDFHERRNFRPRUHLOO\
)ROORZXVRQ7ZLWWHUKWWSWZLWWHUFRPRUHLOO\PHGLD
:DWFKXVRQ<RX7XEHKWWSZZZ\RXWXEHFRPRUHLOO\PHGLD
Acknowledgments
,ZDQWWRVD\WKDQN\RXWRWKHSHRSOHZLWKRXWZKRVHKHOSWKLVERRNFRXOGQ¦WKDSSHQ
)RUDVWDUWWKLVLQFOXGHVP\HGLWRU$QG\2UDPZKRGLGDJUHDWMREPDNLQJP\(QJOLVK
UHDGDEOHDQGZKRVKRZHGPHJDSVDQGSODFHVZKHUH,KDGQRWGHVFULEHGLQIRUPDWLRQ
LQHQRXJKGHWDLO+HDOVRJDYHPHLQVLJKWLQWRKRZSUHSDUHGP\UHDGHUVZRXOGEH
SURPSWLQJPHWRDGGH[SODQDWLRQVIRUEHJLQQHUVDQGWRUHPRYHWULYLDOWKLQJVNQRZQ
E\HYHU\RQH
,DOVRZDQWWRWKDQNWKHZKROH0\64/6XSSRUW7HDP7KHVHIRONVVKDUHWKHLUH[SHUWLVH
DQGVXSSRUWZLWKHYHU\PHPEHURIWKHWHDPDQG,OHDUQHGDORWIURPWKHP,ZRQ¦WSXW
QDPHVKHUHEHFDXVH,ZDQWWRVD\£WKDQN\RX¤WRDOORIWKHSHRSOHZLWKZKRP,¦YH
ZRUNHGVLQFHMRLQLQJLQHYHQWKRVHZKRKDYHOHIWDQGPRYHGWRVHUYHUGHYHORS
PHQWRUDQRWKHUFRPSDQ\
7KDQNVWR&KDUOHV%HOOZKRKHOSHGPHWRVWDUWWKLVERRN+HDOVRGLGDUHYLHZRIWKH
ERRNDQGVXJJHVWHGDORWRILPSURYHPHQWV&KDUOHVZRUNVLQWKH0\64/5HSOLFDWLRQ
DQG%DFNXS7HDPDW2UDFOHDQGLVWKHDXWKRURIWZRERRNVDERXW0\64/7KHUHIRUH
KLVVXJJHVWLRQVERWKIRUFRQWHQWDQGVW\OHZHUHYHU\KHOSIXO
,ZRXOGDOVROLNHWRWKDQNWKHSHRSOHZKRUHYLHZHGWKHERRN
6KDQH%HVWHUP\FROOHDJXHIURPWKH0\64/6XSSRUW*URXSZKRUHYLHZHGWKH
SDUWGHYRWHGWRKLV*\SV\SURJUDPDQGVXJJHVWHGKRZWRLPSURYHWKHH[DPSOH
$OH[DQGHU 6DOOH .HUHPHGDUVNLZKRUHYLHZHGWKHZKROHERRNDQGVHQWPHDORW
RIJUHDWVXJJHVWLRQV6DOOHKDVSURYLGHG0\64/VXSSRUWVLQFHLWVYHU\HDUO\GD\V
VWDUWLQJLQWKH0\64/6XSSRUW7HDPDQGQRZDW6N\64/DV'LUHFWRURI(0($
6XSSRUW+LVNQRZOHGJHRIFRPPRQXVHUPLVXQGHUVWDQGLQJVKHOSHGPHWRILQG
SODFHVZKHUH,H[SODLQHGWKLQJVLQWRROLWWOHGHWDLOVRWKDWDWURXEOHVKRRWLQJVLWXD
WLRQFRXOGEHUHDGDVDEHVWSUDFWLFHZKHQDFWXDOO\LWLVQRW
Preface | xv
7RQFL *UJLQ ZKR UHYLHZHG WKH SDUWV DERXW 0\64/ &RQQHFWRUV DQG VXJJHVWHG
DGGLWLRQVH[SODLQLQJWKHLUEHKDYLRU7RQFLXVHGWRZRUNLQWKHVDPHJURXSDVPH
DQGQRZZRUNVLQWKH0\64/&RQQHFWRUV7HDP+HLVWKHILUVWSHUVRQ,ZRXOGDVN
DERXWDQ\WKLQJUHODWHGWR0\64/&RQQHFWRUV
6LQLVD0LOLYRMHYLFZKRUHYLHZHG&KDSWHUVDQGDQGSDUWVDERXWWKH0\,6$0
FKHFNDQGUHSDLULQJWRROV6LQLVDLVDQRWKHUUHYLHZHUZKRKDVZRUNHGLQ0\64/
6XSSRUWVLQFHWKHYHU\EHJLQQLQJ+HZDVHPSOR\HHLQ0\64/DQGVWLOOZRUNV
LQWKH0\64/6XSSRUW7HDPDW2UDFOH+LVKXJHH[SHULHQFHLVIDQWDVWLFDQGRQH
PLJKWHYHQWKLQNKHNQRZVHYHU\OLWWOHGHWDLODERXWWKH0\64/VHUYHU6LQLVDJDYH
PHLQVLJKWVRQVRPHRIWKHWRSLFV,GLVFXVVDQGVXJJHVWHGVKRUWEXWYHU\VLJQLILFDQW
LPSURYHPHQWV
9DOHUL\.UDYFKXNZKRUHYLHZHG&KDSWHUVDQGDQGWKHVHFWLRQ£,QQR'%0RQ
LWRUV¤RQSDJH+HDOVRZRUNVLQWKH0\64/6XSSRUW7HDP9DOHUL\IRXQG
PDQ\GHILFLHQFLHVLQWKHFKDSWHUVKHUHYLHZHG+LVFULWLFLVPIRUFHGPHWRLPSURYH
WKHVHFKDSWHUVDOWKRXJKWKHUHLVDOZD\VURRPIRUGHYHORSPHQW
0DUN&DOODJKDQZKRUXQVGDWDEDVHVHUYHUVDW)DFHERRNUHYLHZHGWKHZKROHERRN
0DUNVXJJHVWHGWKDW,SXWPRUHH[DPSOHVDQGIXUWKHUH[SODQDWLRQLQSODFHVWKDW
ZHUHQRWFOHDU+HDOVRVXJJHVWHGH[DPSOHVIRU&KDSWHUDQGSRLQWHGPHWRSODFHV
ZKHUH P\ VXJJHVWLRQV FDQ EH ZURQJ IRU FHUWDLQ LQVWDOODWLRQV SURPSWLQJ PH WR
H[SODLQERWKVLWXDWLRQVZKHQWKHRULJLQDOVXJJHVWLRQVILWDQGZKHQWKH\GRQ¦W
7KDQNVWR0DUN,DGGHGPRUHGHWDLOVDERXWWKHVHDUJXDEOHWRSLFV
$OH[H\.RS\WRYDOVRUHYLHZHGWKHZKROHERRN+HLVWKHDXWKRURIWKH6\V%HQFK
XWLOLW\ ZKLFK,GHVFULEHLQWKLVERRN ZRUNHGLQ0\64/'HYHORSPHQWDQGQRZ
ZRUNVDW3HUFRQD$OH[H\VHQWPHLPSURYHPHQWVIRUWKH6\V%HQFKSDUW
'LPLWUL GLP .UDYWFKXN3ULQFLSDO%HQFKPDUN(QJLQHHUDW2UDFOHUHYLHZHGWKH
ZKROHERRNDVZHOO+HLVDOVRWKHDXWKRURIWKHGLPB67$7PRQLWRULQJVROXWLRQ,
GHVFULEHLQWKLVERRNWKHGEB675(66GDWDEDVHEHQFKPDUNLQJNLWDQGDIDPRXV
EORJZKHUHKHSRVWVDUWLFOHVDERXW,QQR'%SHUIRUPDQFHDQG0\64/EHQFKPDUNV
+HVXJJHVWHGVHYHUDOLPSURYHPHQWVWRVHFWLRQVZKHUH,GHVFULEH,QQR'%3HUIRU
PDQFH6FKHPDDQGKDUGZDUHLPSDFWV
)LQDOO\WKDQNVWRP\IDPLO\
0\PRWKHU<XOLD,YDQRYQD,YDQRYDZKRVKRZHGPHKRZIXQHQJLQHHULQJFDQEH
0\ SDUHQWVLQODZ 9DOHQWLQD $OHNVHHYQD /DVXQRYD DQG 1LNROD\ 1LNROD\HYLFK
/DVXQRYZKRDOZD\VKHOSHGXVZKHQZHQHHGHGLW
$QGODVWEXWQRWOHDVWP\KXVEDQG6HUJH\/DVXQRYZKRVXSSRUWHGPHLQDOOP\
LQLWLDWLYHV
xvi | Preface
CHAPTER 1
Basics
:KHQWURXEOHVKRRWLQJ\RXFDQJHQHUDOO\VDYHWLPHE\VWDUWLQJZLWKWKHVLPSOHVWSRV
VLEOHFDXVHVDQGZRUNLQJ\RXUZD\WRPRUHFRPSOLFDWHGRQHV,ZRUNGR]HQVRIWURXEOH
WLFNHWVDW0\64/6XSSRUWHYHU\PRQWK)RUPRVWRIWKHPZHVWDUWIURPWULYLDOUHTXHVWV
IRULQIRUPDWLRQDQGWKHILQDOUHVROXWLRQPD\¢DVZH¦OOVHHLQVRPHH[DPSOHV¢EHWULYLDO
DVZHOOEXWVRPHWLPHVZHKDYHTXLWHDQDGYHQWXUHLQEHWZHHQ6RLWDOZD\VSD\VWR
VWDUWZLWKWKHEDVLFV
7KHW\SLFDOV\PSWRPVRIDEDVLFSUREOHPDUHUXQQLQJDTXHU\DQGJHWWLQJXQH[SHFWHG
UHVXOWV7KHSUREOHPFRXOGPDQLIHVWLWVHOIDVUHVXOWVWKDWDUHFOHDUO\ZURQJJHWWLQJQR
UHVXOWVEDFNZKHQ\RXNQRZWKHUHDUHPDWFKLQJURZVRURGGEHKDYLRULQWKHDSSOLFD
WLRQ,QVKRUWWKLVVHFWLRQGHSHQGVRQ\RXKDYLQJDJRRGLGHDRIZKDW\RXUDSSOLFDWLRQ
VKRXOGEHGRLQJDQGZKDWWKHTXHU\UHVXOWVVKRXOGORRNOLNH&DVHVLQZKLFKWKHVRXUFH
RIZURQJEHKDYLRULVQRWVRFOHDUZLOOEHGLVFXVVHGODWHULQWKLVERRN
:HZLOODOZD\VUHWXUQWRWKHVHEDVLFVHYHQZLWKWKHWULFNLHVWHUURUVRULQVLWXDWLRQV
ZKHQ\RXZRXOGQRWNQRZZKDWFDXVHGWKHZURQJEHKDYLRULQ\RXUDSSOLFDWLRQ7KLV
SURFHVVZKLFKZH¦OOGLVFXVVLQGHSWKLQ£/RFDOL]LQJWKH3UREOHP 0LQLPL]LQJWKH7HVW
&DVH ¤RQSDJHFDQDOVREHFDOOHGFUHDWLQJDPLQLPDOWHVWFDVH
Incorrect Syntax
7KLVVRXQGVDEVROXWHO\WULYLDOEXWVWLOOFDQEHWULFN\WRILQG,UHFRPPHQG\RXDSSURDFK
WKHSRVVLELOLW\RILQFRUUHFW64/V\QWD[YHU\ULJRURXVO\OLNHDQ\RWKHUSRVVLEOHSUREOHP
$QHUURUVXFKDVWKHIROORZLQJLVHDV\WRVHH
SELECT * FRO t1 WHERE f1 IN (1,2,1);
,QWKLVFDVHLWLVFOHDUWKDWWKHXVHUMXVWIRUJRWWRW\SHDQ£P¤DQGWKHHUURUPHVVDJH
FOHDUO\UHSRUWVWKLV ,KDYHEURNHQWKHRXWSXWOLQHVWRILWWKHSDJH
mysql> SELECT * FRO t1 WHERE f1 IN (1,2,1);
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near 'FRO
t1 WHERE f1 IN (1,2,1)' at line 1
1
8QIRUWXQDWHO\QRWDOOV\QWD[HUURUVDUHVRWULYLDO,RQFHZRUNHGRQDWURXEOHWLFNHW
FRQFHUQLQJDTXHU\OLNHWKLV
SELECT id FROM t1 WHERE accessible=1;
7KHSUREOHPZDVDPLJUDWLRQLVVXHWKHTXHU\ZRUNHGILQHLQYHUVLRQEXWVWRSSHG
ZRUNLQJLQYHUVLRQ7KHSUREOHPZDVWKDWLQYHUVLRQ£DFFHVVLEOH¤LVDUHVHUYHG
ZRUG:HDGGHGTXRWHV WKHVHFDQEHEDFNWLFNVRUGRXEOHTXRWHVGHSHQGLQJRQ\RXU
64/PRGH DQGWKHTXHU\VWDUWHGZRUNLQJDJDLQ
SELECT `id` FROM `t1` WHERE `accessible`=1;
7KH DFWXDO TXHU\ ORRNHG D ORW PRUH FRPSOLFDWHG ZLWK D ODUJH JOIN DQG D FRPSOH[
WHEREFRQGLWLRQ6RWKHVLPSOHHUURUZDVKDUGWRSLFNRXWDPRQJDOOWKHGLVWUDFWLRQV
2XUILUVWWDVNZDVWRUHGXFHWKHFRPSOH[TXHU\WRWKHVLPSOHRQHOLQH SELECTDVMXVW
VKRZQZKLFKLVDQH[DPSOHRIDPLQLPDOWHVWFDVH2QFHZHUHDOL]HGWKDWWKHRQHOLQHU
KDGWKHVDPHEXJDVWKHELJRULJLQDOTXHU\ZHTXLFNO\UHDOL]HGWKDWWKHSURJUDPPHU
KDGVLPSO\VWXPEOHGRYHUDUHVHUYHGZRUG
■ 7KHILUVWOHVVRQLVWRFKHFN\RXUTXHU\IRUV\QWD[HUURUVDVWKHILUVWWURXEOHVKRRWLQJ
VWHS
%XWZKDWGR\RXGRLI\RXGRQ¦WNQRZWKHTXHU\")RUH[DPSOHVXSSRVHWKHTXHU\ZDV
EXLOWE\DQDSSOLFDWLRQ(YHQPRUHIXQLVLQVWRUHZKHQLW¦VDWKLUGSDUW\OLEUDU\WKDW
G\QDPLFDOO\EXLOGVTXHULHV
/HW¦VFRQVLGHUWKLV3+3FRGH
$query = 'SELECT * FROM t4 WHERE f1 IN(';
for ($i = 1; $i < 101; $i ++)
$query .= "'row$i,";
$query = rtrim($query, ',');
$query .= ')';
$result = mysql_query($query);
/RRNLQJDWWKHVFULSWLWLVQRWHDV\WRVHHZKHUHWKHHUURULV)RUWXQDWHO\ZHFDQDOWHU
WKHFRGHWRSULQWWKHTXHU\XVLQJDQRXWSXWIXQFWLRQ,QWKHFDVHRI3+3WKLVFDQEH
WKHechoRSHUDWRU6RZHPRGLI\WKHFRGHDVIROORZV
…
echo $query;
//$result = mysql_query($query);
2QFHWKHSURJUDPVKRZVXVWKHDFWXDOTXHU\LW¦VWU\LQJWRVXEPLWWKHSUREOHPMXPSV
ULJKWRXW
$ php ex1.php
SELECT * FROM t4 WHERE f1 IN('row1,'row2,'row3,'row4,'row5,'row6,'row7,'row8,
'row9,'row10,'row11, 'row12,'row13,'row14,'row15,'row16,'row17,'row18,'row19,'row20)
,I\RXVWLOOFDQ¦WILQGWKHHUURUWU\UXQQLQJWKLVTXHU\LQWKH0\64/FRPPDQGOLQH
FOLHQW
2 | Chapter 1:ಗBasics
mysql> SELECT * FROM t4 WHERE f1 IN('row1,'row2,'row3,'row4,'row5,'row6,'row7,'row8,
'row9,'row10,'row11,'row12,'row13,'row14,'row15,'row16,'row17,'row18,'row19,'row20);
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near 'row2,
'row3,'row4,'row5,'row6,'row7,'row8,'row9,'row10,'row11, 'row12,'row13,'row' at
line 1
7KHSUREOHPLVWKDWWKHFORVLQJDSRVWURSKHLVPLVVLQJIURPHDFKURZ*RLQJEDFNWR
WKH3+3FRGH,KDYHWRFKDQJH
$query .= "'row$i,";
WRWKHIROORZLQJ
$query .= "'row$i',";
■ $QLPSRUWDQWGHEXJJLQJWHFKQLTXHWKHUHIRUHFRQVLVWVRIWKLVDOZD\VWU\WRYLHZ
WKHTXHU\H[DFWO\DVWKH0\64/VHUYHUUHFHLYHVLW'RQ¦WGHEXJRQO\DSSOLFDWLRQ
FRGHJHWWKHTXHU\
8QIRUWXQDWHO\\RXFDQ¦WDOZD\VXVHRXWSXWIXQFWLRQV2QHSRVVLEOHUHDVRQZKLFK,
PHQWLRQHG EHIRUH LV WKDW \RX¦UH XVLQJ D WKLUGSDUW\ OLEUDU\ ZULWWHQ LQ D FRPSLOHG
ODQJXDJHWRJHQHUDWHWKH64/<RXUDSSOLFDWLRQPLJKWDOVREHXVLQJKLJKOHYHODEVWUDF
WLRQVVXFKDVOLEUDULHVWKDWRIIHUD&58' FUHDWHUHDGXSGDWHGHOHWH LQWHUIDFH2U
\RXPLJKWEHLQDSURGXFWLRQHQYLURQPHQWZKHUH\RXGRQ¦WZDQWXVHUVWREHDEOHWR
VHHWKHTXHU\ZKLOH\RXDUHWHVWLQJSDUWLFXODUTXHULHVZLWKVSHFLILFSDUDPHWHUV,QVXFK
FDVHVFKHFNWKH0\64/JHQHUDOTXHU\ORJ/HW¦VVHHKRZLWZRUNVXVLQJDQHZH[DPSOH
7KLVLVWKH3+3DSSOLFDWLRQZKHUHWKHSUREOHPH[LVWV
private function create_query($columns, $table)
{
$query = "insert into $table set ";
foreach ($columns as $column) {
$query .= $column['column_name'] . '=';
$query .= $this->generate_for($column);
$query .= ', ';
}
return rtrim($query, ',') . ';';
}
Incorrect Syntax | 3
7KLVFRGHXSGDWHVDWDEOHGHILQHGLQ([DPSOH
([DPSOH6DPSOHWDEOHRIFRPPRQWURXEOHVKRRWLQJVLWXDWLRQV
CREATE TABLE items(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
short_description VARCHAR(255),
description TEXT,
example TEXT,
explanation TEXT,
additional TEXT
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
1RZLVWLPHWRVWDUWXVLQJWKHJHQHUDOTXHU\ORJ7KLVORJFRQWDLQVHYHU\VLQJOHTXHU\
WKH0\64/VHUYHUUHFHLYHV0DQ\SURGXFWLRQDSSOLFDWLRQVGRQ¦WZDQWWRXVHLWRQD
GD\WRGD\EDVLVEHFDXVHLWJURZVH[WUHPHO\IDVWGXULQJDKLJKORDGDQGZULWLQJWRLW
FDQWDNHXS0\64/VHUYHUUHVRXUFHVWKDWDUHQHHGHGIRUPRUHLPSRUWDQWSXUSRVHV
6WDUWLQJZLWKYHUVLRQ\RXFDQWXUQWKHJHQHUDOTXHU\ORJRQWHPSRUDULO\WRUHFRUG
MXVWWKHTXHU\\RXQHHG
mysql> SET GLOBAL general_log='on';
Query OK, 0 rows affected (0.00 sec)
<RXFDQDOVRORJLQWRDWDEOHZKLFKOHWV\RXHDVLO\VRUWORJILOHHQWULHVEHFDXVH\RXFDQ
TXHU\DORJWDEOHOLNHDQ\RWKHU0\64/WDEOH
mysql> SET GLOBAL log_output='table';
Query OK, 0 rows affected (0.00 sec)
1RZOHW¦VUXQWKHDSSOLFDWLRQ$IWHUDQLWHUDWLRQWKDWH[HFXWHVWKHSUREOHPFRGHTXHU\
WKHWDEOHFRQWDLQLQJWKHJHQHUDOORJWRILQGWKHSUREOHPTXHU\
mysql> SELECT * FROM mysql.general_log\G
*************************** 1. row ***************************
event_time: 2011-07-13 02:54:37
user_host: root[root] @ localhost []
thread_id: 27515
server_id: 60
command_type: Connect
argument: root@localhost on collaborate2011
*************************** 2. row ***************************
event_time: 2011-07-13 02:54:37
user_host: root[root] @ localhost []
thread_id: 27515
server_id: 60
command_type: Query
argument: INSERT INTO items SET id=1908908263,
short_description='8786db20e5ada6cece1306d44436104c',
description='fc84e1dc075bca3fce13a95c41409764',
example='e4e385c3952c1b5d880078277c711c41',
explanation='ba0afe3fb0e7f5df1f2ed3f2303072fb',
additional='2208b81f320e0d704c11f167b597be85',
*************************** 3. row ***************************
event_time: 2011-07-13 02:54:37
user_host: root[root] @ localhost []
4 | Chapter 1:ಗBasics
thread_id: 27515
server_id: 60
command_type: Quit
argument:
:HDUHLQWHUHVWHGLQWKHVHFRQGURZDQGTXHU\
INSERT INTO items SET id=1908908263,
short_description='8786db20e5ada6cece1306d44436104c',
description='fc84e1dc075bca3fce13a95c41409764',
example='e4e385c3952c1b5d880078277c711c41',
explanation='ba0afe3fb0e7f5df1f2ed3f2303072fb',
additional='2208b81f320e0d704c11f167b597be85',
7KHHUURUDJDLQLVWULYLDODVXSHUIOXRXVFRPPDDWWKHHQGRIWKHTXHU\7KHSUREOHP
ZDVJHQHUDWHGLQWKLVSDUWRIWKH3+3FRGH
$query .= ', ';
}
return rtrim($query, ',') . ';';
7KH rtrimIXQFWLRQZRXOGZRUNLIWKHVWULQJDFWXDOO\HQGHGZLWKDFRPPDEHFDXVHLW
FRXOGUHPRYHWKHWUDLOLQJFRPPD%XWWKHOLQHDFWXDOO\HQGVZLWKDVSDFHFKDUDFWHU6R
rtrimGRHVQRWUHPRYHDQ\WKLQJ
1RZWKDWZHKDYHWKHTXHU\WKDWFDXVHGWKHHUURULQRXUDSSOLFDWLRQZHFDQWXUQRII
WKHJHQHUDOTXHU\ORJ
mysql> SET GLOBAL general_log='off';
Query OK, 0 rows affected (0.08 sec)
,QWKLVVHFWLRQZHOHDUQHGDIHZLPSRUWDQWWKLQJV
,QFRUUHFWV\QWD[FDQEHWKHVRXUFHRIUHDOOLIHSUREOHPV
<RXVKRXOGWHVWH[DFWO\WKHVDPHTXHU\WKDWWKH0\64/VHUYHUJHWV
3URJUDPPLQJODQJXDJHRXWSXWIXQFWLRQVDQGWKHJHQHUDOTXHU\ORJFDQKHOS\RX
TXLFNO\ILQGWKHTXHU\WKDWWKHDSSOLFDWLRQVHQGVWRWKH0\64/VHUYHU
7KHILUVWTXHU\,ZURWHZRUNHGILQHDQGUHWXUQHGDUHDVRQDEOHUHVXOW
mysql> SELECT count(*) FROM items WHERE id IN (SELECT id FROM items_links);
+----------+
| count(*) |
+----------+
| 10 |
+----------+
1 row in set (0.12 sec)
XQWLO,FRPSDUHGWKHQXPEHUUHWXUQHGZLWKWKHWRWDOQXPEHURIOLQNV
mysql> SELECT count(*) FROM items_links;
+----------+
| count(*) |
+----------+
| 6 |
+----------+
1 row in set (0.09 sec)
+RZFRXOGLWEHSRVVLEOHWRKDYHPRUHOLQNVWKDQDVVRFLDWLRQV"
/HW¦VH[DPLQHWKHTXHU\ZKLFK,PDGHVSHFLDOO\IRUWKLVERRNRQFHPRUH,WLVVLPSOH
DQGFRQWDLQVRQO\WZRSDUWVDVXETXHU\
SELECT id FROM items_links
6 | Chapter 1:ಗBasics
DQGDQRXWHUTXHU\
SELECT count(*) FROM items WHERE id IN ...
7KHVXETXHU\FDQEHDJRRGSODFHWRVWDUWWURXEOHVKRRWLQJEHFDXVHRQHVKRXOGEHDEOH
WRH[HFXWHLWLQGHSHQGHQWO\7KHUHIRUHZHFDQH[SHFWDFRPSHWHUHVXOWVHW
mysql> SELECT id FROM items_links;
ERROR 1054 (42S22): Unknown column 'id' in 'field list'
■ :HMXVWOHDUQHGDQHZGHEXJJLQJWHFKQLTXH,ID SELECTTXHU\GRHVQRWZRUNDV
H[SHFWHGVSOLWLWLQWRVPDOOHUFKXQNVDQGWKHQDQDO\]HHDFKSDUWXQWLO\RXILQGWKH
FDXVHRIWKHLQFRUUHFWEHKDYLRU
,I \RX VSHFLI\ WKH IXOO FROXPQ QDPH E\ XVLQJ WKH IRUPDW
table_name.column_name\RXFDQSUHYHQWWKHSUREOHPVGHVFULEHGKHUH
a,:' LQWKHILUVWSODFHEHFDXVH\RXZLOOJHWDQHUURULPPHGLDWHO\
mysql> SELECT count(*) FROM items WHERE items.id IN
(SELECT items_links.id FROM items_links);
ERROR 1054 (42S22): Unknown column 'items_links.id' in 'field list'
$JRRGWRROIRUWHVWLQJLVWKHVLPSOH0\64/FRPPDQGOLQHFOLHQWWKDWFRPHVZLWKD
0\64/LQVWDOODWLRQ:HZLOOGLVFXVVWKHLPSRUWDQFHRIWKLVWRROLQ&KDSWHU
%XWZK\GLGQ¦W0\64/UHWXUQWKHVDPHHUURUIRUWKHILUVWTXHU\":HKDYHDILHOGQDPHG
idLQWKHitemsWDEOHVR0\64/WKRXJKWZHZDQWHGWRUXQDGHSHQGHQWVXETXHU\WKDW
DFWXDOO\VHOHFWVitems.idIURPitems_links$£GHSHQGHQWVXETXHU\¤LVRQHWKDWUHIHUV
WRILHOGVIURPWKHRXWHUTXHU\
:HFDQDOVRXVHEXPLAIN EXTENDEDIROORZHGE\SHOW WARNINGSWRILQGWKHPLVWDNH,IZH
UXQWKHVHFRPPDQGVRQWKHRULJLQDOTXHU\ZHJHW
mysql> EXPLAIN EXTENDED SELECT count(*) FROM items WHERE id IN
(SELECT id FROM items_links)\G
2 rows in set, 2 warnings (0.12 sec)
*************************** 1. row ***************************
id: 1
select_type: PRIMARY
table: items
type: index
5RZRIWKHEXPLAIN EXTENDEDRXWSXWVKRZVWKDWWKHVXETXHU\LVDFWXDOO\GHSHQGHQW
select_typeLVDEPENDENT SUBQUERY
%HIRUHPRYLQJRQIURPWKLVH[DPSOH,ZDQWWRVKRZRQHPRUHWHFKQLTXHWKDWZLOOKHOS
\RXDYRLGJHWWLQJORVWZKHQ\RXUTXHU\FRQWDLQVORWVRIWDEOHUHIHUHQFHV,WLVHDV\WR
JHWORVWLI\RXMRLQRUPRUHWDEOHVLQDVLQJOHTXHU\HYHQZKHQ\RXNQRZKRZWKH\
VKRXOGEHMRLQHG
7KHLQWHUHVWLQJSDUWRIWKHSUHYLRXVH[DPSOHZDVWKHRXWSXWRI SHOW WARNINGS7KH
0\64/VHUYHUGRHVQRWDOZD\VH[HFXWHDTXHU\DVLWZDVW\SHGEXWLQYRNHVWKHRSWL
PL]HUWRFUHDWHDEHWWHUH[HFXWLRQSODQVRWKDWWKHXVHUXVXDOO\JHWVWKHUHVXOWVIDVWHU
)ROORZLQJEXPLAIN EXTENDEDWKHSHOW WARNINGSFRPPDQGVKRZVWKHRSWLPL]HGTXHU\
,QRXUH[DPSOHWKHSHOW WARNINGSRXWSXWFRQWDLQVWZRQRWHV7KHILUVWLV
Field or reference 'collaborate2011.items.id' of SELECT #2 was resolved in SELECT #1
8 | Chapter 1:ಗBasics
7KLVQRWHFOHDUO\VKRZVWKDWWKHVHUYHUUHVROYHGWKHYDOXHRI idLQWKHVXETXHU\IURP
WKHitemsWDEOHUDWKHUWKDQIURPitems_links
7KHVHFRQGQRWHFRQWDLQVWKHRSWLPL]HGTXHU\
select count(0) AS `count(*)` from `collaborate2011`.`items` where <in_optimizer>
(`collaborate2011`.`items`.`id`,<exists>
(select 1 from `collaborate2011`.`items_links` where
(<cache>(`collaborate2011`.`items`.`id`) = `collaborate2011`.`items`.`id`)))
7KLVRXWSXWDOVRVKRZVWKDWWKHVHUYHUWDNHVWKHYDOXHRIidIURPWKHitemsWDEOH
1RZ OHW¦V FRPSDUH WKH SUHYLRXV OLVWLQJ ZLWK WKH UHVXOW RI EXPLAIN EXTENDED RQ WKH
FRUUHFWTXHU\
mysql> EXPLAIN EXTENDED SELECt count(*) FROM items WHERE id IN
(SELECT iid FROM items_links)\G
*************************** 1. row ***************************
id: 1
select_type: PRIMARY
table: items
type: index
possible_keys: NULL
key: PRIMARY
key_len: 4
ref: NULL
rows: 10
filtered: 100.00
Extra: Using where; Using index
*************************** 2. row ***************************
id: 2
select_type: DEPENDENT SUBQUERY
table: items_links
type: index_subquery
possible_keys: iid,iid_2
key: iid
key_len: 5
ref: func
rows: 1
filtered: 100.00
Extra: Using index; Using where
2 rows in set, 1 warning (0.03 sec)
7KH RSWLPL]HG TXHU\ WKLV WLPH ORRNV FRPSOHWHO\ GLIIHUHQW DQG UHDOO\ FRPSDUHV
items.idZLWKitems_links.iidDVZHLQWHQGHG
7KHVXETXHU\LVVWLOOGHSHQGHQWEHFDXVHWKH id inFODXVHRIWKHRXWHUTXHU\UHTXLUHV
WKHVXETXHU\WRFKHFNLWVURZVDJDLQVWWKHYDOXHRI iidLQWKHLQQHUTXHU\7KLVLVVXH
FDPHXSLQWKHGLVFXVVLRQRIUHSRUWLQWKH0\64/&RPPXQLW\%XJV'DWDEDVH
■ ,DGGHGDOLQNWRWKHEXJUHSRUWEHFDXVHLWSURYLGHVDQRWKHULPSRUWDQWOHVVRQLI
\RXGRXEWWKHEHKDYLRURI\RXUTXHU\XVHJRRGVRXUFHVWRILQGLQIRUPDWLRQ7KH
FRPPXQLW\EXJGDWDEDVHLVRQHVXFKVRXUFH
7KHUHFDQEHPDQ\GLIIHUHQWUHDVRQVZK\D SELECTTXHU\EHKDYHVLQFRUUHFWO\EXWWKH
JHQHUDOPHWKRGRILQYHVWLJDWLRQLVDOZD\VWKHVDPH
6SOLWWKHTXHU\LQWRVPDOOFKXQNVDQGWKHQH[HFXWHWKHPRQHE\RQHXQWLO\RXVHH
WKHFDXVHRIWKHSUREOHP
8VHEXPLAIN EXTENDEDIROORZHGE\SHOW WARNINGSWRJHWWKHTXHU\H[HFXWLRQSODQ
DQGLQIRUPDWLRQRQKRZLWZDVDFWXDOO\H[HFXWHG
,I\RXGRQ¦WXQGHUVWDQGWKH0\64/VHUYHUEHKDYLRUXVHWKH,QWHUQHWDQGJRRG
VRXUFHVIRULQIRUPDWLRQ7KH$SSHQGL[LQFOXGHVDOLVWRIXVHIXOUHVRXUFHV
10 | Chapter 1:ಗBasics
QDPH WKH PRVW FRPPRQ ,Q WKLV VHFWLRQ ZH¦OO ORRN DW VRPH H[DPSOHV ZKHUH D EDG
DELETERUUPDATELVQ¦WUHYHDOHGXQWLODODWHUSELECT,QDODWHUVHFWLRQZH¦OODGGUHVVWKRVH
SX]]OLQJFDVHVZKHUHWKHSUREOHPWXUQVXSORQJDIWHULWZDVWULJJHUHGDQGVKRZ\RX
KRZWRZRUNEDFNZDUGWRILQGWKHHUURU7KLVVHFWLRQGRHVQRWGHDOGLUHFWO\ZLWKSURE
OHPVLQWUDQVDFWLRQVZKLFKDUHGLVFXVVHGLQ&KDSWHU+HUH,VKRZFDVHVZKHUHGDWD
LQWKHGDWDEDVHLVVWDEOHLHDOOWUDQVDFWLRQVLIXVHGZHUHFRPSOHWHG,ZLOOFRQWLQXH
XVLQJH[DPSOHVUHGXFHGGRZQIURPUHDOFDVHV
/HW¦VVWDUWIURPWKHEHVWSRVVLEOHFDVHZKHQGDWDLQFRQVLVWHQF\ZDVQRWLFHGULJKWDIWHU
WKHHUURUZDVPDGH:HZLOOXVHWKHIROORZLQJLQLWLDOGDWDVHW
mysql> CREATE TEMPORARY TABLE t1(f1 INT);
Query OK, 0 rows affected (0.01 sec)
mysql> CREATE TEMPORARY TABLE t2(f2 INT);
Query OK, 0 rows affected (0.08 sec)
mysql> INSERT INTO t1 VALUES(1);
Query OK, 1 row affected (0.01 sec)
,QWKHDSSOLFDWLRQWKHWDEOHVVKRZQZHUHWHPSRUDU\WDEOHVFRQWDLQLQJSDUWLDOUHVXOWVHWV
VHOHFWHGIURPWKHPDLQORJWDEOH7KLVLVDFRPPRQWHFKQLTXHIUHTXHQWO\XVHGLQVWRUHG
URXWLQHVZKHQRQO\DVPDOOVHWRIGDWDIURPWKHPDLQWDEOHLVQHHGHGEXWWKHXVHUGRHVQ¦W
ZDQWWRFKDQJHWKHGDWDLQWKHPDLQWDEOHRUORFNWKHWDEOH
6RLQWKLVH[DPSOHDIWHUILQLVKLQJZLWKDUHVXOWVHWWKHXVHUZDQWHGWRGHOHWHURZVIURP
ERWKWDEOHV,WDOZD\VORRNVDPD]LQJZKHQ\RXFDQGRWKLQJVLQDVLQJOHTXHU\%XWUHDO
OLIHFDQZRUNRXWGLIIHUHQWO\IURP\RXUSODQVDQG\RXFDQJHWXQH[SHFWHGUHVXOWVRU
VLGHHIIHFWV
mysql> DELETE FROM t1, t2 USING t1, t2;
Query OK, 0 rows affected (0.00 sec)
,IWKHXVHUSDLGDWWHQWLRQWRWKHVWULQJSULQWHGLQUHVSRQVHWRWKHDELETEKHZRXOGUHDOL]H
ULJKW DZD\ WKDW VRPHWKLQJ KDG JRQH ZURQJ 1R URZV ZHUH DIIHFWHG E\ WKH DELETE
PHDQLQJ WKDW LW GLG QRWKLQJ 7KH RXWSXW IURP D VWDWHPHQW LV RIWHQ QRW VR REYLRXV
KRZHYHUDQGVRPHWLPHVLWLVQHYHUVHHQEHFDXVHWKH64/VWDWHPHQWLVUXQZLWKLQD
SURJUDPRUVFULSWZLWKQRKXPDQEHLQJWRZDWFKRYHUWKHUHVXOWV,QJHQHUDO\RXVKRXOG
DOZD\VFKHFNLQIRUPDWLRQUHWXUQHGE\DVWDWHPHQWH[HFXWLRQWROHDUQKRZPDQ\URZV
ZHUHDIIHFWHGDQGZKHWKHUWKLVYDOXHLVVDPHDV\RXH[SHFW,QDQDSSOLFDWLRQ\RXPXVW
H[SOLFLWO\FKHFNLQIRUPDWLRQIXQFWLRQV
/HW¦VFRQWLQXH,I\RXUXQ SELECTLPPHGLDWHO\\RXFRXOGEHVXUSULVHGWKLQNLQJWKDW
WKHTXHU\ZDVLQFRUUHFWRUHYHQWKDWWKHTXHU\FDFKHKDGQRWEHHQFOHDUHG
<RXFDQEHVXUHWKLVLVQRWDFDFKHRUVRPHRWKHUSUREOHPLI\RXFRQYHUWWKHSELECTWR
DVNIRUWKHQXPEHURIURZV7KLVHDV\H[DPSOHVKRZVKRZZHFDQXVHGLIIHUHQWZD\V
WRTXHU\DWDEOHWREHVXUHWKHGDWDLVFRQVLVWHQW
mysql> SELECT count(*) FROM t1;
+----------+
| count(*) |
+----------+
| 1 |
+----------+
1 row in set (0.00 sec)
COUNT(*)VWLOOUHWXUQVDSRVLWLYHQXPEHUKHUHZKLFKVKRZVWKHWDEOHLVQRWHPSW\DV
GHVLUHG$VDQDWWHQWLYHXVHUZRXOGKDYHVHHQWKH DELETEGLGQ¦WDFWXDOO\UHPRYHDQ\
URZV7RILQGRXWZK\ZHFDQFRQYHUWWKH DELETEWRWKHFRUUHVSRQGLQJ SELECT7KLV
ZLOOVKRZXVZKLFKURZVVDWLVI\WKHFRQGLWLRQIRUWKHGHOHWH
$OWKRXJKRXUVLPSOHH[DPSOHKDGQRWHEREFODXVHWKHWHFKQLTXHLVFHUWDLQO\XVHIXOWR
FKHFN WKH LPSDFW RI D WHERE FODXVH LQ D GHOHWH RU XSGDWH 7KH URZV UHWXUQHG E\ D
SELECTDUHWKHRQHVWKDWDELETEZRXOGGHOHWHRUWKDWUPDATEZRXOGFKDQJH
mysql> SELECT * FROM t1, t2;
Empty set (0.00 sec)
&RQVLVWHQWZLWKSUHYLRXVUHVXOWVWKLVUHWXUQVDQHPSW\VHW7KDW¦VZK\QRURZVZHUH
UHPRYHG,WVWLOOPLJKWQRWEHFOHDUZK\WKLVKDSSHQVEXWQRZWKDWZHKDYHDSELECT
ZHFDQXVHIDPLOLDUWHFKQLTXHVIURPWKHSUHYLRXVVHFWLRQ)RUWKLVFDVHRXUEHVWFKRLFH
LVWRUXQSELECTIROORZHGE\EXPLAINDQGDQDO\]HLWVRXWSXW
mysql> \W
Show warnings enabled.
12 | Chapter 1:ಗBasics
select_type: SIMPLE SUBQUERY
table: t2
type: system
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 0
filtered: 0.00
Extra: const row not found
2 rows in set, 1 warning (0.03 sec)
Note (Code 1003): select '1' AS `f1`,'0' AS `f2` from `test`.`t1` join `test`.`t2`
6LQFHYHUVLRQ\RXFDQXVHEXPLAINZLWKUPDATEDQGDELETEDVZHOOEXWFRQYHUWLQJVXFKDTXHU\LQWR
SELECTVWLOOPDNHVVHQVHEHFDXVHLWLVHDVLHUWRH[DPLQHDQDFWXDOUHVXOWVHWDQGPDQLSXODWHLWWKDQWRMXVW
XVH EXPLAIN7KLVLVHVSHFLDOO\WUXHIRUFRPSOLFDWHG JOINVZKHQ EXPLAINVKRZVLWH[DPLQHGPRUHURZV
WKDQZHUHDFWXDOO\XSGDWHG
7KHdescriptionDQGadditionalILHOGVDUHRIW\SHTEXT,QWKLVH[DPSOHZHZLOOXVHDQ
HUURQHRXVTXHU\WKDWLVVXSSRVHGWRUHSODFHNULLYDOXHVZLWKPRUHGHVFULSWLYHWH[W £QR
GHVFULSWLRQ¤IRURQHWDEOHDQG£QRDGGLWLRQDOFRPPHQWV¤IRUWKHRWKHU
mysql> UPDATE items SET description = 'no description' AND
additional = 'no additional comments' WHERE description IS NULL;
Query OK, 3 rows affected, 3 warnings (0.13 sec)
Rows matched: 3 Changed: 3 Warnings: 3
$VZHVHHWKUHHURZVFKDQJHGWKHLUYDOXHVLQWKH descriptionILHOGEXWLVGLIIHUHQW
IURPWKH£QRGHVFULSWLRQ¤VWULQJZHWKRXJKWZHZHUHVHWWLQJ)XUWKHUPRUHWKHYDOXHV
LQWKH additionalILHOGKDYHQRWFKDQJHGDWDOO7RILQGRXWZK\WKLVKDSSHQHGZH
VKRXOGFKHFNZDUQLQJV1RWLFHLQWKHVHVWDWHPHQWVUHWXUQHGE\WKHVHUYHUWKDWZHVHH
DZDUQLQJVFRXQWRIWKUHH
Query OK, 3 rows affected, 3 warnings (0.13 sec)
Rows matched: 3 Changed: 3 Warnings: 3
14 | Chapter 1:ಗBasics
| description | text | YES | | NULL | |
+-------------+------+------+-----+---------+-------+
1 row in set (0.13 sec)
:HDOVRZDQWWRNQRZZK\ZHGLGQRWJHWDQ\ZDUQLQJDERXWWKH additionalILHOG
ZKHQLWZDVQRWFKDQJHGDWDOO
/HW¦VVSOLWWKHTXHU\LQFKXQNVDQGH[DPLQHZKDWLWJRLQJLQHDFKRIWKHP
UPDATE items
7KLVLVDFRPPRQVWDUWIRUDQUPDATEDQGQRWKLQJ¦VZURQJZLWKLW
SET description = 'no description' AND additional = 'no additional comments'
7KDW XVHG D SET VWDWHPHQW /HW¦V H[DPLQH ZKDW LW LV DFWXDOO\ GRLQJ :KDW GRHV WKH
NH\ZRUG AND PHDQ LQ WKLV FDVH" /HW PH DGG SDUHQWKHVHV WR WKH TXHU\ WR XQGHUOLQH
RSHUDWRUSUHFHGHQFH
SET description = ('no description' AND additional = 'no additional comments')
6RDFWXDOO\WKHVWDWHPHQWFDOFXODWHVWKHH[SUHVVLRQ
'no description' and additional = 'no additional comments'
DQGWKHQDVVLJQVLWWRdescription(YDOXDWLQJWKHHTXDOVLJQSURGXFHVD%RROHDQUHVXOW
DV D LONGLONG YDOXH 7R SURYH WKLV VWDUW WKH 0\64/ FRPPDQG OLQH FOLHQW ZLWK WKH
--column-type-infoRSWLRQDQGUXQWKHSELECTDJDLQ
$ mysql --column-type-info
mysql> SELECT 'no description' AND additional = 'no additional comments' FROM items;
Field 1: `'no description' AND additional = 'no additional comments'`
Catalog: `def`
Database: ``
Table: ``
Org_table: ``
Type: LONGLONG
Collation: binary (63)
Length: 1
Max_length: 1
Decimals: 0
Flags: BINARY NUM
+------------------------------------------------------------+
| 'no description' AND additional = 'no additional comments' |
+------------------------------------------------------------+
| 0 |
| 0 |
:H FOHDUO\ VHH WKDW WKH UHVXOW RI WKH H[SUHVVLRQ LV ZKLFK ZDV LQVHUWHG LQWR WKH
GHVFULSWLRQILHOG$QGEHFDXVHRXUXSGDWHWRWKHadditionalILHOGJRWEXULHGLQVLGHWKH
DEVXUGH[SUHVVLRQQRWKLQJZDVLQVHUWHGLQWRWKHILHOGQRUGLGWKHVHUYHUVHHDQ\UHDVRQ
WRFRPPHQWDERXWWKHILHOG
1RZ\RXFDQUHZULWHWKHTXHU\ZLWKRXWORJLFHUURUV
UPDATE items SET description = 'no description',
additional = 'no additional comments' WHERE description IS NULL;
<RXFDQH[DPLQHWKHWHEREFODXVHLI\RXZDQWEXWLQWKLVFDVHLWKDVQRHUURU
7KLV H[DPSOH VKRZV WKH LPSRUWDQFH RI UHWXUQ YDOXHV DQG LQIRUPDWLRQ DERXW TXHU\
H[HFXWLRQ/HW¦VGLVFXVVWKHPDELWPRUH
7KLVPHDQVWKHTXHU\H[HFXWHGILQHDQGFKDQJHGNURZV
7RJHWWKHVDPHLQIRUPDWLRQLQDQDSSOLFDWLRQXVHWKHFDOO
mysql_affected_rows()
7KLVUHWXUQVDSRVLWLYHQXPEHURIURZVLIWKHUHZHUHFKDQJHVLIQRWKLQJFKDQJHG
RU¡LQFDVHRIHUURU
<RXFDQILQGDGHWDLOHGGHVFULSWLRQRIWKH&$3,V\QWD[DWKWWSGHYP\VTOFRPGRFUHIPDQHQFKWPO
16 | Chapter 1:ಗBasics
)RU UPDATEVWDWHPHQWVLIWKHFOLHQWIODJ CLIENT_FOUND_ROWSZDVVHWWKLVIXQFWLRQ
UHWXUQVWKHQXPEHURIURZVWKDWPDWFKHGWKHWHEREFRQGLWLRQZKLFKLVQRWDOZD\V
WKHVDPHDVWKRVHWKDWZHUHDFWXDOO\FKDQJHG
8VLQJDIIHFWHGURZVLVWXUQHGRIIE\GHIDXOWLQ&RQQHFWRU-EHFDXVH
WKLVIHDWXUHLVQRW-'%&FRPSOLDQWDQGZLOOEUHDNPRVWDSSOLFD
m
UP, WLRQVWKDWUHO\RQ found PDWFKHG URZVLQVWHDGRI affectedURZV
IRU'0/VWDWHPHQWV%XWLWGRHVFDXVHFRUUHFWXSGDWHFRXQWVIURP
INSERT ... ON DUPLICATE KEY UPDATEVWDWHPHQWVWREHUHWXUQHGE\
WKH VHUYHU 7KH useAffectedRows FRQQHFWLRQ VWULQJ SURSHUW\ WHOOV
&RQQHFWRU-ZKHWKHUWRVHWWKHCLIENT_FOUND_ROWSIODJZKHQFRQ
QHFWLQJWRWKHVHUYHU
1XPEHURIPDWFKHGURZV
7KHVWULQJLQWKHRXWSXWWKDWLQGLFDWHVWKLVLV
Rows matched: M
ZKLFKVKRZVKRZPDQ\URZVVDWLVI\WKHWHEREFRQGLWLRQV
7KHIROORZLQJ&IXQFWLRQ
mysql_info()
UHWXUQVDGGLWLRQDOLQIRUPDWLRQDERXWWKHPRVWUHFHQWTXHU\LQWKHVWULQJIRUPDW
)RUDQUPDATELWUHWXUQVDVWULQJOLNH
Rows matched: # Changed: # Warnings: #
ZKHUHHDFK#UHSUHVHQWVWKHQXPEHURIPDWFKHGURZVFKDQJHGURZVDQGZDUQLQJV
FRUUHVSRQGLQJO\<RXVKRXOGSDUVHWKHOLQHIRU£PDWFKHG¤WRILQGRXWKRZPDQ\
FRUUHVSRQGLQJURZVZHUHIRXQG
1XPEHURIFKDQJHGURZV
7KHVWULQJLQWKHRXWSXWWKDWLQGLFDWHVWKLVLV
Changed: P
ZKLFKVKRZVKRZPDQ\URZVZHUHDFWXDOO\FKDQJHG1RWHWKDWM URZVPDWFKHG
DQGP URZVFKDQJHG FDQEHGLIIHUHQW3HUKDSVWKHFROXPQV\RXZDQWHGWRFKDQJH
DOUHDG\FRQWDLQHGWKHYDOXHV\RXVSHFLILHGLQWKDWFDVHWKHFROXPQVDSSHDULQWKH
£0DWFKHG¤YDOXHEXWQRWWKH£&KDQJHG¤YDOXH
,QDQDSSOLFDWLRQUHWULHYHWKLVLQIRUPDWLRQXVLQJ mysql_info()DVEHIRUHEXWLQ
WKLVFDVHSDUVHIRU£&KDQJHG¤
:DUQLQJVQXPEHUDQGPHVVDJH
7KHVWULQJLQWKHRXWSXWWKDWLQGLFDWHVWKLVLV
Warnings: R
<RXJHWZDUQLQJVLIWKHVHUYHUGHWHFWHGVRPHWKLQJXQXVXDODQGZRUWKUHSRUWLQJ
GXULQJ WKH TXHU\ EXW WKH TXHU\ FRXOG VWLOO EH H[HFXWHG DQG WKH URZV FRXOG EH
,I WKHUH DUH ZDUQLQJV UXQ D SHOW WARNINGS TXHU\ WR JHW WKH WH[W PHVVDJH WKDW
GHVFULEHVZKDWKDSSHQHG$QRWKHURSWLRQLV
mysql_sqlstate()
7KLV UHWULHYHV WKH PRVW UHFHQW SQLSTATE )RU H[DPSOH £¤ PHDQV D V\QWD[
HUURU£¤PHDQVHUURUVDQGZDUQLQJV
0
$YDOXHFDOOHG SQLSTATELVGHILQHGE\WKH$16,64/VWDQGDUGWR
LQGLFDWHWKHVWDWXVRIDVWDWHPHQW7KHVWDWHVDUHVHWWRVWDWXVFRGHV
m
P: GHILQHG LQ WKH VWDQGDUG WKDW LQGLFDWH ZKHWKHU D FDOO FRPSOHWHG
UP,
VXFFHVVIXOO\RUUHWXUQHGDQH[FHSWLRQ7KHSQLSTATELVUHWXUQHGDV
DFKDUDFWHUVWULQJ7RILQGRXWZKLFKYDOXHVWKH0\64/VHUYHUFDQ
UHWXUQUHIHUWR£6HUYHU(UURU&RGHVDQG0HVVDJHV¤LQWKH0\64/
5HIHUHQFH0DQXDO
(UURUV
,WLVDOVRDOZD\VXVHIXOWRFKHFNIRUHUURUV7KHIROORZLQJIXQFWLRQVUHSRUWWKHHUURU
YDOXHIRUWKHPRVWUHFHQW64/VWDWHPHQW
mysql_errno()
7KLVUHWXUQVWKH0\64/QXPEHURIWKHODWHVWHUURU)RULQVWDQFHDV\QWD[HUURU
ZLOOJHQHUDWHWKHQXPEHUZKHUHDVPHDQVQRHUURU
mysql_error()
7KLVUHWXUQVDWH[WUHSUHVHQWDWLRQRIWKHODWHVWHUURU)RUDV\QWD[HUURULWZRXOG
EHVRPHWKLQJOLNH
You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax
to use near 'FRO t1 WHERE f1 IN (1,2,1)' at line 1
7KLVFDQEHFRQYHQLHQWIRUVWRULQJPHVVDJHVLQDVHSDUDWHORJILOHWKDW\RXFDQ
H[DPLQHDWDQ\WLPH
0
7KH RIILFLDO 0\64/ GRFXPHQWDWLRQ FRQWDLQV D OLVW RI HUURUV WKDW WKH
0\64/VHUYHUFDQUHWXUQDQGDOLVWRIFOLHQWHUURUV
m
P:
UP,
18 | Chapter 1:ಗBasics
Retrieving Error Strings Through perror
7KH SHUURU XWLOLW\ FRPHV ZLWK WKH 0\64/ GLVWULEXWLRQ DQG LV D YHU\ XVHIXO WRRO IRU
WURXEOHVKRRWLQJSHUURUSURYLGHVWKHHUURUVWULQJFRUUHVSRQGLQJWRDQHUURUFRGHIRU
ERWK0\64/DQGWKHVHUYHUKRVW¦VRSHUDWLQJV\VWHP<RXFDQILQGWKHVHQXPEHUVLQ
EUDFNHWVDIWHUWKHHUURUPHVVDJHUHFHLYHGLQHLWKHUWKH0\64/FRPPDQGOLQHFOLHQWWKH
LQIRUPDWLRQIXQFWLRQRUWKHHUURUORJILOH+HUHDUHDIHZH[DPSOHV
mysql> CREATE TABLE t2(f1 INT NOT NULL PRIMARY
-> KEY, f2 INT, FOREIGN KEY(f2) REFERENCES t1(f2)) ENGINE=InnoDB;
ERROR 1005 (HY000): Can't create table 'test.t2' (errno: 150)
mysql> \q
$perror 150
MySQL error code 150: Foreign key constraint is incorrectly formed
$perror 2
OS error code 2: No such file or directory
$perror 136
MySQL error code 136: No more room in index file
7KHVHFRGHVDUHSULQWHGE\WKH0\64/FOLHQWZKHQDFRPPDQGSURGXFHVDQHUURUDQG
FDQEHUHWULHYHGE\SURJUDPVWKURXJKmysql_error()%XWLQVLWXDWLRQVZKHUH\RXFRPH
DFURVVDQHUURUQXPEHUDQGGRQ¦WNQRZZKDWLWPHDQVXVHWKLVXWLOLW\
1RZFUHDWHYDOXHVLQWKHWHPSRUDU\WDEOH
INSERT INTO t2 VALUES(1),(2),(3);
7KHVWRUHGURXWLQHPRYHVGDWDIURPWKHWHPSRUDU\WDEOHLQWRWKHPDLQWDEOH,WFKHFNV
ILUVW WR PDNH VXUH VRPHWKLQJ LV LQ WKH WHPSRUDU\ WDEOH EHIRUH GRLQJ WKH PRYH 2XU
YHUVLRQORRNVOLNHWKLV
CREATE PROCEDURE p1()
BEGIN
DECLARE m INT UNSIGNED DEFAULT NULL;
CREATE TEMPORARY TABLE IF NOT EXISTS t2(f1 INT) ENGINE=InnoDB;
SELECT MAX(f1) INTO m FROM t2;
IF m IS NOT NULL
THEN
INSERT INTO t1(f1) SELECT f1 FROM t2;
END IF;
END
|
7KLVURXWLQHFUHDWHVWKHWHPSRUDU\WDEOHLILWGRHVQRWH[LVWZKHQWKHURXWLQHLVFDOOHG
7KLVSUHYHQWVHUURUVWKDWZRXOGEHFDXVHGLIWKHWHPSRUDU\WDEOHGRHVQRWH[LVWEXWDW
WKHVDPHWLPHOHDGVWRQHZLVVXHVDVZHZLOOVHH
7KHH[DPSOHXVHVWKHMAXIXQFWLRQMXVWWRFKHFNZKHWKHUWKHUHLVDWOHDVW
RQHURZLQWKHWDEOH,SUHIHUMAXWRCOUNTEHFDXVH,QQR'%WDEOHVGRQRW
a,:' VWRUHWKHQXPEHURIURZVWKH\FRQWDLQEXWFDOFXODWHWKLVYDOXHHYHU\
WLPHWKHCOUNTIXQFWLRQLVFDOOHG7KHUHIRUHMAX(indexed_field)LVIDVWHU
WKDQCOUNT
,I D VODYH UHVWDUWHG DIWHU WKH ILUVW LQVHUW EXW EHIRUH WKH VWRUHG SURFHGXUH FDOO WKH
WHPSRUDU\WDEOHRQWKHVODYHZRXOGEHHPSW\DQGWKHPDLQWDEOHRQWKHVODYHZRXOG
KDYHQRGDWD,QWKDWFDVHZHZLOOJHWWKHIROORZLQJRQWKHPDVWHU
mysql> SELECT * FROM t1;
+------+
| f1 |
+------+
| 1 |
| 2 |
| 3 |
20 | Chapter 1:ಗBasics
+------+
3 rows in set (0.03 sec)
:KHUHDVRQWKHVODYHZHJHW
mysql> SELECT * FROM t1;
Empty set (0.00 sec)
(YHQZRUVHLIZHLQVHUWLQWRt1DIWHUWKHVWRUHGSURFHGXUHFDOOUXQVZHZLOOKDYHDWRWDO
PHVVLQWKHVODYH¦VGDWD
6XSSRVHZHQRWLFHWKHHUURULQDQDSSOLFDWLRQWKDWUHDGVGDWDIURPWKHPDLQWDEOH:H
QRZQHHGWRILQGRXWKRZGDWDKDVEHHQLQVHUWHGLQWRWKHVODYHWDEOHZDVLWDGLUHFW
XSGDWHRQWKHVODYHRUZDVGDWDUHSOLFDWHGIURPWKHPDVWHU"
0\64/UHSOLFDWLRQGRHVQRWFKHFNGDWDFRQVLVWHQF\IRU\RXVRXSGDWHV
RIWKHVDPHREMHFWVXVLQJERWKWKH64/UHSOLFDWLRQWKUHDGDQGWKHXVHU
WKUHDGRQWKHVODYHOHDYHWKHGDWDGLIIHUHQWIURPWKHPDVWHUZKLFKLQ
WXUQFDQOHDGWRIDLOXUHGXULQJODWHUUHSOLFDWHGHYHQWV
%HFDXVHZHLPLWDWHGWKLVVLWXDWLRQLQRXUH[DPSOHZHNQRZDWWKLVSRLQWZK\GDWD
FRUUXSWLRQKDSSHQHGWKHVODYHZDVUHVWDUWHGDIWHUWKHILUVWLQVHUWEXWEHIRUHWKHVWRUHG
SURFHGXUHFDOO,QDUHDOOLIHVLWXDWLRQLVVXHVWHQGWREHQRWLFHGODWHUZKHQDXVHULVVXHV
DVHOHFW
mysql> SELECT * FROM t1;
Empty set (0.00 sec)
:KHQ\RXVHHXQH[SHFWHGUHVXOWVIURP SELECT\RXQHHGWRILQGRXWZKHWKHUWKLVLV
FDXVHG E\ WKH TXHU\ LWVHOI RU E\ VRPHWKLQJ WKDW ZHQW ZURQJ HDUOLHU 7KH TXHU\ MXVW
VKRZQLVVRVLPSOHWKDWLWFRXOGQ¦WSURGXFHHUURUVXQOHVVWKHWDEOHZDVFRUUXSWHGVR
ZHPXVWWU\WRJREDFNWRVHHKRZWKHWDEOHZDVPRGLILHG
2XUJHQHULFH[DPSOHLVLQDUHSOLFDWHGHQYLURQPHQWZLWKDUHDGRQO\VODYHVRZHFDQ
EHVXUHWKDWWKHZURQJGDWDDURVHLQRQHRIWZRZD\VHLWKHUWKHPDVWHULQVHUWHGWKH
ZURQJGDWDRUWKHGDWDZDVFRUUXSWHGGXULQJUHSOLFDWLRQ
6RFKHFNILUVWZKHWKHUWKHPDVWHUKDVWKHZURQJGDWD
master> SELECT * FROM t1;
+------+
| f1 |
+------+
| 1 |
| 2 |
| 3 |
+------+
3 rows in set (0.03 sec)
7KHPDVWHU¦VGDWDLVFRUUHFWVRWKHVRXUFHRIWKHSUREOHPOLHVLQWKHUHSOLFDWLRQOD\HU
* System 1
* Test
* test2
* test2
* test2
<Go!>
:HZLOOGLVFXVVLQJUHDWGHWDLOKRZWRWURXEOHVKRRWUHSOLFDWLRQIDLOXUHVLQ&KDSWHUVR,¦PVNLSSLQJWKH
H[SODQDWLRQKHUH
22 | Chapter 1:ಗBasics
7KHOLVWVKRXOGQRWFRQWDLQGXSOLFDWHV\VWHPVEHFDXVHWKHUHLVQRVHQVHLQGHVFULELQJ
WKHVDPHUXOHWZLFH6R,ZDVYHU\VXUSULVHGWRVHHVHYHUDOLWHPVZLWKWKHVDPHQDPH
7KHFRGHWKDWSULQWHGWKHGDWDXVHGREMHFWVDQG,FRXOGQRWVHHZKDWVWDWHPHQWVZHUH
VHQWWRWKH0\64/VHUYHUMXVWE\UHDGLQJWKHFRGH
return $this->addParameters(array(Field::ITEMS => DAO::system()->getPlainList()));
,XVHGORJJLQJWRJHWDUHDOTXHU\,WKDSSHQHGWREHFRUUHFW
SELECT `system`.`id`, `system`.`name`, `system`.`description` FROM `system`
1H[W,H[DPLQHGWKHFRQWHQWVRIWKHWDEOH
mysql> SELECT * FROM system;
+----+----------+-------------------------------------------------+
| id | name | description |
+----+----------+-------------------------------------------------+
| 1 | System 1 | Man and woman clothing construction |
| 2 | Test | Testing Geometric set |
| 3 | test2 | New test |
| 4 | test2 | foobar |
| 8 | test2 | |
+----+----------+-------------------------------------------------+
5 rows in set (0.00 sec)
6RWKHSELECTZDVDFFXUDWHO\UHWXUQLQJWKHGDWDVHWWKDWH[LVWHGLQWKHWDEOH,VZLWFKHG
WRFKHFNLQJWKHFRGHWKDWXSGDWHGWKHWDEOH
$system = System::factory()
->setName($this->form->get(Field::NAME))
->setDescription(
$this->form->get(Field::DESCRIPTION)
);
DAO::system()->take($system);
$JDLQ,XVHGORJJLQJWRJHWWKHTXHU\
INSERT INTO `system` (`id`, `name`, `description`) VALUES ('', 'test2', '')
7KH TXHU\ ZDV ULJKW WRR id VHHPHG WR EH DQ DXWRLQFUHPHQWHG ILHOG WKDW JRW VHW
DXWRPDWLFDOO\
%XW DW WKH VDPH WLPH WKH TXHU\ KLQWV DW WKH SRWHQWLDO SUREOHP LW PXVW EH UXQQLQJ
UHSHDWHGO\ZLWKQRFKHFNIRUXQLTXHQHVV0DNLQJWKLVJXHVV,GHFLGHGWRFKHFNWKH
WDEOHGHILQLWLRQ
mysql> SHOW CREATE TABLE system\G
*************************** 1. row ***************************
Table: system
Create Table: CREATE TABLE `system` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`description` tinytext NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8
1 row in set (0.09 sec)
$QG WKLV FOHDUO\ VKRZHG WKH VRXUFH RI WKH SUREOHP WKH name ILHOG LV QRW GHILQHG DV
UNIQUE:KHQFUHDWLQJWKHWDEOH,SUREDEO\ZDVSODQQLQJWRXVHidDVDXQLTXHLGHQWLILHU
:H¦UHGRQHIRUQRZZLWKSUREOHPVUHODWHGWRZURQJUHVXOWV1H[WZH¦OOWXUQWRVRPH
RWKHUSUREOHPVWKDWRFFXUIUHTXHQWO\
Slow Queries
2QHFRPPRQLVVXHZLWK64/DSSOLFDWLRQVLVSHUIRUPDQFHUHJUHVVLRQ,QWKLVVHFWLRQ
,¦OOGHVFULEHVRPHEDVLFDFWLRQVWRWDNHZKHQ\RXKLWSHUIRUPDQFHSUREOHPV'RQ¦W
ZRUU\DERXWWKHGHWDLOVMXVWSLFNXSWKHHVVHQWLDOLGHDV$V\RXUNQRZOHGJHGHHSHQV
\RX¦OOILQG\RXUVHOIXVLQJWKHPLQDPRUHHGXFDWHGDQGWKHUHIRUHPRUHHIIHFWLYHPDQQHU
:KHQ,FRQVLGHUHGZKLFKSUREOHPVWRLQFOXGHLQWKLVFKDSWHU,TXHVWLRQHGZKHWKHU,
VKRXOG PHQWLRQ SHUIRUPDQFH SUREOHPV DW DOO 7KHUH DUH D ORW RI VRXUFHV GHVFULELQJ
SHUIRUPDQFHLVVXHVLQGHWDLOVWDUWLQJZLWKWKHZRQGHUIXO£2SWLPL]DWLRQ¤FKDSWHULQ
WKH0\64/5HIHUHQFH0DQXDODQGH[WHQGLQJWRERRNVSXEOLVKHGE\2¦5HLOO\,ZLOO
DGGDVKRUWRYHUYLHZRIXVHIXOVRXUFHVDWWKHHQGRIWKLVERRN2QHFDQHDVLO\VSHQG
RQH¦VFDUHHURQWKLVVXEMHFWRUGURZQLQWKHIORRGRIDYDLODEOHLQIRUPDWLRQ
,ZLOOEHVSHDNLQJKHUHPRVWO\DERXWSELECTTXHULHV$WWKHHQGRIWKLVVHFWLRQ,EULHIO\
DGGUHVVKRZWRGHDOZLWKDVORZTXHU\WKDWPRGLILHVGDWD
7KUHHPDLQWHFKQLTXHVZLOOKHOS\RXZRUNRQVORZTXHULHVWXQLQJWKHTXHU\LWVHOI
WXQLQJ\RXUWDEOHV LQFOXGLQJDGGLQJLQGH[HV DQGWXQLQJWKHVHUYHU/HW¦VORRNDWWKHP
LQGHWDLO
24 | Chapter 1:ಗBasics
H[DPLQDWLRQVEXPLAINZLOOFRQWDLQDURZIRUHDFKWDEOHLQWKHJOIN:HZLOOVHHWKLVLQ
WKHIROORZLQJH[DPSOHV
EXPLAINUHSRUWVDMRLQHYHQZKHQ\RXRSHUDWHRQDVLQJOHWDEOH7KLVPD\VRXQGDELW
VWUDQJHEXWWKH0\64/RSWLPL]HULQWHUQDOO\WUHDWVDQ\TXHU\DVDMRLQHYHQLILW¦VDMRLQ
RQRQHWDEOH
/HW¦VORRNLQWRWKHEXPLAINRXWSXWIURPWKHSUHYLRXVVHFWLRQDJDLQ
mysql> EXPLAIN EXTENDED SELECT count(*) FROM items WHERE id IN
(SELECT iid FROM items_links)\G
*************************** 1. row ***************************
id: 1
select_type: PRIMARY
table: items
type: index
possible_keys: NULL
key: PRIMARY
key_len: 4
ref: NULL
rows: 10
filtered: 100.00
Extra: Using where; Using index
*************************** 2. row ***************************
id: 2
select_type: DEPENDENT SUBQUERY
table: items_links
type: index_subquery
possible_keys: iid,iid_2
key: iid
key_len: 5
ref: func
rows: 1
filtered: 100.00
Extra: Using index; Using where
2 rows in set, 1 warning (0.48 sec)
7KHQXPEHURIH[DPLQHGURZVLVWLPHVEHFDXVHWKHVXETXHU\H[HFXWHVRQFHIRU
HYHU\URZLQWKHRXWHUTXHU\7KHW\SHRIWKHILUVWTXHU\LVindexZKLFKPHDQVWKDWWKH
ZKROHLQGH[ZLOOEHUHDG7KHW\SHRIWKHVHFRQGTXHU\LV index_subquery7KLVLVDQ
LQGH[ORRNXSIXQFWLRQWKDWZRUNVVLPLODUWRWKHrefW\SH6RLQWKLVH[DPSOHWKHRS
WLPL]HU ZLOO UHDG DOO LQGH[ HQWULHV IURP WKH items WDEOH DQG RQH URZ IURP WKH
items_linksWDEOHIRUHDFKRIWKHWHQPDWFKLQJURZVIRXQGIURPitems
+RZFDQZHILQGRXWLIWKLVLVDJRRGSODQIRUWKHTXHU\")LUVWOHW¦VUHSHDWWKHTXHU\
UHVXOWVDQGFKHFNKRZORQJWKHTXHU\DFWXDOO\WRRN
mysql> SELECT count(*) FROM items WHERE id IN (SELECT iid FROM items_links);
+----------+
| count(*) |
+----------+
| 4 |
+----------+
1 row in set (0.08 sec)
Slow Queries | 25
7KH0\64/VHUYHUH[DPLQHGURZVDQGUHWXUQHG+RZIDVWLVLW"7RDQVZHUWKLV
TXHVWLRQOHW¦VFRXQWWKHQXPEHURIURZVLQERWKWDEOHV
mysql> SELECT count(*) FROM items;
+----------+
| count(*) |
+----------+
| 10 |
+----------+
1 row in set (0.11 sec)
:HKDYHURZVLQWKHitemsWDEOHHDFKZLWKDXQLTXH,'7KHitems_linksWDEOHKDV
URZVZLWKQRQXQLTXH,'V iid )RUWKHFXUUHQWDPRXQWRIURZVWKHSODQORRNVJRRG
EXWDWWKHVDPHWLPHLWVKRZVDSRWHQWLDOSUREOHP5LJKWQRZZHKDYHIHZHUOLQNVWKDQ
LWHPV &XUUHQWO\ WKH GLIIHUHQFH LQ WKHVH QXPEHUV LV QRW KLJK EXW LW ZLOO EH PRUH
QRWLFHDEOHLIWKHLUQXPEHUVGLYHUJH
7RWHVWWKLVJXHVVDQGWRVKRZ\RXDQH[DPSOHRITXHU\WXQLQJ,ZLOOLQVHUWDIHZURZV
LQWRWKHitemsWDEOH7KHidLVGHILQHGDVINT NOT NULL AUTO_INCREMENT PRIMARY KEYVR
ZHDUHJXDUDQWHHGWKDWQRH[LVWLQJOLQNZLOOUHIHUWRDQHZO\LQVHUWHGURZ7KLVDOORZV
XVWRLPLWDWHDUHDOLVWLFVLWXDWLRQWKDWDULVHVZKHQDXVHUQHHGVWRJHWDVPDOOQXPEHURI
OLQNV VL[LQRXUFDVH IURPDODUJHWDEOH7KHIROORZLQJVWDWHPHQWVDUHMXVWDTXLFNKDFN
WRFUHDWHDORWRIURZVE\UHSHDWHGO\VHOHFWLQJDOOWKHURZVLQWKHWDEOHDQGLQVHUWLQJPRUH
mysql> INSERT INTO items( short_description , description,
example, explanation, additional) SELECT short_description , description,
example, explanation, additional FROM items;
Query OK, 10 rows affected (0.17 sec)
Records: 10 Duplicates: 0 Warnings: 0
<Repeat this query few times>
mysql> INSERT INTO items( short_description , description,
example, explanation, additional) SELECT short_description , description,
example, explanation, additional FROM items;
Query OK, 2560 rows affected (3.77 sec)
Records: 2560 Duplicates: 0 Warnings: 0
1RZOHW¦VVHHZKHWKHURXUTXHU\SODQFKDQJHG
mysql> EXPLAIN EXTENDED SELECT count(*) FROM items WHERE id IN
-> (SELECT iid FROM items_links)\G
*************************** 1. row ***************************
id: 1
select_type: PRIMARY
table: items
type: index
possible_keys: NULL
26 | Chapter 1:ಗBasics
key: PRIMARY
key_len: 4
ref: NULL
rows: 5136
filtered: 100.00
Extra: Using where; Using index
*************************** 2. row ***************************
id: 2
select_type: DEPENDENT SUBQUERY
table: items_links
type: index_subquery
possible_keys: iid,iid_2
key: iid
key_len: 5
ref: func
rows: 1
filtered: 100.00
Extra: Using index; Using where
2 rows in set, 1 warning (0.09 sec)
7KHTXHU\H[HFXWLRQSODQLVWKHVDPH¢DQGLWLVJRLQJWRH[DPLQHURZVIRUMXVW
VL[OLQNV,VWKHUHDQ\ZD\WRUHZULWHWKHTXHU\VRLWZLOOH[HFXWHIDVWHU"
7KHW\SHRIVXETXHU\LVindex_subquery7KLVPHDQVWKDWWKHRSWLPL]HUXVHVDQLQGH[
ORRNXS IXQFWLRQ WKDW UHSODFHV WKH VXETXHU\ FRPSOHWHO\ 7KH RXWSXW IURP SHOW
WARNINGSVKRZVKRZWKHTXHU\KDVEHHQUHZULWWHQ
mysql> SHOW WARNINGS\G
*************************** 1. row ***************************
Level: Note
Code: 1003
Message: select count(0) AS `count(*)` from `collaborate2011`.`items` where
<in_optimizer>(`collaborate2011`.`items`.`id`,<exists>
(<index_lookup>(<cache>(`collaborate2011`.`items`.`id`) in
items_links on iid where (<cache>(`collaborate2011`.`items`.`id`) =
`collaborate2011`.`items_links`.`iid`))))
1 row in set (0.00 sec)
7KHRXWSXWLVLQWLPLGDWLQJEXWDWOHDVWZHFDQVHHVRPHNLQGRIMRLQKHUH:KDWLIZH
UHZULWHWKHTXHU\WREHPRUHH[SOLFLWDERXWWKHFROXPQVRQZKLFKWKHMRLQLVSHUIRUPHG"
:HZLOODOVRUHZULWHWKHVXETXHU\LQWRDQH[SOLFLWJOINZLWKFXUUHQWYHUVLRQVRI0\64/
WKLVPHWKRGFDQGUDPDWLFDOO\LPSURYHSHUIRUPDQFH
mysql> \W
Show warnings enabled.
mysql> EXPLAIN EXTENDED SELECT count(*) FROM items JOIN
items_links ON (items.id=items_links.iid)\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: items_links
type: index
possible_keys: iid,iid_2
key: iid_2
key_len: 5
Slow Queries | 27
ref: NULL
rows: 6
filtered: 100.00
Extra: Using index
*************************** 2. row ***************************
id: 1
select_type: SIMPLE
table: items
type: eq_ref
possible_keys: PRIMARY
key: PRIMARY
key_len: 4
ref: collaborate2011.items_links.iid
rows: 1
filtered: 100.00
Extra: Using index
2 rows in set, 1 warning (0.05 sec)
7KHUHVXOWORRNVHQFRXUDJLQJEHFDXVHLWGRHVQRWVFDQDOOWKHURZVIURPWKHitemsWDEOH
%XWGRHVWKHTXHU\ZRUNFRUUHFWO\"
mysql> SELECT count(*) FROM items JOIN items_links ON
(items.id=items_links.iid);
+----------+
| count(*) |
+----------+
| 6 |
+----------+
1 row in set (0.10 sec)
:HJHWVL[URZVLQVWHDGRIIRXU7KLVLVEHFDXVHZHDVNHGWKHTXHU\WRUHWXUQDOOPDWFKHV
HYHQZKHQWKHVDPHOLQNZDVLQWZRPDWFKHV:HFDQIL[WKLVE\DGGLQJWKHDISTINCT
NH\ZRUG
mysql> SELECT count(distinct items.id) FROM items JOIN items_links ON
(items.id=items_links.iid);
+--------------------------+
| count(distinct items.id) |
+--------------------------+
| 4 |
+--------------------------+
1 row in set (0.12 sec)
<RX FDQ XVH D TXHU\ UHZULWLQJ WHFKQLTXH WR FRQILUP WKDW DISTINCT LV
QHHGHG-XVWUHSODFHcount(*)ZLWKitems.idWRVHHWKHGXSOLFDWHYDOXHV
A'
UP,
:LWKDISTINCTLVWKHTXHU\VWLOOIDVW"/HW¦VWU\EXPLAINRQFHDJDLQ
28 | Chapter 1:ಗBasics
mysql> EXPLAIN EXTENDED SELECT count(distinct items.id) FROM items
JOIN items_links ON (items.id=items_links.iid)\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: items_links
type: index
possible_keys: iid,iid_2
key: iid_2
key_len: 5
ref: NULL
rows: 6
filtered: 100.00
Extra: Using index
*************************** 2. row ***************************
id: 1
select_type: SIMPLE
table: items
type: eq_ref
possible_keys: PRIMARY
key: PRIMARY
key_len: 4
ref: collaborate2011.items_links.iid
rows: 1
filtered: 100.00
Extra: Using index
2 rows in set, 1 warning (0.00 sec)
,W VWLOO H[DPLQHV VL[ URZV 6R ZH FDQ FRQVLGHU WKH TXHU\ WR EH RSWLPL]HG IRU WKLV
SDUWLFXODUGDWDVHW,ZLOOH[SODLQODWHULQWKLVFKDSWHUZK\WKHVWUXFWXUHRIWKHGDWDDQG
LWVVL]HPDWWHU
,QRXUH[DPSOHWKHGDWDVHWZDVVPDOOVR,FRXOGQRWPDNHLWUXQUHDOO\VORZO\HYHQ
RQP\ODSWRS6WLOOWKHH[HFXWLRQWLPHVRIWKHRULJLQDODQGRSWLPL]HGTXHULHVGLIIHU
VXEVWDQWLDOO\7KLVZDVWKHRULJLQDOTXHU\
mysql> SELECT count(*) FROM items WHERE id IN (SELECT iid FROM
items_links );
+----------+
| count(*) |
+----------+
| 4 |
+----------+
1 row in set (0.21 sec)
$QGKHUHLVWKHRSWLPL]HGTXHU\
mysql> SELECT count(distinct items.id) FROM items JOIN items_links
ON (items.id=items_links.iid);
+--------------------------+
| count(distinct items.id) |
Slow Queries | 29
+--------------------------+
| 4 |
+--------------------------+
1 row in set (0.10 sec)
:HDFKLHYHGDWZRIROGLPSURYHPHQWHYHQIRUVXFKDVPDOOGDWDVHW)RURXUWHVWWKLV
LVMXVWVHFEXWIRUPLOOLRQVRIURZVWKHLPSURYHPHQWFDQEHZD\EHWWHU
■ <RXMXVWOHDUQHGDEDVLFTXHU\WXQLQJWHFKQLTXHZLWKWKHKHOSRIEXPLAINUHDGLQJ
LQIRUPDWLRQDERXWZKDWFXUUHQWO\KDSSHQVDQGFRPSDULQJLWWRZKDW\RXZLVKWR
UHDFK$VLPLODUSURFHVVFDQWXQHDQ\TXHU\IURPWKHVLPSOHVWWRWKHPRVWFRPSOH[
30 | Chapter 1:ಗBasics
+-------------+----------------------------------------------------------------+
| items_links | CREATE TEMPORARY TABLE `items_links` (
`iid` int(11) DEFAULT NULL,
`linkid` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------------+----------------------------------------------------------------+
1 row in set (0.00 sec)
$V\RXFDQVHHQRLQGH[LVVSHFLILHG/HW¦VWU\DQXQRSWLPL]HGTXHU\RQWKHVHWDEOHV
DQGWKHQLPSURYHLW
mysql> EXPLAIN EXTENDED SELECT count(distinct items.id) FROM items JOIN
items_links ON (items.id=items_links.iid)\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: items_links
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 6
filtered: 100.00
Extra:
*************************** 2. row ***************************
id: 1
select_type: SIMPLE
table: items
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 5137
filtered: 100.00
Extra: Using where; Using join buffer
2 rows in set, 1 warning (0.00 sec)
7KHW\SHEHFDPHALLWKHPRVWH[SHQVLYHW\SHEHFDXVHLWPHDQVDOOURZVZLOOEHUHDG
7KHTXHU\LVH[DPLQLQJ URZVQRZ7KLVLVHYHQZRUVHWKDQWKHTXHU\
ZHFRQVLGHUHGWREHVORZLQRXUHDUOLHUH[DPSOH
/HW¦VH[DPLQHWKHTXHU\LQGHWDLO
SELECT count(distinct items.id)...
7KLVTXHU\UHWXUQVWKHQXPEHURIXQLTXHQRWQXOOYDOXHVLQWKHUHVXOWVHW,WZRXOGPDNH
VHQVHWRDGGDQLQGH[RQitems.idVRWKDWWKLVVHDUFKFRXOGXVHLW
$QRWKHUSDUWRIWKHVDPHTXHU\
Slow Queries | 31
...FROM items JOIN items_links ON (items.id=items_links.iid)
7KHMRLQUHIHUVWRWKHidFROXPQIURPitemsDQGWKHiidFROXPQIURPitems_links6R
LWPDNHVVHQVHWRDGGLQGH[HVWRERWKRIWKRVHFROXPQV
mysql> ALTER TABLE items ADD INDEX(id);
Query OK, 5120 rows affected (4.78 sec)
Records: 5120 Duplicates: 0 Warnings: 0
1RZZHFDQVHHKRZWKLVDIIHFWVWKHTXHU\SODQ
mysql> EXPLAIN EXTENDED SELECT count(distinct items.id) FROM items
JOIN items_links ON (items.id=items_links.iid)\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: items_links
type: index
possible_keys: iid
key: iid
key_len: 5
ref: NULL
rows: 6
filtered: 100.00
Extra: Using index
*************************** 2. row ***************************
id: 1
select_type: SIMPLE
table: items
type: ref
possible_keys: id
key: id
key_len: 4
ref: collaborate2011.items_links.iid
rows: 1
filtered: 100.00
Extra: Using index
2 rows in set, 1 warning (0.00 sec)
7KLVORRNVPXFKEHWWHUWKDQEHIRUHZLWKDVLQJOHH[FHSWLRQWKHrefW\SHIRUWDEOHLWHPV
LVZRUVHWKDQWKHeq_refZHJRWLQWKHSUHYLRXVVHFWLRQ7KLVW\SHLVXVHGEHFDXVHZH
DGGHG D VLPSOH LQGH[ ZKHUHDV WKH RULJLQDO WDEOH KDG D XQLTXH LQGH[ RQ WKH VDPH
FROXPQ:HFDQHDVLO\FKDQJHWKHWHPSRUDU\WDEOHWRREHFDXVH,'VDUHXQLTXHDQGDUH
VXSSRVHGWREHVR
mysql> EXPLAIN EXTENDED SELECT count(distinct items.id) FROM items
JOIN items_links ON (items.id=items_links.iid)\G
32 | Chapter 1:ಗBasics
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: items_links
type: index
possible_keys: iid
key: iid
key_len: 5
ref: NULL
rows: 6
filtered: 100.00
Extra: Using index
*************************** 2. row ***************************
id: 1
select_type: SIMPLE
table: items
type: eq_ref
possible_keys: id_2,id
key: id_2
key_len: 4
ref: collaborate2011.items_links.iid
rows: 1
filtered: 100.00
Extra: Using index
2 rows in set, 1 warning (0.00 sec)
1RZZKHQWKHIDVWHUH[HFXWLQJW\SHeq_refLVXVHGZHFDQGURSWKHUHGXQGDQWLQGH[
RQ items.id7KLVLVHVSHFLDOO\LPSRUWDQWLI\RXFDUHDERXWWKHVSHHGRITXHULHVWKDW
PRGLI\ GDWD EHFDXVH XSGDWLQJ HDFK LQGH[ WDNHV WLPH :H ZLOO GLVFXVV ZKHQ TXHU\
WXQLQJVKRXOGEHVWRSSHGLQIROORZLQJVHFWLRQ
<RXMXVWOHDUQHGKRZLQGH[HVDIIHFWTXHU\H[HFXWLRQDQGZKHQLWPDNHVVHQVHWRDGG
WKHP
Slow Queries | 33
:KHQ\RXGRQ¦WIRUFHRULJQRUHDQLQGH[LWZLOOMXVWFUHDWHDSODQDVEHVWDVLWFDQ%XW
LI\RXH[SOLFLWO\VSHFLI\KRZLWVKRXOGXVHLQGH[HVLQRQHRIWKHWDEOHVIURPDPXOWLWDEOH
JOINVXFKDUXOHFDQDIIHFWRWKHUVDQGWKHILQDOH[HFXWLRQSODQFRXOGFKDQJHLQWKHQHZ
YHUVLRQWRVRPHWKLQJZRUVHWKDQLWZDVEHIRUH
8VLQJIGNORE INDEXDQGFORCE INDEXLQTXHULHVWKDWDFFHVVRQO\RQHWDEOHLVUHODWLYHO\
VDIH,QDOORWKHUFDVHV\RXPXVWFKHFNWRPDNHVXUHWKHTXHU\H[HFXWLRQSODQZDVQRW
FKDQJHGGXULQJWKHXSJUDGH
$QRWKHUSUREOHPZLWKXVLQJ IGNORE INDEXDQG FORCE INDEXLQSURGXFWLRQLVWKDWWKH
EHVW H[HFXWLRQ SODQ IRU SDUWLFXODU WDEOHV GHSHQGV RQ WKH GDWD WKH\ VWRUH ,Q QRUPDO
RSHUDWLRQWKHRSWLPL]HUFKHFNVWDEOHVWDWLVWLFVDQGDGMXVWVWKHSODQDVQHFHVVDU\ZKLFK
LWFDQ¦WGRZKHQ\RXXVHIGNORE INDEXDQGFORCE INDEX,I\RXXVHWKHVHFODXVHV\RX
PXVWUHJXODUO\FKHFNZKHWKHUWKH\DUHVWLOOHIIHFWLYHWKURXJKRXWWKHDSSOLFDWLRQ¦VOLIH
DOZD\VUHWXUQVDOOFROXPQVDQGURZVIURPWKHWDEOHDQGQRRSWLPL]DWLRQFDQEHDSSOLHG
WRLW
%XWHYHQLI\RXH[WUDFWDOOFROXPQVDGGLQJDJOINFDQFKDQJHWKHVLWXDWLRQ
SELECT * FROM child JOIN parent ON (child.pid=parent.id)
7KLVFDQEHRSWLPL]HGEHFDXVHWKHONFRQGLWLRQOLPLWVWKHUHVXOWVHW7KHVDPHDQDO\VLV
FDQEHDSSOLHGWRTXHULHVZLWKWHEREDQGGROUP BYFRQGLWLRQV
7KHVHFRQGWKLQJ\RXQHHGWRORRNDWLVWKHMRLQW\SHIURPWKHEXPLAINRXWSXW$OWKRXJK
\RXZLOOEHWU\LQJWRJHWWKHEHVWSRVVLEOH JOINW\SHVNHHSLQPLQGWKHOLPLWDWLRQVRI
\RXU GDWD )RU H[DPSOH D FRQGLWLRQ RQ D QRQXQLTXH URZ FDQ QHYHU OHDG WR W\SHV
eq_refRUEHWWHU
<RXUGDWDLVYHU\LPSRUWDQWZKHQ\RXRSWLPL]HTXHULHV'LIIHUHQFHVLQGDWDFDQOHDGWR
FRPSOHWHO\GLIIHUHQWUHVXOWVIRUWKHVDPHH[HFXWLRQSODQ7KHPRVWWULYLDOH[DPSOHLVWR
34 | Chapter 1:ಗBasics
FRPSDUHUHVXOWVIRUDVLQJOHURZLQDWDEOHWRUHVXOWVIRUDWDEOHZKHUHPRUHWKDQ
RIWKHURZVKDYHWKHVDPHYDOXH,QWKHVHFDVHVXVLQJLQGH[HVFDQGHFUHDVHSHUIRUPDQFH
UDWKHUWKDQLQFUHDVHLW
■ +HUHLVDQRWKHUUXOHGRQRWUHO\RQO\RQWKHEXPLAINRXWSXWPDNHVXUHWRPHDVXUH
WKHDFWXDOTXHU\H[HFXWLRQWLPH
$QRWKHUWKLQJ\RXVKRXOGNHHSLQPLQGLVWKHHIIHFWRILQGH[HVRQFKDQJHVWRWKHWDEOH
$OWKRXJKLQGH[HVXVXDOO\LPSURYHWKHVSHHGRI SELECTTXHULHVWKH\VOLJKWO\GHFUHDVH
WKHVSHHGRITXHULHVWKDWPRGLI\GDWDHVSHFLDOO\ INSERTVWDWHPHQWV7KHUHIRUHLWFDQ
VRPHWLPHVEHVHQVLEOHWROLYHZLWKVORZSELECTTXHULHVLILWVSHHGVXSWKHH[HFXWLRQRI
LQVHUWV$OZD\VNHHSLQPLQGWKHRYHUDOOSHUIRUPDQFHRI\RXUDSSOLFDWLRQQRWMXVWD
VLQJOHTXHU\
Effects of Options
6XSSRVH\RXKDYHFRPSOHWHO\RSWLPL]HG\RXUTXHU\DQGFDQ¦WILQGDQ\ZD\VWRWXQHLW
EHWWHUEXWLW¦VVWLOOVORZ&DQ\RXGRDQ\WKLQJWRLPSURYHLWVSHUIRUPDQFH"<HV7KHUH
DUHVHUYHURSWLRQVWKDWDOORZ\RXWRWXQHIDFWRUVDIIHFWLQJWKHTXHU\VXFKDVWKHVL]HRI
WHPSRUDU\WDEOHVLQPHPRU\EXIIHUVIRUVRUWLQJDQGVRRQ6RPHRSWLRQVVSHFLILFWRD
SDUWLFXODUVWRUDJHHQJLQHVXFKDV,QQR'%FDQDOVREHXVHIXOIRUTXHU\RSWLPL]LQJ
,ZLOOGHVFULEHWKHVHFRQILJXUDWLRQRSWLRQVLQPRUHGHWDLOLQ&KDSWHU+HUH,¦OOJLYHDQ
RYHUYLHZRIKRZWRXVHWKHPWRLPSURYHSHUIRUPDQFH
7XQLQJVHUYHURSWLRQVLVDVRPHZKDWJOREDODFWLYLW\EHFDXVHDFKDQJHFDQSRWHQWLDOO\
DIIHFWHYHU\TXHU\RQWKHVHUYHU RULQWKHFDVHRIHQJLQHVSHFLILFRSWLRQVHYHU\TXHU\
WKDWUHIHUVWRDWDEOHXVLQJWKDWVWRUDJHHQJLQH %XWVRPHRSWLRQVDUHXVHGIRUSDUWLFXODU
NLQGVRIRSWLPL]DWLRQDQGLI\RXUTXHU\GRHVQRWPHHWWKHULJKWFRQGLWLRQVLWUHPDLQV
XQDIIHFWHG
7KHILUVWRSWLRQVWRFKHFNDUHEXIIHUVL]HV(DFKPHPRU\EXIIHULVDOORFDWHGIRUVSHFLILF
UHDVRQV7KHJHQHUDOUXOHLVWKDWODUJHEXIIHUVPHDQKLJKHUSHUIRUPDQFH¢EXWRQO\LI
WKHTXHU\FDQXVHWKHODUJHUVL]HIRUWKHSDUWLFXODUUROHSOD\HGE\WKDWEXIIHU
$QGRIFRXUVHWKHUHDUHWUDGHRIIVZKHQ\RXLQFUHDVHEXIIHUVL]HV+HUHDUHVRPHRIWKH
LVVXHVODUJHEXIIHUVFDQFDXVH,GRQ¦WZDQWWRGLVVXDGH\RXIURPVHWWLQJODUJHEXIIHUV
EHFDXVHXQGHUWKHULJKWFLUFXPVWDQFHVLW¦VDJUHDWZD\WRLPSURYHSHUIRUPDQFHVLJQLI
LFDQWO\<RXMXVWQHHGWRNHHSWKHIROORZLQJLVVXHVLQPLQGDQGDGMXVWVL]HVUHDVRQDEO\
6ZDSSLQJ
$ODUJHEXIIHUPD\OHDGWRVZDSSLQJDWWKHRSHUDWLQJV\VWHPOHYHODQGWKHUHIRUH
VORZSHUIRUPDQFHGHSHQGLQJRQWKHVL]HRI5$0RQ\RXUV\VWHP,QJHQHUDOWKH
0\64/VHUYHUZRUNVIDVWLIDOOWKHPHPRU\LWQHHGVVLWVLQSK\VLFDO5$0:KHQLW
VWDUWVVZDSSLQJSHUIRUPDQFHGHJUDGHVGUDPDWLFDOO\
6ZDSSLQJFDQKDSSHQZKHQ\RXDOORFDWHPRUHPHPRU\WREXIIHUVWKDQ\RXUVHUYHU
KDVSK\VLFDOO\LQ5$03OHDVHQRWHWKDWVRPHEXIIHUVDUHDOORFDWHGIRUHDFKXVHU
Slow Queries | 35
WKUHDG7RGHWHUPLQHKRZPXFKPHPRU\WKHVHUYHUDOORFDWHVIRUVXFKEXIIHUVXVH
WKHIRUPXODPD[BFRQQHFWLRQV EXIIHUBVL]H&DOFXODWHWKHVXPRIWKLVSURGXFWIRU
DOOEXIIHUVDQGPDNHVXUHLWLVOHVVWKDQWKHDPRXQWRIPHPRU\WKHP\VTOGVHUYHU
FDQXVH7KLVFDOFXODWLRQLVQRWGHFLVLYHEHFDXVHP\VTOGFDQDFWXDOO\DOORFDWHPRUH
PHPRU\WKDQ\RXH[SOLFLWO\VSHFLI\
6WDUWXSWLPH
7KHPRUHPHPRU\P\VTOGQHHGVWRDOORFDWHWKHORQJHULWWDNHVWRVWDUW
6WDOHGDWD
7KHUHDUHDOVRVFDOLQJLVVXHVPRVWO\IRUFDFKHVVKDUHGEHWZHHQWKUHDGV6FDOLQJ
WKHEXIIHUVWKDWGRWKHFDFKLQJLQWKHVHFDVHVFDQOHDGWRPHPRU\IUDJPHQWDWLRQ
<RXZLOOJHQHUDOO\QRWLFHWKHIUDJPHQWDWLRQSUREOHPDIWHUKRXUVRIUXQQLQJWKH
VHUYHUZKHQROGGDWDQHHGVWREHUHPRYHGIURPWKHEXIIHULQRUGHUWRPDNHURRP
IRUQHZGDWD7KLVFDQFDXVHDIDVWVHUYHUWRVXGGHQO\VORZGRZQ,VKRZWKLVLQDQ
H[DPSOHLQ&KDSWHU
$IWHUILQLVKLQJZLWKEXIIHUVFRQVLGHURWKHURSWLRQVGLVFXVVHGLQ&KDSWHU3D\DWWHQ
WLRQQRWRQO\WRRSWLRQVH[SOLFLWO\GHVLJQDWHGIRUSHUIRUPDQFHWXQLQJVXFKDVRSWLPL]HU
RSWLRQVEXWDOVRWRRSWLRQVWKDWFRQWUROKLJKDYDLODELOLW\7KHVDIHU\RXPDNHDWUDQV
DFWLRQWKHPRUHFKHFNVDUHQHHGHGDQGWKHPRUHVORZO\WKHTXHU\H[HFXWHV%XWEH
FDUHIXOZLWKVXFKRSWLRQVWXQHWKHPZKHQDQGRQO\ZKHQ\RXFDQVDFULILFHVDIHW\IRU
SHUIRUPDQFH
:KHQ\RXWXQHRSWLRQVLWLVHVSHFLDOO\LPSRUWDQWWRFRQVLGHUSHUIRUPDQFHDVDZKROH
EHFDXVHHYHU\RSWLRQDIIHFWVWKHZKROHVHUYHU)RUH[DPSOHWKHUHLVQRVHQVHLQWXQLQJ
HQJLQHVSHFLILFRSWLRQVLI\RXGRQ¦WXVHWKDWHQJLQH7KLVPLJKWDSSHDUWRRREYLRXV
EXW,KDYHVHHQZD\WRRPDQ\LQVWDOODWLRQVZKHUH0\,6$0RSWLRQVZHUHKXJHZKHQ
RQO\WKH,QQR'%VWRUDJHHQJLQHZDVXVHGRUYLFHYHUVD7KLVLVHVSHFLDOO\LPSRUWDQWWR
UHPHPEHULI\RXWDNHVRPHJHQHULFFRQILJXUDWLRQDVDWHPSODWH
7KH0\64/VHUYHUDOORZV\RXWRFKDQJHPRVWRILWVFRQILJXUDWLRQG\QDPLFDOO\7KLVLV
YDOXDEOHIRUSHUIRUPDQFHWHVWLQJ&KDQJHRSWLRQVDQGUHUXQTXHULHVWRPDNHVXUH\RX
JHWJRRGUHVXOWVEHIRUHDSSO\LQJWKHFKDQJHVLQWKHFRQILJXUDWLRQILOH,WLVDOVRDOZD\V
DJRRGLGHDWRDSSO\FKDQJHVVWHSE\VWHSVRWKDW\RXFDQDWWULEXWHEDGHIIHFWVWRWKH
ULJKWRSWLRQDQGHDVLO\JREDFN:HZLOOGLVFXVVWKLVWHFKQLTXHLQGHWDLOLQ&KDSWHU
36 | Chapter 1:ಗBasics
LQWURGXFHGEXPLAINIRUINSERTUPDATEDQGDELETETXHULHVEXWUHPHPEHUWKDWUPDATE
DQGDELETEDUHVRPHWLPHVH[HFXWHGVOLJKWO\GLIIHUHQWO\IURPWKHFRUUHVSRQGLQJSELECT
&KHFNZKHWKHULQGH[HVZHUHXVHGE\TXHU\LQJWKH Handler_%VWDWXVYDULDEOHVEHIRUH
DQGDIWHUTXHU\H[HFXWLRQ
mysql> SHOW STATUS LIKE 'Handler_%'; o
+----------------------------+-------+
| Variable_name | Value |
+----------------------------+-------+
| Handler_commit | 0 |
| Handler_delete | 0 |
| Handler_discover | 0 |
| Handler_prepare | 0 |
| Handler_read_first | 0 |
| Handler_read_key | 0 |
| Handler_read_last | 0 |
| Handler_read_next | 0 |
| Handler_read_prev | 0 |
| Handler_read_rnd | 0 |
| Handler_read_rnd_next | 19 |
| Handler_rollback | 0 |
| Handler_savepoint | 0 |
| Handler_savepoint_rollback | 0 |
| Handler_update | 0 |
| Handler_write | 17 |
+----------------------------+-------+
16 rows in set (0.00 sec)
* 4a
:H¦OOWDONDERXWSDUWLFXODUYDULDEOHVLQWKHSUHFHGLQJOLVWDVZHFRQWLQXH<RXVKRXOG
EHDZDUHWKRXJKWKDWWKHVHDUHFXPXODWLYHYDOXHVVRWKH\LQFUHDVHDV\RXLVVXHHDFK
TXHU\1RZOHW¦VWXQHRXUH[DPSOHTXHU\IURP£:KHQWKH3UREOHP0D\+DYH%HHQD
3UHYLRXV8SGDWH¤RQSDJHVRWKDWLWZLOOXSGDWHQXOODEOHFROXPQV
mysql> UPDATE items SET description = 'no description', additional
= 'no additional comments' WHERE description IS NULL;
Query OK, 0 rows affected (6.95 sec)
Rows matched: 0 Changed: 0 Warnings: 0
7KLVFKDQJHGQRURZVEHFDXVHZHFRUUXSWHGWKHGDWDLQDQHDUOLHUVWHSZHKDYHLQ
HDFKILHOGLQVWHDGRINULLQRZ%XWWKHTXHU\UXQVYHU\VORZO\/HW¦VORRNDWWKHKDQGOHU
YDULDEOHV
mysql> show status like 'Handler_%';
+----------------------------+-------+
Slow Queries | 37
| Variable_name | Value |
+----------------------------+-------+
| Handler_commit | 1 |
| Handler_delete | 0 |
| Handler_discover | 0 |
| Handler_prepare | 0 |
| Handler_read_first | 1 |
| Handler_read_key | 2 |
| Handler_read_last | 0 |
| Handler_read_next | 0 |
| Handler_read_prev | 0 |
| Handler_read_rnd | 0 |
| Handler_read_rnd_next | 5140 |
| Handler_rollback | 0 |
| Handler_savepoint | 0 |
| Handler_savepoint_rollback | 0 |
| Handler_update | 0 |
| Handler_write | 17 |
+----------------------------+-------+
16 rows in set (0.01 sec)
:KDWMXPSVRXWLVWKHKLJKYDOXHRI Handler_read_rnd_nextZKLFKVKRZVKRZRIWHQ
WKHQH[WURZLQDGDWDILOHZDVUHDG$KLJKYDOXHW\SLFDOO\PHDQVWKDWDWDEOHVFDQZDV
XVHGZKLFKLVQRWJRRGIRUSHUIRUPDQFHHandler_read_keyLVDUHODWHGYDULDEOHVKRZLQJ
WKH QXPEHU RI LQGH[ UHDG UHTXHVWV ,W VKRXOGQ¦W EH VR ORZ LQ UHODWLRQ WR
Handler_read_rnd_nextEHFDXVHWKDWPHDQVDORWRIURZVZHUHUHDGLQVWHDGRIXVLQJDQ
LQGH[,QDGGLWLRQWKHYDOXHVRIHandler_commitDQGHandler_read_firstKDYHLQFUHDVHG
VOLJKWO\7KHVHUHIHUUHVSHFWLYHO\WRWKHQXPEHURIFRPPLWVDQGWKHQXPEHURIWLPHV
WKHILUVWHQWU\LQDQLQGH[ZDVUHDG)LQDOO\WKHXQREWUXVLYHLQ Handler_read_first
VKRZVWKDWZHDVNHGWKHVHUYHUWRUHDGDILUVWHQWU\LQWKHLQGH[ZKLFKFDQEHDV\PSWRP
RIDIXOOLQGH[VFDQ
+RSHIXOO\WKLVUXQWKURXJKRIDIHZ Handler_%VWDWXVYDULDEOHVKDVVKRZQ\RXKRZ
WKH\FDQEHXVHGWRFKHFNKRZTXHULHVDUHUXQQLQJ,¦OOOHDYHWKHTXHVWLRQRIZKHWKHU
WKHVSHHGRIWKLVTXHU\FDQEHLPSURYHGDVKRPHZRUNIRU\RX
,¦OOMXVWVSHQGDOLWWOHVSDFHRQ INSERTTXHULHV7KH\KDYHQRFRQGLWLRQVWKDWOLPLWWKH
VHWRIURZVDIIHFWHGVRWKHSUHVHQFHRILQGH[HVLQDWDEOHPHUHO\VORZVWKHPGRZQ
EHFDXVHHDFKLQVHUWKDVWRXSGDWHWKHLQGH[HV7KHSHUIRUPDQFHRILQVHUWVVKRXOGEH
WXQHGXVLQJVHUYHURSWLRQV+HUHHVSHFLDOO\WKHRSWLRQVRIIHUHGE\WKH,QQR'%VWRUDJH
HQJLQHFDQEHKHOSIXO
2QHZD\WRVSHHGXSLQVHUWVLVWRFRPELQHPDQ\RIWKHPLQRQHVWDWHPHQWDOVRFDOOHG
£EXONLQVHUW¤
insert into t1 (f1, f2, f3, ...) values (v1, v2, v3, ...), (v1, v2, v3, ...), ...
%XWSOHDVHQRWHWKDWLQVHUWVEORFNWDEOHURZVRUHYHQZKROHWDEOHVVRRWKHUTXHULHVDUH
GHQLHGDFFHVVZKLOHWKHLQVHUWUXQV6R,¦OOHQGWKLVVHFWLRQE\UHSHDWLQJWKHJHQHUDOUXOH
■ .HHSWKHSHUIRUPDQFHRIWKHZKROHDSSOLFDWLRQLQPLQGZKLOHWXQLQJDQ\VLQJOH
TXHU\
38 | Chapter 1:ಗBasics
No Silver Bullet
:H MXVW OHDUQHG KRZ WXQLQJ VHUYHU RSWLRQV FDQ GUDPDWLFDOO\ LPSURYH SHUIRUPDQFH
:H¦YHDOVRVHHQLQWKLVFKDSWHUKRZWRWXQHDSDUWLFXODUTXHU\VRLWUXQVUHDOO\IDVW
7XQLQJ D TXHU\ DQG WXQLQJ D VHUYHU DUH RIWHQ DOWHUQDWLYH VROXWLRQV WR SHUIRUPDQFH
SUREOHPV,VWKHUHDQ\JHQHUDOUXOHDERXWZKLFKNLQGRIWXQLQJ\RXVKRXOGVWDUWZLWK"
, DP DIUDLG QRW 7XQLQJ VHUYHU RSWLRQV ORRNV VR SURPLVLQJ WKDW PDQ\ SHRSOH WKLQN
ILQGLQJDQGFKDQJLQJWKHULJKWRSWLRQZLOOPDNHP\VTOGUXQOLNHDURFNHW,I\RXEHOLHYH
WKDWWRR,KDYHWRGLVDSSRLQW\RXEDGO\ZULWWHQTXHULHVZLOOVWLOOEHDGUDLQRQVHUYHU
UHVRXUFHV$QG\RXPD\HQMR\JRRGSHUIRUPDQFHIRUDIHZKRXUVDIWHUUHVWDUWLQJWKH
VHUYHURQO\WRVHHLWGHFUHDVHDJDLQEHFDXVHHYHU\TXHU\ZLOOQHHGDORWRIUHVRXUFHVDQG
\RXUFDFKHVZLOOILOOXS$WWLPHVWKHVHUYHUZLOOEHLQXQGDWHGZLWKPLOOLRQVRITXHULHV
WKDWZDQWPRUHDQGPRUHUHVRXUFHV
+RZHYHUWXQLQJHYHU\VLQJOHTXHU\PLJKWQRWEHDQRSWLRQ6RPHRIWKHPDUHFDOOHG
UDUHO\VRWKHUHLVQRQHHGWRVSHQGKXPDQUHVRXUFHVRQWKHP2WKHUVPD\TXHU\DOO
WKHURZVLQDWDEOHZKLFKGHIHDWVDWWHPSWVWRRSWLPL]HWKHP
, XVXDOO\ DGYRFDWH VRPH NLQG RI £PL[HG¤ PRGH 7XQH VHUYHU RSWLRQV ILUVW SD\LQJ
SDUWLFXODUDWWHQWLRQWRRSWLRQVVSHFLILFWR\RXUVWRUDJHHQJLQHWKHQWXQHTXHULHV$IWHU
WKHLPSRUWDQWTXHULHVDUHWXQHGJREDFNWRWKHVHUYHURSWLRQVDQGFRQVLGHUZKDW\RX
FDQWXQHPRUHWKHQEDFNWRWKHUHVWRIWKHTXHULHVDQGVRRQXQWLO\RXDUHKDSS\ZLWK
SHUIRUPDQFH
<RXFDQDOVRVWDUWZLWKWKHVORZHVWTXHULHVLQ\RXUDSSOLFDWLRQRUILQGRQHVWKDWFDQ
REYLRXVO\EHQHILWIURPWULYLDORSWLPL]DWLRQVWKHQWXUQWRVHUYHURSWLRQV&RQVXOWWKH
VWDWXVYDULDEOHVDVVKRZQHDUOLHU,ZLOOGHVFULEHWKHPLQPRUHGHWDLOLQ&KDSWHU
/DVWEXWQRWOHDVWXVHQXPHURXVLQIRUPDWLRQVRXUFHVRQSHUIRUPDQFHWXQLQJWRFUHDWH
\RXURZQVWUDWHJ\
6RLI\RXILQGVXFKDPHVVDJHWKHVHUYHUKDVEHHQUHVWDUWHG,IWKHUHLVQRPHVVDJHDQG
WKHVHUYHULVXSDQGUXQQLQJDORVWFRQQHFWLRQLVPRVWOLNHO\FDXVHGE\WKHPLVXVHRI
FRQQHFWLRQRSWLRQVZKLFKZLOOEHGLVFXVVHGLQ&KDSWHU
,I\RXUHPHPEHUZKHQ\RXU0\64/VHUYHUZDVRULJLQDOO\VWDUWHG\RX
FDQXVHWKHVWDWXVYDULDEOHuptimeZKLFKVKRZVWKHQXPEHURIVHFRQGV
m
UP, VLQFHWKHVHUYHUVWDUWHG
mysql> SHOW GLOBAL STATUS LIKE 'uptime';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Uptime | 10447 |
+---------------+-------+
1 row in set (0.00 sec)
7KLV LQIRUPDWLRQ ZLOO DOVR KHOS ZKHQ \RX ZDQW WR FKHFN ZKHWKHU
P\VTOGIDLOXUHZDVQRWFDXVHGE\DQRSHUDWLQJV\VWHPUHVWDUW-XVWFRP
SDUHWKHYDOXHRIWKLVYDULDEOHZLWKWKHRSHUDWLQJV\VWHPXSWLPH
7KHUHDVRQZK\,UHO\RQHUURUORJILOHVFRPHVIURPP\MREH[SHULHQFH
ZLWKFDVHVZKHQFXVWRPHUVQRWLFHDSUREOHPKRXUVDIWHUDVHUYHUFUDVK
DQGHYHQVRPHWLPHDIWHUDSODQQHGP\VTOGUHVWDUW
,I\RXFRQILUPWKDWWKHVHUYHUKDVUHVWDUWHG\RXVKRXOGH[DPLQHWKHHUURUORJDJDLQ
DQGORRNIRULQIRUPDWLRQDERXWWKHFUDVKLWVHOI8VXDOO\\RXFDQGHULYHHQRXJKLQIRU
PDWLRQDERXWWKHFUDVKIURPWKHHUURUORJWRDYRLGWKHVDPHVLWXDWLRQLQWKHIXWXUH
:H¦OOGLVFXVVKRZWRLQYHVWLJDWHWKHVPDOOQXPEHURIGLIILFXOWFDVHV\RXPD\HQFRXQWHU
LQ &KDSWHU 1RZ OHW¦V JR EDFN WR WKH HUURU ORJILOH DQG VHH H[DPSOHV RI LWV W\SLFDO
FRQWHQWVLQFDVHRIDVHUYHUFUDVK,¦OOOLVWDODUJHH[WUDFWKHUH
Version: '5.1.39' socket: '/tmp/mysql_sandbox5139.sock' port: 5139
MySQL Community Server (GPL)
091002 14:56:54 - mysqld got signal 11 ;
This could be because you hit a bug. It is also possible that this binary
or one of the libraries it was linked against is corrupt, improperly built,
or misconfigured. This error can also be caused by malfunctioning hardware.
We will try our best to scrape up some info that will hopefully help diagnose
the problem, but since we have already crashed, something is definitely wrong
and this may fail.
key_buffer_size=8384512
read_buffer_size=131072
max_used_connections=1
max_threads=151
threads_connected=1
40 | Chapter 1:ಗBasics
key_buffer_size + (read_buffer_size + sort_buffer_size)*max_threads = 338301 K
bytes of memory
Hope that's ok; if not, decrease some variables in the equation.
thd: 0x69e1b00
Attempting backtrace. You can use the following information to find out
where mysqld died. If you see no messages after this, something went
terribly wrong...
stack_bottom = 0x450890f0 thread_stack 0x40000
/users/ssmirnova/blade12/5.1.39/bin/mysqld(my_print_stacktrace+0x2e)[0x8ac81e]
/users/ssmirnova/blade12/5.1.39/bin/mysqld(handle_segfault+0x322)[0x5df502]
/lib64/libpthread.so.0[0x3429e0dd40]
/users/ssmirnova/blade12/5.1.39/bin/mysqld(_ZN6String4copyERKS_+0x16)[0x5d9876]
/users/ssmirnova/blade12/5.1.39/bin/mysqld(_ZN14Item_cache_str5storeEP4Item+0xc9)
[0x52ddd9]
/users/ssmirnova/blade12/5.1.39/bin/mysqld(_ZN26select_singlerow_subselect9send_
dataER4ListI4ItemE+0x45)
[0x5ca145]
/users/ssmirnova/blade12/5.1.39/bin/mysqld[0x6386d1]
/users/ssmirnova/blade12/5.1.39/bin/mysqld[0x64236a]
/users/ssmirnova/blade12/5.1.39/bin/mysqld(_ZN4JOIN4execEv+0x949)[0x658869]
/users/ssmirnova/blade12/5.1.39/bin/mysqld(_ZN30subselect_single_select_
engine4execEv+0x36c)[0x596f3c]
/users/ssmirnova/blade12/5.1.39/bin/mysqld(_ZN14Item_subselect4execEv+0x26)[0x595d96]
/users/ssmirnova/blade12/5.1.39/bin/mysqld(_ZN24Item_singlerow_subselect8val_
realEv+0xd)[0x595fbd]
/users/ssmirnova/blade12/5.1.39/bin/mysqld(_ZN14Arg_comparator18compare_real_
fixedEv+0x39)[0x561b89]
/users/ssmirnova/blade12/5.1.39/bin/mysqld(_ZN12Item_func_ne7val_intEv+0x23)[0x568fb3]
/users/ssmirnova/blade12/5.1.39/bin/mysqld(_ZN4JOIN8optimizeEv+0x12ef)[0x65208f]
/users/ssmirnova/blade12/5.1.39/bin/mysqld(_Z12mysql_selectP3THDPPP4ItemP10TABLE_
LISTjR4ListIS1_ES2_jP8
st_orderSB_S2_SB_yP13select_resultP18st_select_lex_unitP13st_select_lex+0xa0)
[0x654850]
/users/ssmirnova/blade12/5.1.39/bin/mysqld(_Z13handle_selectP3THDP6st_lexP13select_
resultm+0x16c)
[0x65a1cc]
/users/ssmirnova/blade12/5.1.39/bin/mysqld[0x5ecbda]
/users/ssmirnova/blade12/5.1.39/bin/mysqld(_Z21mysql_execute_commandP3THD+0x602)
[0x5efdd2]
/users/ssmirnova/blade12/5.1.39/bin/mysqld(_Z11mysql_parseP3THDPKcjPS2_+0x357)
[0x5f52f7]
/users/ssmirnova/blade12/5.1.39/bin/mysqld(_Z16dispatch_command19enum_server_
commandP3THDPcj+0xe93)
[0x5f6193]
/users/ssmirnova/blade12/5.1.39/bin/mysqld(_Z10do_commandP3THD+0xe6)[0x5f6a56]
/users/ssmirnova/blade12/5.1.39/bin/mysqld(handle_one_connection+0x246)[0x5e93f6]
/lib64/libpthread.so.0[0x3429e061b5]
/lib64/libc.so.6(clone+0x6d)[0x34292cd39d]`)
Trying to get some variables.
Some pointers may be invalid and cause the dump to abort...
thd->query at 0x6a39e60 = select 1 from `t1` where `c0` <>
(select geometrycollectionfromwkb(`c3`) from `t1`)
thd->thread_id=2
thd->killed=NOT_KILLED
7KHNH\OLQHLQGLFDWLQJWKHUHDVRQIRUWKHFUDVKLV
091002 14:56:54 - mysqld got signal 11 ;
7KLV PHDQV WKH 0\64/ VHUYHU ZDV NLOOHG DIWHU LW DVNHG WKH RSHUDWLQJ V\VWHP IRU D
UHVRXUFH HJDFFHVVWRDILOHRU5$0 JHWWLQJDQHUURUZLWKFRGH,QPRVWRSHUDWLQJ
V\VWHPVWKLVVLJQDOUHIHUVWRDVHJPHQWDWLRQIDXOW<RXFDQILQGPRUHGHWDLOHGLQIRU
PDWLRQLQWKHXVHUPDQXDOIRU\RXURSHUDWLQJV\VWHP5XQ man signalIRU8QL[DQG
/LQX[,Q:LQGRZVVLPLODUFDVHVZLOOXVXDOO\JHQHUDWHDORJPHVVDJHOLNH£P\VTOGJRW
H[FHSWLRQ[F¤6HDUFKWKH:LQGRZVXVHUPDQXDOIRUWKHPHDQLQJVRIWKHVH
H[FHSWLRQFRGHV
7KHIROORZLQJLVWKHH[FHUSWIURPWKHORJDERXWDTXHU\WKDWZDVUXQQLQJLQWKHWKUHDG
WKDWFUDVKHGWKHVHUYHU
Trying to get some variables.
Some pointers may be invalid and cause the dump to abort...
thd->query at 0x6a39e60 = SELECT 1 FROM `t1` WHERE `c0` <>
(SELECT geometrycollectionfromwkb(`c3`) FROM `t1`)
thd->thread_id=2
thd->killed=NOT_KILLED
7RGLDJQRVHUHUXQWKHTXHU\WRVHHZKHWKHULWZDVWKHFDXVHRIWKHFUDVK
mysql> SELECT 1 FROM `t1` WHERE `c0` <> (SELECT
geometrycollectionfromwkb(`c3`) FROM `t1`);
ERROR 2013 (HY000): Lost connection to MySQL server during query
$WWKLVSRLQW\RXKDYHLGHQWLILHGWKHVRXUFHRIWKHFUDVKDQGFRQILUPHGWKLVZDVUHDOO\
WKHVRXUFHEXW\RXKDYHWRUHZULWHWKHTXHU\VRLWGRHVQRWFDXVHDFUDVKQH[WWLPH
1RZZHFDQJHWKHOSIURPWKHEDFNWUDFHWKDWZDVSULQWHGLQWKHORJ
Attempting backtrace. You can use the following information to find out
where mysqld died. If you see no messages after this, something went
terribly wrong...
stack_bottom = 0x450890f0 thread_stack 0x40000
/users/ssmirnova/blade12/5.1.39/bin/mysqld(my_print_stacktrace+0x2e)[0x8ac81e]
/users/ssmirnova/blade12/5.1.39/bin/mysqld(handle_segfault+0x322)[0x5df502]
/lib64/libpthread.so.0[0x3429e0dd40]
/users/ssmirnova/blade12/5.1.39/bin/mysqld(_ZN6String4copyERKS_+0x16)[0x5d9876]
/users/ssmirnova/blade12/5.1.39/bin/mysqld(_ZN14Item_cache_str5storeEP4Item+0xc9)
[0x52ddd9]
/users/ssmirnova/blade12/5.1.39/bin/mysqld(_ZN26select_singlerow_subselect9
42 | Chapter 1:ಗBasics
send_dataER4ListI4ItemE+0x45)
[0x5ca145]
/users/ssmirnova/blade12/5.1.39/bin/mysqld[0x6386d1]
/users/ssmirnova/blade12/5.1.39/bin/mysqld[0x64236a]
/users/ssmirnova/blade12/5.1.39/bin/mysqld(_ZN4JOIN4execEv+0x949)[0x658869]
/users/ssmirnova/blade12/5.1.39/bin/mysqld(_ZN30subselect_single_select_engine4execEv
+0x36c)[0x596f3c]
/users/ssmirnova/blade12/5.1.39/bin/mysqld(_ZN14Item_subselect4execEv+0x26)[0x595d96]
/users/ssmirnova/blade12/5.1.39/bin/mysqld(_ZN24Item_singlerow_subselect8val_realEv
+0xd)[0x595fbd]
/users/ssmirnova/blade12/5.1.39/bin/mysqld(_ZN14Arg_comparator18compare_real_fixedEv
+0x39)[0x561b89]
/users/ssmirnova/blade12/5.1.39/bin/mysqld(_ZN12Item_func_ne7val_intEv+0x23)[0x568fb3]
/users/ssmirnova/blade12/5.1.39/bin/mysqld(_ZN4JOIN8optimizeEv+0x12ef)[0x65208f]
/users/ssmirnova/blade12/5.1.39/bin/mysqld(_Z12mysql_selectP3THDPPP4ItemP10TABLE_
LISTjR4ListIS1_ES2_jP8
st_orderSB_S2_SB_yP13select_resultP18st_select_lex_unitP13st_select_lex+0xa0)
[0x654850]
/users/ssmirnova/blade12/5.1.39/bin/mysqld(_Z13handle_selectP3THDP6st_lexP13select_
resultm+0x16c)
[0x65a1cc]
/users/ssmirnova/blade12/5.1.39/bin/mysqld[0x5ecbda]
/users/ssmirnova/blade12/5.1.39/bin/mysqld(_Z21mysql_execute_commandP3THD+0x602)
[0x5efdd2]
/users/ssmirnova/blade12/5.1.39/bin/mysqld(_Z11mysql_parseP3THDPKcjPS2_+0x357)
[0x5f52f7]
/users/ssmirnova/blade12/5.1.39/bin/mysqld(_Z16dispatch_command19enum_server_
commandP3THDPcj+0xe93)
[0x5f6193]
/users/ssmirnova/blade12/5.1.39/bin/mysqld(_Z10do_commandP3THD+0xe6)[0x5f6a56]
/users/ssmirnova/blade12/5.1.39/bin/mysqld(handle_one_connection+0x246)[0x5e93f6]
/lib64/libpthread.so.0[0x3429e061b5]
/lib64/libc.so.6(clone+0x6d)[0x34292cd39d]`)
7KHUHOHYDQWOLQHVDUHWKHFDOOVWRItem_subselectDQGItem_singlerow_subselect
/users/ssmirnova/blade12/5.1.39/bin/mysqld(_ZN14Item_subselect4execEv+0x26)[0x595d96]
/users/ssmirnova/blade12/5.1.39/bin/mysqld(_ZN24Item_singlerow_subselect8val_realEv
+0xd)[0x595fbd]
+RZGLG,GHFLGHWKHVHZHUHWKHFXOSULWV",QWKLVFDVH,UHFRJQL]HGWKHFDOOVIURPP\
SUHYLRXVWURXEOHVKRRWLQJ%XWDJRRGUXOHRIWKXPELVWRVWDUWIURPWKHWRS7KHVHILUVW
IXQFWLRQVDUHXVXDOO\RSHUDWLQJV\VWHPFDOOVZKLFKFDQEHUHOHYDQWEXWDUHRIQRKHOS
LQWKHVHFLUFXPVWDQFHVEHFDXVH\RXFDQQRWGRDQ\WKLQJZLWKWKHPDQGWKHQIROORZ
FDOOVWRWKH0\64/OLEUDU\([DPLQHWKHVHIURPWRSWRERWWRPWRILQGZKLFKRQHV\RX
FDQ DIIHFW <RX FDQ¦W GR DQ\WKLQJ ZLWK String4copy RU Item_cache_str5store IRU
LQVWDQFHEXW\RXFDQUHZULWHDVXEVHOHFWVRZH¦OOVWDUWIURPWKHUH
+HUHHYHQZLWKRXWORRNLQJLQWRWKHVRXUFHFRGHIRUP\VTOGZHFDQSOD\DURXQGWRILQG
WKHFDXVHRIWKHFUDVK,W¦VDJRRGJXHVVWKDWWKHXVHRIDVXETXHU\LVWKHSUREOHPEHFDXVH
VXETXHULHVFDQEHFRQYHUWHGHDVLO\WRJOIN/HW¦VWU\UHZULWLQJWKHTXHU\DQGWHVWLQJLW
mysql> SELECT 1 FROM `t1` WHERE `c0` <> geometrycollectionfromwkb(`c3`);
Empty set (0.00 sec)
6XFKHVWLPDWLRQVDUHQRWSUHFLVHEXWVWLOOZRUWKFKHFNLQJ7KHRQHMXVWVKRZQFODLPV
WKDWP\VTOGFDQXVHXSWR*5$0<RXFDQJHWSRZHUIXOER[HVQRZDGD\VEXWLWLV
ZRUWKFKHFNLQJZKHWKHU\RXUHDOO\KDYH*5$0
$QRWKHULVVXHLQWKHHQYLURQPHQWLVRWKHUDSSOLFDWLRQVWKDWUXQDORQJZLWKWKH0\64/
VHUYHU,WLVDOZD\VDJRRGLGHDWRGHGLFDWHDVHUYHUIRU0\64/LQSURGXFWLRQEHFDXVH
RWKHUDSSOLFDWLRQVFDQXVHUHVRXUFHVWKDW\RXH[SHFW0\64/WRXVH:HZLOOGHVFULEH
KRZWRGHEXJWKHHIIHFWVRIRWKHUDSSOLFDWLRQVRQP\VTOGLQ&KDSWHU
44 | Chapter 1:ಗBasics
SUREOHPV:H¦OOFRYHUDIHZEDVLFSUREOHPVWKDWXVHWRROVVSHFLILFWR0\,6$0RU,Q
QR'%EHFDXVHWKHVHDUHWKHPRVWSRSXODUDQGIUHTXHQWO\XVHGVWRUDJHHQJLQHV,I\RX
XVHDWKLUGSDUW\VWRUDJHHQJLQHFRQVXOWLWVXVHUPDQXDOIRUXVHIXOWRROV
(UURUVUHODWHGWRDVWRUDJHHQJLQHDUHHLWKHUUHSRUWHGEDFNWRWKHFOLHQWRUUHFRUGHGLQ
WKHHUURUORJILOH8VXDOO\WKHQDPHRIWKHVWRUDJHHQJLQHDSSHDUVLQWKHHUURUPHVVDJH
,QUDUHFDVHV\RXZLOOJHWDQHUURUQXPEHUQRWNQRZQE\WKHSHUURUXWLOLW\7KLVLV
XVXDOO\DV\PSWRPRIDQLVVXHZLWKDVWRUDJHHQJLQH
2QHFRPPRQVWRUDJHHQJLQHLVVXHLVFRUUXSWLRQ7KLVLVQRWDOZD\VWKHIDXOWRIWKH
VWRUDJHHQJLQHEXWFDQKDYHDQH[WHUQDOFDXVHVXFKDVGLVNGDPDJHDV\VWHPFUDVKRU
D0\64/VHUYHUFUDVK)RUH[DPSOHLIVRPHERG\UXQVkill -9RQWKHVHUYHU¦VSURFHVV
VKHLVDOPRVWDVNLQJIRUGDWDFRUUXSWLRQ:HZLOOGLVFXVVKHUHZKDWWRGRLQFDVHRI
0\,6$0DQG,QQR'%FRUUXSWLRQ:HZLOOQRWGLVFXVVKRZWRIL[FRUUXSWLRQRIDWKLUG
SDUW\VWRUDJHHQJLQHFRQVXOWLWVGRFXPHQWDWLRQIRUJXLGDQFH$VDJHQHUDOUHFRPPHQ
GDWLRQ\RXFDQWU\CHECK TABLEZKLFKPDQ\VWRUDJHHQJLQHVVXSSRUW CHECK TABLEIRU
WKH 0\,6$0 VWRUDJH HQJLQH LV H[SODLQHG LQ £5HSDLULQJ D 0\,6$0 WDEOH IURP
64/¤RQSDJH
&RUUXSWLRQLVDGLIILFXOWSUREOHPWRGLDJQRVHEHFDXVHWKHXVHUPLJKWQRWQRWLFHLWXQWLO
WKH0\64/VHUYHUDFFHVVHVDFRUUXSWHGWDEOH7KHV\PSWRPVFDQDOVREHPLVOHDGLQJ
,QWKHEHVWFDVH\RXZLOOJHWDQHUURUPHVVDJH+RZHYHUWKHSUREOHPPLJKWEHPDQL
IHVWHGE\LQFRUUHFWH[HFXWLRQRITXHULHVRUHYHQDVHUYHUVKXWGRZQ,ISUREOHPVFURS
XSVXGGHQO\RQDSDUWLFXODUWDEOHDOZD\VFKHFNIRUFRUUXSWLRQ
2QFH\RXVXVSHFWFRUUXSWLRQ\RXQHHGWRUHSDLUWKHFRUUXSWHGWDEOH
,W¦VDOZD\VDJRRGSUDFWLFHWREDFNXSWDEOHILOHVEHIRUHGRLQJDUHSDLU
m
UP, VR\RXFDQJREDFNLIVRPHWKLQJJRHVZURQJ
MyISAM Corruption
0\,6$0VWRUHV HYHU\ WDEOH DV D VHW RI WKUHHILOHV table_nameIUPFRQWDLQVWKHWDEOH
VWUXFWXUH VFKHPD table_name0<'FRQWDLQVWKHGDWDDQGtable_name0<,FRQWDLQV
WKHLQGH[&RUUXSWLRQFDQGDPDJHWKHGDWDILOHWKHLQGH[ILOHRUERWK,QVXFKFDVHV
\RXZLOOJHWDQHUURUOLNH"ERROR 126 (HY000): Incorrect key file for table './test/
t1.MYI'; try to repair it"RU "Table './test/t2' is marked as crashed and last
(automatic?) repair failed"ZKHQ\RXDFFHVVWKHWDEOH7KHHUURUPHVVDJHFDQYDU\
EXWFKHFNIRUWKHZRUGV£UHSDLU¤RU£FUDVKHG¤DVDFOXHWKDWWKHWDEOHLVFRUUXSWHG
7KH64/VWDWHPHQWVCHECK TABLEDQGREPAIR TABLEWURXEOHVKRRWFRUUXSWLRQ)URPWKH
RSHUDWLQJV\VWHPVKHOO\RXFDQDOVRXVHGWKHP\LVDPFKNXWLOLW\IRUWKHVDPHSXUSRVH
2QHDGYDQWDJHRIP\LVDPFKNLVWKDW\RXFDQXVHLWZLWKRXWDFFHVVWRDUXQQLQJ0\64/
VHUYHU)RULQVWDQFH\RXFDQWU\WRUHSDLUDWDEOHDIWHUDFUDVKEHIRUHEULQJLQJXSWKH
VHUYHUDJDLQ
7KLVLVDQH[DPSOHRIRXWSXWIRUDFRUUXSWHGWDEOH<RXUILUVWUHVRUWLVWRUXQ REPAIR
TABLEZLWKRXWSDUDPHWHUV
mysql> REPAIR TABLE t2;
+---------+--------+----------+----------------------------------------+
| Table | Op | Msg_type | Msg_text |
+---------+--------+----------+----------------------------------------+
| test.t2 | repair | warning | Number of rows changed from 208 to 780 |
| test.t2 | repair | status | OK |
+---------+--------+----------+----------------------------------------+
2 rows in set (0.05 sec)
7KLVWLPHZHZHUHOXFN\DQGWKHWDEOHZDVUHSDLUHGVXFFHVVIXOO\:HFDQUXQ CHECK
TABLEDJDLQWRFRQILUPWKLV
mysql> CHECK TABLE t2;
+---------+-------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+---------+-------+----------+----------+
| test.t2 | check | status | OK |
+---------+-------+----------+----------+
1 row in set (0.02 sec)
)RUWKHYHU\VDPHSXUSRVH\RXFDQXVHDXWLOLW\QDPHGP\VTOFKHFN7KLV
SURJUDPZRUNVE\VHQGLQJCHECKDQGREPAIRVWDWHPHQWVWRWKHVHUYHU,W
m
UP, DOVRKDVYHU\QLFHRSWLRQVVXFKDV--all-databasesZKLFKFDQKHOS\RX
SHUIRUPWDEOHPDLQWHQDQFHHIIHFWLYHO\
P\VTOFKHFNFRQQHFWVWRWKH0\64/VHUYHUDVDQ\RWKHUFOLHQWGRHVDQG
WKXVFDQEHXVHGUHPRWHO\
46 | Chapter 1:ಗBasics
Repairing a MyISAM table using myisamchk
$OORIWKHVHVWHSVFDQDOVREHSHUIRUPHGXVLQJP\LVDPFKNZKLFKKDVDORWRIDGGLWLRQDO
WDEOH PDLQWHQDQFH RSWLRQV , ZRQ¦W GHVFULEH DOO WKH IHDWXUHV RI WKH XWLOLW\ KHUH EXW
LQVWHDGFRQFHQWUDWHRQWKRVHVSHFLILFWRWDEOHUHSDLU
P\LVDPFKNGLUHFWO\DFFHVVHVWDEOHILOHVDQGGRHVQRWUHTXLUHWKH0\64/VHUYHUWREH
VWDUWHG 7KLV FDQ EH YHU\ XVHIXO LQ VRPH VLWXDWLRQV $W WKH VDPH WLPH P\LVDPFKN
UHTXLUHVH[FOXVLYHDFFHVVWRWDEOHILOHVDQG\RXVKRXOGDYRLGXVLQJLWZKHQWKH0\64/
VHUYHULVUXQQLQJ
,I \RX KDYH WR XVH P\LVDPFKN ZKLOH WKH VHUYHU LV UXQQLQJ LVVXH WKH
TXHULHVFLUSH TABLESDQGLOCK TABLE table_name WRITEWKHQZDLWXQWLO
WKHODWHVWTXHU\UHWXUQVDFRPPDQGSURPSWDQGWKHQUXQP\LVDPFKN
LQDSDUDOOHOVHVVLRQ,IRWKHUSURFHVVHVEHVLGHVP\LVDPFKNDFFHVVWKH
WDEOHZKLOHP\LVDPFKNLVUXQQLQJHYHQZRUVHFRUUXSWLRQFDQRFFXU
$EDVLFUHFRYHU\FRPPDQGLV
$myisamchk --backup --recover t2
- recovering (with sort) MyISAM-table 't2'
Data records: 208
- Fixing index 1
- Fixing index 2
Data records: 780
7KH --backupRSWLRQWHOOVP\LVDPFKNWREDFNXSWKHGDWDILOHEHIRUHWU\LQJWRIL[WKH
WDEOHDQG--recoverGRHVWKHDFWXDOUHSDLU,IWKLVFRPPDQGLVLQVXIILFLHQW\RXFDQXVH
WKH--safe-recoverRSWLRQ7KHODWWHURSWLRQXVHVDUHFRYHU\PHWKRGWKDWKDVH[LVWHG
VLQFHYHU\HDUO\YHUVLRQVRI0\64/DQGFDQILQGLVVXHVWKDWWKHVLPSOH--recoverRSWLRQ
FDQQRW$QHYHQPRUHGUDVWLFRSWLRQLV--extend-check
<RXFDQDOVRXVHWKHRSWLRQ--sort-recoverZKLFKXVHVVRUWLQJWRUHVROYHWKHNH\VHYHQ
ZKHQWKHWHPSRUDU\ILOHLVYHU\ODUJH
$PRQJ RWKHU RSWLRQV ZKLFK , UHFRPPHQG \RX VWXG\ FDUHIXOO\ LV WKH YHU\ XVHIXO
--descriptionRSWLRQZKLFKSULQWVDGHVFULSWLRQRIWKHWDEOH7DNHQWRJHWKHUZLWK-v
RULWVV\QRQ\P--verboseLWZLOOSULQWDGGLWLRQDOLQIRUPDWLRQ<RXFDQVSHFLI\WKH-v
RSWLRQWZLFHRUHYHQWKUHHWLPHVWRJHWPRUHLQIRUPDWLRQ
InnoDB Corruption
,QQR'%VWRUHVLWVGDWDDQGLQGH[HVLQVKDUHGWDEOHVSDFHV,IWKHVHUYHUZDVVWDUWHGZLWK
WKHRSWLRQ--innodb_file_per_tableDWWKHPRPHQWRIWDEOHFUHDWLRQLWDOVRKDVLWVRZQ
GDWDILOHEXWWKHWDEOHGHILQLWLRQVWLOOH[LVWVLQDVKDUHGWDEOHVSDFH8QGHUVWDQGLQJKRZ
WDEOHILOHVDUHVWRUHGFDQKHOSWRHIIHFWLYHO\PDLQWDLQWKHGDWDGLUHFWRU\DQGEDFNXSV
,QQR'%LVDWUDQVDFWLRQDOVWRUDJHHQJLQHDQGKDVLQWHUQDOPHFKDQLVPVWKDWDXWRPDWL
FDOO\IL[PRVWNLQGVRIFRUUXSWLRQ,WGRHVWKLVUHFRYHU\DWVHUYHUVWDUWXS7KHIROORZLQJ
%XWVRPHWLPHVFRUUXSWLRQLVH[WUHPHO\EDGDQG,QQR'%FDQQRWUHSDLULWZLWKRXWXVHU
LQWHUDFWLRQ)RUVXFKVLWXDWLRQVWKHVWDUWXSRSWLRQ--innodb_force_recoveryH[LVWV,W
FDQEHVHWWRDQ\YDOXHIURPWR PHDQVQRIRUFHGUHFRYHU\LVWKHORZHVWOHYHO
DQGLVWKHKLJKHVWOHYHO :KHQUHFRYHU\LVVXFFHVVIXO\RXFDQUXQFHUWDLQW\SHVRI
TXHULHVDJDLQVWWKHWDEOHWKDWZDVUHSDLUHGEXW\RX¦UHSUHYHQWHGIURPLVVXLQJFHUWDLQ
FRPPDQGV<RXFDQ¦WLVVXHRSHUDWLRQVWKDWPRGLI\GDWDEXWWKHRSWLRQVWLOODOORZV
FHUWDLQSELECTVHOHFWVWDWHPHQWVDVZHOODVDROPVWDWHPHQWV$WOHYHOIRULQVWDQFH\RX
FDQ UXQ RQO\ TXHULHV RI WKH IRUP SELECT * FROM table_name ZLWK QR TXDOLI\LQJ
FRQGLWLRQ¢QRWHEREORDER BYRURWKHUFODXVHV
,QFDVHRIFRUUXSWLRQWU\HDFKOHYHORI --innodb_force_recoveryVWDUWLQJIURPDQG
LQFUHDVLQJXQWLO\RXDUHDEOHWRVWDUWWKHVHUYHUDQGTXHU\WKHSUREOHPWDEOH<RXUSULRU
LQYHVWLJDWLRQVKRXOGKDYHXQFRYHUHGZKLFKWDEOHLVFRUUXSWHG'XPSLWWRDILOHXVLQJ
SELECT INTO OUTFILEWKHQUHFUHDWHLWXVLQJDROPDQGCREATE)LQDOO\UHVWDUWWKHVHUYHU
ZLWK--innodb_force_recovery=0DQGORDGWKHGXPS,IWKHSUREOHPSHUVLVWVWU\WRILQG
RWKHUWDEOHVWKDWDUHFRUUXSWHGDQGJRWKURXJKWKHSURFHVVXQWLOWKHVHUYHULVILQHDJDLQ
,I \RX QHHG WR EHJLQ \RXU UHSDLU RI D GDWDEDVH E\ XVLQJ D SRVLWLYH YDOXH IRU
--innodb_force_recoveryWKHHUURUORJRIWHQPHQWLRQVLWH[SOLFLWO\WKURXJKPHVVDJHV
VXFKDVWKLV
InnoDB: We intentionally generate a memory trap.
InnoDB: Submit a detailed bug report to http://bugs.mysql.com.
InnoDB: If you get repeated assertion failures or crashes, even
InnoDB: immediately after the mysqld startup, there may be
InnoDB: corruption in the InnoDB tablespace. Please refer to
48 | Chapter 1:ಗBasics
InnoDB: http://dev.mysql.com/doc/refman/5.1/en/forcing-recovery.html
InnoDB: about forcing recovery.
<RXZLOODOVRILQGLQIRUPDWLRQWKHUHDERXWXQVXFFHVVIXODXWRPDWLFUHFRYHU\DQGVWDUWXS
IDLOXUH
..
#..4ÿ
4
,QQR'%ZULWHVFKHFNVXPVIRUGDWDLQGH[DQGORJSDJHVLPPHGLDWHO\
EHIRUH ZULWLQJ DFWXDO GDWD DQG FRQILUPV WKH FKHFNVXPV LPPHGLDWHO\
m
UP, DIWHUUHDGLQJIURPWKHGLVN7KLVDOORZVLWWRSUHYHQWDPDMRULW\RISURE
OHPV8VXDOO\ZKHQ\RXHQFRXQWHU,QQR'%FRUUXSWLRQWKLVPHDQV\RX
KDYHLVVXHVZLWKHLWKHUWKHGLVNRU5$0
Permission Issues
0\64/KDVDFRPSOH[SULYLOHJHVFKHPHDOORZLQJ\RXWRWXQHSUHFLVHO\ZKLFKXVHUV
DQGKRVWVDUHDOORZHGWRSHUIRUPRQHRUDQRWKHURSHUDWLRQ6LQFHYHUVLRQ0\64/
DOVRKDVSOXJJDEOHDXWKHQWLFDWLRQ
$OWKRXJK LW KDV DGYDQWDJHV WKLV VFKHPH LV FRPSOLFDWHG )RU H[DPSOH KDYLQJ
user1@hostAGLIIHUHQWIURPuser2@hostADQGuser1@hostBPDNHVLWHDV\WRPL[XSWKHLU
SULYLOHJHV ,W LV HYHQ HDVLHU WR GR WKLV ZKHQ WKH XVHUQDPH LV WKH VDPH DQG WKH KRVW
FKDQJHV
0\64/DOORZV\RXWRWXQHDFFHVVDWWKHREMHFWDQGFRQQHFWLRQOHYHO<RXFDQUHVWULFW
DXVHU¦VDFFHVVWRDSDUWLFXODUWDEOHFROXPQDQGVRRQ
8VHUVXVXDOO\H[SHULHQFHWZRNLQGVRISHUPLVVLRQLVVXHV
8VHUVZKRVKRXOGEHDEOHWRFRQQHFWWRWKHVHUYHUILQGWKH\FDQQRWRUXVHUVZKR
VKRXOGQRWEHDEOHWRFRQQHFWILQGWKDWWKH\FDQ
8VHUVFDQFRQQHFWWRWKHVHUYHUEXWFDQ¦WXVHREMHFWVWRZKLFKWKH\DUHVXSSRVHG
WRKDYHDFFHVVRUFDQXVHREMHFWVWRZKLFKWKH\DUHQRWVXSSRVHGWRKDYHDFFHVV
%HIRUH\RXVWDUWWURXEOHVKRRWLQJWKHVHSUREOHPV\RXQHHGWRILQGRXWZKHWKHU\RXFDQ
FRQQHFWWRWKHVHUYHU
$IWHU\RXVXFFHHGLQFRQQHFWLQJDVWKHXVHU\RX¦UHWURXEOHVKRRWLQJ ZHZLOOGLVFXVVWKH
FDVHZKHQFRQQHFWLRQLVQRWSRVVLEOHDELWODWHULQWKLVFKDSWHU UXQWKHTXHU\
SELECT USER(), CURRENT_USER()
7KHUSER()IXQFWLRQUHWXUQVWKHFRQQHFWLRQSDUDPHWHUVXVHGZKHQWKHXVHUFRQQHFWV
7KHVHDUHXVXDOO\WKHXVHUQDPHWKDWZDVVSHFLILHGDQGWKHKRVWQDPHRIDER[ZKHUH
WKHFOLHQWLVUXQQLQJCURRENT_USER()UHWXUQVWKHXVHUQDPHDQGKRVWQDPHSDLURIWKRVH
SULYLOHJHVFKRVHQIURPSULYLOHJHWDEOHV7KHVHDUHWKHXVHUQDPHDQGKRVWQDPHSDLUV
XVHGE\P\VTOGWRFKHFNDFFHVVWRGDWDEDVHREMHFWV%\FRPSDULQJWKHUHVXOWVRIWKHVH
IXQFWLRQV\RXFDQILQGRXWZK\P\VTOGXVHVSULYLOHJHVWKDWDUHGLIIHUHQWIURPZKDW\RX
H[SHFWHG$W\SLFDOSUREOHPLVWU\LQJWRXVHDZLOGFDUGIRUWKHKRVWQDPH
Permission Issues | 49
root> GRANT ALL ON book.* TO sveta@'%';
Query OK, 0 rows affected (0.00 sec)
,I,QRZFRQQHFWDVsvetaDQGWU\WRFUHDWHDWDEOH,JHWDQHUURU
$mysql -usveta book
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 30
Server version: 5.1.52 MySQL Community Server (GPL)
Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
,I\RXGRQ¦WXQGHUVWDQGZK\RQHRUDQRWKHUKRVWZDVFKRVHQUXQDTXHU\OLNHWKLV
mysql> SELECT user, host FROM mysql.user WHERE user='sveta' ORDER
BY host DESC;
+-------+-----------+
| user | host |
+-------+-----------+
| sveta | localhost |
| sveta | % |
+-------+-----------+
2 rows in set (0.00 sec)
0\64/VRUWVURZVLQWKLVWDEOHIURPWKHPRVWVSHFLILFWRWKHOHDVWVSHFLILFKRVWYDOXH
DQG XVHV WKH ILUVW YDOXH IRXQG 7KHUHIRUH LW FRQQHFWHG PH DV WKH XVHU DFFRXQW
sveta@localhostZKLFKGRHVQRWKDYHCREATESULYLOHJHV
■ USER() DQG CURRENT_USER() WRJHWKHU ZLWK WKH TXHU\ SELECT user, host FROM
mysql.user ORDER BY host DESCDUHWKHILUVWUHVRUWLQFDVHRIDSHUPLVVLRQLVVXH
50 | Chapter 1:ಗBasics
$QRWKHULVVXHZLWKSULYLOHJHVDULVHVZKHQLWLVQRWSRVVLEOHWRFRQQHFWDVWKHVSHFLILHG
XVHU,QWKLVFDVH\RXFDQXVXDOO\OHDUQWKHUHDVRQIURPWKHHUURUPHVVDJHZKLFKORRNV
VLPLODUWRWKHIROORZLQJ
$mysql -usveta books
ERROR 1044 (42000): Access denied for user 'sveta'@'localhost' to database 'books'
$IWHUVHHLQJWKLV\RXNQRZWKHXVHUFUHGHQWLDOV&RQQHFWDVWKHURRWVXSHUXVHUDQG
FKHFNZKHWKHUVXFKDXVHUH[LVWVDQGKDVWKHUHTXLUHGSULYLOHJHV
mysql> SELECT user, host FROM mysql.user WHERE user='sveta' ORDER
BY host DESC;
+-------+-----------+
| user | host |
+-------+-----------+
| sveta | localhost |
| sveta | % |
+-------+-----------+
2 rows in set (0.00 sec)
,QWKLVRXWSXW\RXFDQVHHWKDWXVHU 'sveta'@'localhost'KDVSULYLOHJHVRQO\RQWKH
GDWDEDVHQDPHG bookEXWQRSULYLOHJHVRQWKH booksGDWDEDVH1RZ\RXFDQIL[WKH
SUREOHPJLYHXVHUsveta@localhostWKHQHFHVVDU\SULYLOHJHV
7KHSUHYLRXVH[DPSOHVGLVFXVVHGXVHUVZKRODFNHGQHFHVVDU\SULYLOHJHV8VHUVZKRDUH
JUDQWHGVXSHUIOXRXVSULYLOHJHVFDQEHKDQGOHGLQWKHVDPHZD\\RXMXVWQHHGWRUHYRNH
WKHXQQHFHVVDU\SULYLOHJHV
0\64/SULYLOHJHVDUHGHWDFKHGIURPREMHFWVWKH\FRQWUROWKLVPHDQV
P\VTOGGRHVQRWFKHFNIRUWKHH[LVWHQFHRIDQREMHFWZKHQ\RXJUDQWD
SULYLOHJHRQLWDQGGRHVQRWUHPRYHDSULYLOHJHZKHQDOOREMHFWVLWJUDQWV
DFFHVVWRDUHUHPRYHG7KLVLVERWKDJUHDWDGYDQWDJHEHFDXVHLWDOORZV
XVWRJUDQWQHFHVVDU\SULYLOHJHVLQDGYDQFHDQGDSRWHQWLDOFDXVHRIDQ
LVVXHLIXVHGZLWKRXWFDUH
Permission Issues | 51
$VDEHVWSUDFWLFH,UHFRPPHQGFDUHIXOVWXG\RIKRZ0\64/SULYLOHJHVZRUN7KLVLV
HVSHFLDOO\ LPSRUWDQW LI \RX JUDQW SULYLOHJHV RQ WKH REMHFW OHYHO EHFDXVH \RX VKRXOG
XQGHUVWDQGKRZDJUDQWRQRQHOHYHODIIHFWVJUDQWVRIRWKHUV7KHVDPHFRQVLGHUDWLRQV
DSSO\WRUHYRNLQJSULYLOHJHVZKLFKFDQEHHYHQPRUHFULWLFDOEHFDXVHLI\RXWKLQN\RX
UHYRNHGDSULYLOHJHDQGLWLVVWLOOSUHVHQWWKLVDOORZVXQZDQWHGDFFHVV
52 | Chapter 1:ಗBasics
CHAPTER 2
You Are Not Alone: Concurrency Issues
0\64/ LV UDUHO\ GHSOR\HG LQ D VLQJOHXVHU HQYLURQPHQW 8VXDOO\ LW KDQGOHV PDQ\
FRQQHFWLRQWKUHDGVGRLQJGLIIHUHQWMREVIRUGLIIHUHQWSHRSOHDWWKHVDPHWLPH7KHVH
SDUDOOHOFRQQHFWLRQVFDQDFFHVVWKHVDPHGDWDEDVHVDQGWDEOHVVRLWLVKDUGWRNQRZ
ZKDWWKHVWDWHRIWKHGDWDEDVHZDVZKHQDSDUWLFXODUFRQQHFWLRQKDGDSUREOHP
7KLVFKDSWHUGHVFULEHVLVVXHVFDXVHGE\SDUDOOHOH[HFXWLRQ8QOLNHWKHWURXEOHVKRRWLQJ
VFHQDULRVVKRZQLQ&KDSWHUWKLVFKDSWHUFRYHUVPRUHFRPSOH[VLWXDWLRQVZKHUH\RX
PD\H[SHULHQFHSUREOHPVZLWKRXWNQRZLQJZKLFKSDUWLFXODUTXHU\FDXVHGWKHP
2QHRIWKHV\PSWRPVRIDFRQFXUUHQF\LVVXHLVDVXGGHQVORZGRZQRIDZHOORSWLPL]HG
TXHU\7KHVORZGRZQPD\QRWKDSSHQFRQVLVWHQWO\EXWHYHQDIHZUDQGRPRFFXUUHQFHV
VKRXOGVLJQDO\RXWRFKHFNIRUFRQFXUUHQF\SUREOHPV
&RQFXUUHQF\FDQHYHQDIIHFWWKHVODYH64/WKUHDG,H[SOLFLWO\PHQWLRQWKLVWRFRUUHFW
D SRVVLEOH PLVFRQFHSWLRQ 2QH PLJKW WKLQN WKDW EHFDXVH WKH VODYH 64/ LV VLQJOH
WKUHDGHGLWGRHVQ¦WUHTXLUHDQ\WURXEOHVKRRWLQJWHFKQLTXHVUHODWHGWRFRQFXUUHQF\
7KLVLVDFWXDOO\QRWVRUHSOLFDWLRQFDQEHDIIHFWHGE\FRQFXUUHQF\RQERWKWKHPDVWHU
DQGWKHVODYH7KLVFKDSWHUWKHUHIRUHFRQWDLQVDVHFWLRQGHYRWHGWRUHSOLFDWLRQ
..
#..4ÿ
4
/HW¦VDJUHHRQVRPHWHUPVWRVWDUWZLWK)RUHDFKFRQQHFWHGFOLHQWWKH
0\64/VHUYHUFUHDWHVDVHSDUDWHWKUHDG,ZLOOXVHWKHZRUGVWKUHDG
a,:' FRQQHFWLRQ RU FRQQHFWLRQ WKUHDG WR UHIHU D WKUHDG WKDW VHUYHV D FOLHQW
FRQQHFWLRQ,ZLOOH[SOLFLWO\PHQWLRQZKHQWKHFRQWH[WUHTXLUHVDQRWKHU
PHDQLQJ RI WKH ZRUG £WKUHDG¤ , XVH £WKUHDG¤ LQVWHDG RI £TXHU\¤
£VWDWHPHQW¤RU£WUDQVDFWLRQ¤EHFDXVHZKHQ\RXDUHWURXEOHVKRRWLQJ
\RXRIWHQKDYHWRLVRODWHDSUREOHPDWLFWKUHDGEHIRUH\RXFDQGHDOZLWK
WKHSDUWLFXODUVWDWHPHQWWKDWPLJKWFDXVHWKHSUREOHP
7KLVZLOOFKDQJHLQIXWXUHYHUVLRQFRQWDLQVDSUHYLHZRIDPXOWLWKUHDGHGVODYH
53
Locks and Transactions
7KH 0\64/ VHUYHU KDV LQWHUQDO PHFKDQLVPV WKDW SUHYHQW RQH XVHU IURP GDPDJLQJ
LQIRUPDWLRQ LQVHUWHG E\ DQRWKHU $OWKRXJK WKHVH XVXDOO\ GR WKHLU MRE VLOHQWO\ DQG
FRPSHWHQWO\EHLQJXQDZDUHRIWKHVHVDIHJXDUGVFDQOHDGWRSUREOHPVIRU\RXURZQ
DSSOLFDWLRQDVZHOODVRWKHUV7KHUHIRUH,¦PVWDUWLQJZLWKDVKRUWRYHUYLHZRIFRQFXU
UHQF\FRQWUROPHFKDQLVPVWKDWWKH0\64/VHUYHUXVHV
7KH0\64/VHUYHUXVHVORFNVDQGWUDQVDFWLRQVWRKDQGOHFRQFXUUHQWDFFHVVWRLWVWDEOHV
,ZLOOJLYHDVKRUWRYHUYLHZRIORFNW\SHVDQGWUDQVDFWLRQSURFHVVLQJILUVWWKHQJRRQWR
WURXEOHVKRRWLQJWHFKQLTXHV
$ORFNLVVHWZKHQDWKUHDGUHTXHVWVDGDWDVHW,Q0\64/WKLVFDQEHDWDEOHDURZD
SDJHRUPHWDGDWD$IWHUDWKUHDGILQLVKHVZRUNLQJZLWKDSDUWLFXODUGDWDVHWLWVORFNV
DUHUHOHDVHG,ZLOOGHVFULEHWKHORFNVVHWE\0\64/LQGHWDLOLQ£/RFNV¤RQSDJH
DQG£0HWDGDWD/RFNLQJ9HUVXVWKH2OG0RGHO¤RQSDJH,FRYHUPHWDGDWDORFNLQJ
LQDVHSDUDWHVHFWLRQEHFDXVHWKLVLVDQHZIHDWXUHWKDWLQYHQWHGGLIIHUHQFHVLQKRZWKH
0\64/ VHUYHU KDQGOHV FRQFXUUHQF\ ,I \RX DUH IDPLOLDU ZLWK WKH ROG WDEOHORFNLQJ
PHFKDQLVPDQGQRWZLWKPHWDGDWDORFNLQJWKHODWWHUVHFWLRQFDQKHOS\RXGHWHUPLQH
ZKHWKHU\RXKLWDPHWDGDWDORFNLQDSDUWLFXODUVLWXDWLRQ
'DWDEDVHWUDQVDFWLRQVDUHXQLWVRIZRUNWUHDWHGLQDFRKHUHQWDQGUHOLDEOHZD\WKDW
DOORZ D XVHU WR ZRUN ZLWKRXW WKH ULVN RI LQWHUYHQLQJ ZLWK RWKHU WUDQVDFWLRQV 7KH
WUDQVDFWLRQ¦VLVRODWLRQOHYHOFRQWUROVZKHWKHUWKHWUDQVDFWLRQFDQVHHWKHFKDQJHVPDGH
E\FRQFXUUHQWRSHUDWLRQVDQGLI\HVZKLFKFKDQJHV:HZLOOGLVFXVV0\64/WUDQVDF
WLRQVLQGHWDLOLQ£7UDQVDFWLRQV¤RQSDJH
Locks
/RFNVFDQEHVHWERWKE\WKHVHUYHUDQGE\DQLQGLYLGXDOVWRUDJHHQJLQH/RFNVDUH
XVXDOO\ VHW GLIIHUHQWO\ IRU UHDG DQG ZULWH RSHUDWLRQV 5HDG RU VKDUHG ORFNV DOORZ
FRQFXUUHQWWKUHDGVWRUHDGIURPWKHORFNHGGDWDEXWSUHYHQWZULWHV,QFRQWUDVWZULWH
RUH[FOXVLYHORFNVSUHYHQWRWKHUWKUHDGVIURPHLWKHUUHDGLQJRUZULWLQJ,QDVWRUDJH
HQJLQHWKHLPSOHPHQWDWLRQRIVXFKORFNVFDQGLIIHUEXWWKHUDWLRQDOHIRUWKHVHSROLFLHV
LVVROLGDQGZLOOEHWKHVDPHQHDUO\HYHU\ZKHUH
5HDGORFNVDUHVHWZKHQ\RXSELECTIURPDWDEOHRUH[SOLFLWO\ORFNLWZLWKLOCK TABLE …
READ:ULWHORFNVDUHVHWZKHQ\RXHLWKHUPRGLI\DWDEOHRUORFNLWH[SOLFLWO\ZLWKLOCK
TABLE … WRITE
,QQR'%XVHVWKHVKRUWFXWSIRUUHDGVKDUHGORFNVDQGXIRUZULWHH[FOX
VLYHORFNV<RXZLOOVHHWKLVQRWDWLRQLQLWVGHEXJJLQJRXWSXW
A'
UP,
Table Locks
:KHQDWDEOHORFNLVVHWWKHZKROHWDEOHLVORFNHG7KLVPHDQVFRQFXUUHQWWKUHDGV
FDQQRW XVH WKH WDEOH DV GHILQHG E\ WKH ORFN HJ ZULWH DFFHVV LV QRW DOORZHG LI WKH
READORFNLVVHWDQGERWKUHDGDQGZULWHDFFHVVDUHIRUELGGHQLIWKH WRITEORFNLVVHW
7DEOHORFNVDUHVHWZKHQ\RXDFFHVVDWDEOHXVLQJDVWRUDJHHQJLQHWKDWVXSSRUWVWDEOH
ORFNLQJQRWDEO\0\,6$0<RXDOVRLQYRNHDWDEOHORFNIRUDQ\HQJLQHZKHQ\RXUXQ
LOCK TABLESH[SOLFLWO\RULVVXH''/RSHUDWLRQVRQDYHUVLRQRI0\64/HDUOLHUWKDQ
$V,OLNHWRGHPRQVWUDWHFRQFHSWVE\H[DPSOHKHUHLVRQHGHPRQVWUDWLQJWKHHIIHFWVRI
WDEOHORFNLQJ
mysql> SELECT * FROM t;
+-----+
| a |
+-----+
| 0 |
| 256 |
+-----+
2 rows in set (3 min 18.71 sec)
7KUHHPLQXWHVWRUHWULHYHWZRURZV":KHQ,VKRZHGWKLVH[DPSOHDWDFRQIHUHQFH,
SDXVHGDQGDVNHGZKHWKHUDQ\ERG\FRXOGILJXUHRXWZK\$WWKDWWLPHWKHQHWERRN
ERRPKDGMXVWVWDUWHGDQGWKHZKROHDXGLHQFHVKRXWHG£,WLVUXQQLQJRQDQ$WRP
&38¤$FWXDOO\VXFKDGHOD\LVZD\WRRPXFKIRUDQ\NLQGRIPRGHUQSURFHVVRU/HW¦V
ORRNDWWKHWDEOHGHILQLWLRQDQGWU\WKHVDPHTXHU\DJDLQ
Locks | 55
mysql> SHOW CREATE TABLE t\G
************** 1. row **************
Table: t
Create Table: CREATE TABLE `t` (
`a` int(10) unsigned NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`a`)
) ENGINE=MyISAM AUTO_INCREMENT=257 DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
1RZLWUXQVLQDOPRVW]HURWLPH
7RILQGRXWZKDWKDSSHQHGZHQHHGWRUXQSHOW PROCESSLISTGXULQJWKHWLPHWKHTXHU\
LVUXQQLQJVORZO\
,QDQDFWXDODSSOLFDWLRQHQYLURQPHQW\RXZRXOGHLWKHUQHHGWRPDQ
XDOO\UXQDGLDJQRVWLFTXHU\GXULQJDEXV\WLPHRUVFKHGXOHDMREWKDW
a,:' ZLOOGRLWIRU\RXIURPWLPHWRWLPHDQGVDYHWKHUHVXOWV
7KHILHOGVRIWKHRXWSXWDUHDVIROORZV
Id
7KH,'RIWKHFRQQHFWLRQWKUHDGUXQQLQJLQWKH0\64/VHUYHU
UserHostDQGdb
7KHFRQQHFWLRQRSWLRQVVSHFLILHGE\WKHFOLHQWZKHQFRQQHFWLQJWRWKHVHUYHU
Command
7KHFRPPDQGFXUUHQWO\H[HFXWLQJLQWKHWKUHDG
Time
7KHHODSVHGZDOOFORFNWLPHVLQFHWKHWKUHDGVWDUWHGWRH[HFXWHWKHFRPPDQG
State
7KHLQWHUQDOVWDWHRIWKHWKUHDG
Info
6KRZVZKDWWKHWKUHDGLVFXUUHQWO\GRLQJ,WFRQWDLQVDTXHU\LIRQHLVH[HFXWLQJ
DQGNULLLIWKHWKUHDGLVVOHHSLQJZKLOHZDLWLQJIRUWKHQH[WXVHUFRPPDQG
7RILQGRXWZKDWKDSSHQHGZLWKRXUTXHU\ZHQHHGWRILQGDURZZKHUHInfoFRQWDLQV
WKHWH[WRIWKHTXHU\DQGWKHQH[DPLQHWKHTXHU\¦VVWDWH$WWKHWRSRIWKHRXWSXWZH
FDQVHHWKDWWKHVWDWHRIRXUTXHU\LV LockedZKLFKPHDQVWKHTXHU\FDQQRWSURFHHG
EHFDXVHDQRWKHUWKUHDGKROGVWKHORFNRXUWKUHDGLVZDLWLQJIRU7KHIROORZLQJURZ
VKRZVDTXHU\
UPDATE t SET a=sleep(200) WHERE a=0
ZKLFKDFFHVVHVWKHVDPHWDEOHtDQGKDVDOUHDG\UXQIRUVHFRQGV%HFDXVHWKHWDEOH
LVWKHVDPHDQGQRRWKHUWKUHDGLVXVLQJRXUWDEOHZHFDQFRQFOXGHWKDWWKLVXSGDWHLV
SUHYHQWLQJRXUTXHU\IURPVWDUWLQJ,QIDFWRXUTXHU\ZLOOZDLWDOOVHFRQGVXQWLO
WKHRWKHURQHLVILQLVKHG
■ <RXMXVWOHDUQHGDQLPSRUWDQWQHZGHEXJJLQJWHFKQLTXHUXQ SHOW PROCESSLIST
ZKHQ\RXVXVSHFWFRQFXUUHQWWKUHDGVDUHDIIHFWLQJWKHTXHU\
Row Locks
5RZORFNVEORFNDVHWRIURZVQRWWKHZKROHWDEOH7KHUHIRUH\RXFDQPRGLI\URZVLQ
WKHWDEOHWKDWDUHQRWEORFNHGE\WKHORFN
5RZORFNVDUHVHWDWWKHVWRUDJHHQJLQHOHYHO,QQR'%LVWKHPDLQVWRUDJHHQJLQHWKDW
FXUUHQWO\XVHVURZORFNV
7RVKRZWKHGLIIHUHQFHEHWZHHQWDEOHDQGURZORFNVZHZLOOXVHDVOLJKWO\PRGLILHG
H[DPSOHIURPWKHSUHYLRXVVHFWLRQ
Locks | 57
mysql> CREATE TABLE `t` (
-> `a` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
-> PRIMARY KEY (`a`)
-> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (1.29 sec)
/HW¦VUXQWKHVDPHVOHHSLQJ UPDATETXHU\DVEHIRUHWRVHHWKHGLIIHUHQWHIIHFWRIURZ
ORFNLQJFRPSDUHGWRWDEOHORFNV
mysql> UPDATE t SET a=sleep(200) WHERE a=6;
:KLOHWKHVOHHSLQJTXHU\LVUXQQLQJZHKDYHHQRXJKWLPHWRWU\WRVHOHFWURZVXVLQJ
DQRWKHUFOLHQW
:HJRWUHVXOWVLPPHGLDWHO\1RZOHW¦VWU\WRXSGDWHDURZ
mysql> UPDATE t SET a=23 WHERE a=13;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
8SGDWHVRIURZVWKDWDUHQRWORFNHGZRUNILQHWRR1RZOHW¦VVHHZKDWKDSSHQVLIZH
WU\WRXSGDWHDURZXVLQJWKHVDPHWHEREFRQGLWLRQDVWKHEORFNLQJUPDATE
mysql> UPDATE t SET a=26 WHERE a=6;
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
$FWXDOO\URZOHYHOORFNLQJLVPRUHFRPSOLFDWHGWKDQ,KDYHGHVFULEHG
)RUH[DPSOHLIZHWULHGWRDFFHVVDWDEOHXVLQJD WHEREFRQGLWLRQWKDW
a,:' FRXOGQRWEHUHVROYHGXVLQJDUNIQUENH\ZHFRXOGQRWXSGDWHDQ\URZ
LQSDUDOOHOEHFDXVHWKHVWRUDJHHQJLQHFRXOGQRWGHWHUPLQHZKHWKHUWKH
RWKHUWKUHDGZDVWU\LQJWRXSGDWHWKHVDPHURZ7KLVLVQRWWKHRQO\
GHWDLO,VNLSSHGLQP\GLVFXVVLRQRIURZOHYHOORFNVWRVDYHVSDFHIRUWKH
WURXEOHVKRRWLQJWHFKQLTXHVWKHPVHOYHV&RQVXOWWKH$SSHQGL[WRILQG
VRXUFHVRILQIRUPDWLRQ\RXFDQXVHWROHDUQPRUHDERXW0\64/ORFNV
Locks | 59
1RZ OHW¦V VHH KRZ WKH SURFHVV OLVW RXWSXW FKDQJHG , ZLOO XVH WKH WDEOH
INFORMATION_SCHEMA.PROCESSLISTLQWKLVH[DPSOH,WDFWXDOO\KDVVDPHLQIRUPDWLRQDV
SHOW PROCESSLISTEXWEHFDXVHLWLVLQWKHWDEOH\RXFDQVRUWWKHTXHU\UHVXOWVDV\RX
ZLVK7KLVLVHVSHFLDOO\FRQYHQLHQWLI\RXKDYHGR]HQVRISDUDOOHOWKUHDGV
mysql> SELECT * FROM PROCESSLIST\G
*************************** 1. row ***************************
ID: 4483
USER: root
HOST: localhost
DB: NULL
COMMAND: Sleep
TIME: 283
STATE:
INFO: NULL
*************************** 2. row ***************************
ID: 4482
USER: root
HOST: localhost
DB: information_schema
COMMAND: Query
TIME: 0
STATE: executing
INFO: SELECT * FROM PROCESSLIST
*************************** 3. row ***************************
ID: 4481
USER: root
HOST: localhost
DB: test
COMMAND: Query
TIME: 7
STATE: Updating
INFO: UPDATE t SET a=26 WHERE a=6
*************************** 4. row ***************************
ID: 4480
USER: root
HOST: localhost
DB: test
COMMAND: Query
TIME: 123
STATE: User sleep
INFO: UPDATE t SET a=sleep(200) WHERE a=6
4 rows in set (0.09 sec)
+HUH\RXFDQVHHDQRWKHUGLIIHUHQFHIURPWKHSUHYLRXVH[DPSOHWKHVWDWHRIRXUTXHU\
LVUpdatingQRWLocked
7RILQGRXWZKHWKHUDTXHU\LVEORFNHGE\DORFNLQ,QQR'%\RXFDQUXQWKHTXHU\
SHOW ENGINE INNODB STATUSZKLFKLVSDUWRIDPHFKDQLVPFDOOHGWKH,QQR'%0RQLWRU
7KLVLVHVSHFLDOO\KHOSIXOLI\RXDQDO\]HWKHHIIHFWRISDUDOOHOPXOWLVWDWHPHQWWUDQVDF
WLRQVZKLFKZHZLOOGLVFXVVDELWODWHULQWKLVFKDSWHU,ZLOOQRWSULQWKHUHWKHZKROH
RXWSXWRIWKLVJUHDWWRROMXVWWKHSDUWUHOHYDQWWRRXUFXUUHQWH[DPSOH:HZLOOGLVFXVV
------------------
---TRANSACTION 0 26243821, ACTIVE 125 sec, OS thread id 101238272,
thread declared inside InnoDB 500
mysql tables in use 1, locked 1
2 lock struct(s), heap size 320, 1 row lock(s)
MySQL thread id 4480, query id 25022091 localhost root User sleep
update t set a=sleep(200) where a=6
7KHLPSRUWDQWSDUWZHQHHGWRSD\DWWHQWLRQWRLV
---TRANSACTION 0 26243827, ACTIVE 9 sec, OS thread id 101403136 starting index read
mysql tables in use 1, locked 1
LOCK WAIT 2 lock struct(s), heap size 320, 1 row lock(s)
MySQL thread id 4481, query id 25022095 localhost root Updating
update t set a=26 where a=6
------- TRX HAS BEEN WAITING 9 SEC FOR THIS LOCK TO BE GRANTED:
7KLVVKRZVWKDWDTXHU\LVZDLWLQJIRUDORFN
Locks | 61
+HUHDUHDIHZGHWDLOVDERXWWKHSUHFHGLQJRXWSXWEHIRUHZHUHWXUQWRWKHORFN
TRANSACTION 0 26243827
7KLVLVWKH,'RIWKHWUDQVDFWLRQ
ACTIVE 9 sec
1XPEHURIVHFRQGVWKHWUDQVDFWLRQZDVDFWLYHIRU
OS thread id 101403136
,'RIWKH0\64/WKUHDGWKDWLVUXQQLQJWKHWUDQVDFWLRQ
starting index read
:KDWWKHWUDQVDFWLRQLVGRLQJ
mysql tables in use 1, locked 1
+RZPDQ\WDEOHVDUHXVHGDQGORFNHG
LOCK WAIT 2 lock struct(s), heap size 320, 1 row lock(s)
,QIRUPDWLRQDERXWWKHORFNV
MySQL thread id 4481, query id 25022095 localhost root Updating
,QIRUPDWLRQDERXWWKH0\64/WKUHDG,','RIWKHTXHU\XVHUFUHGHQWLDOVDQG
0\64/VWDWH
update t set a=26 where a=6
&XUUHQWO\UXQQLQJTXHU\
$QGKHUHDUHGHWDLOVDERXWWKHORFN
RECORD LOCKS space id 349 page no 3 n bits 88 index `PRIMARY` of table `test`.`t`
trx id 0 26243827 lock_mode X locks rec but not gap waiting
Record lock, heap no 6 PHYSICAL RECORD: n_fields 3; compact format; info bits 0
0: len 4; hex 00000006; asc ;; 1: len 6; hex 0000019072e3; asc r ;; 2:
len 7; hex 800000002d0110; asc - ;;
7KLVVKRZVWKHH[DFWFRRUGLQDWHVRIWKHEORFNHGWUDQVDFWLRQLQWKH,QQR'%WDEOHVSDFH
WKHW\SHRIWKHORFN H[FOXVLYHEHFDXVHZHDUHJRLQJWRGRDQXSGDWH DQGWKHELQDU\
FRQWHQWRIWKHSK\VLFDOUHFRUG
)LQDOO\OHW¦VORRNDWWKHLQIRUPDWLRQDERXWWKHWUDQVDFWLRQUXQQLQJWKHTXHU\WKDWORFNV
WKHURZV
---TRANSACTION 0 26243821, ACTIVE 125 sec, OS thread id 101238272,
thread declared inside InnoDB 500
mysql tables in use 1, locked 1
2 lock struct(s), heap size 320, 1 row lock(s)
MySQL thread id 4480, query id 25022091 localhost root User sleep
update t set a=sleep(200) where a=6
1RZWKDWWKHVLWXDWLRQLVFOHDUZHFDQFRQVLGHUKRZWRIL[LW
■ <RXMXVWOHDUQHGDERXWDQRWKHULPSRUWDQWWURXEOHVKRRWLQJLQVWUXPHQW,QQR'%
0RQLWRUZKLFKFDQEHFDOOHGZLWKWKHKHOSRI SHOW ENGINE INNODB STATUS,ZLOO
DGGPRUHGHWDLOVDERXW,QQR'%0RQLWRUVDWWKHHQGRIWKLVFKDSWHULQ£6+2:
(1*,1(,112'%67$786DQG,QQR'%0RQLWRUV¤RQSDJH
Transactions
0\64/VXSSRUWVWUDQVDFWLRQVDWWKHVWRUDJHHQJLQHOHYHO7KHPRVWSRSXODUDPRQJWKH
RIILFLDOO\ VXSSRUWHG VWRUDJH HQJLQHV ,QQR'% SURYLGHV WUDQVDFWLRQ VXSSRUW ,Q WKLV
VHFWLRQZHGLVFXVVKRZWRWURXEOHVKRRW,QQR'%WUDQVDFWLRQV
,Q0\64/\RXFDQVWDUWDWUDQVDFWLRQXVLQJDSTART TRANSACTIONRU BEGINVWDWHPHQW
7RFRPPLWDWUDQVDFWLRQFDOOCOMMITDQGWRUROOLWEDFN FDQFHOLW FDOOROLLBACK
$QDOWHUQDWHZD\WRVWDUWDPXOWLVWDWHPHQWWUDQVDFWLRQLVWRVHWWKHYDULDEOH autocom
mitWR]HUR7KLVZLOORYHUULGHWKHGHIDXOW0\64/EHKDYLRUZKLFKVHQGVDQLPSOLFLW
FRPPLW DIWHU HDFK VWDWHPHQW :LWK autocommit VHW WR \RX QHHG WR FDOO COMMIT RU
ROLLBACK H[SOLFLWO\ $IWHU WKDW WKH QH[W VWDWHPHQW EHJLQV D QHZ WUDQVDFWLRQ
DXWRPDWLFDOO\
0\64/ DOVR SURYLGHV SAVEPOINT DQG XA WUDQVDFWLRQ LQWHUIDFHV $OWKRXJK ,QQR'%
VXSSRUWVERWK,ZLOOQRWGHVFULEHWKHPLQWKLVERRNEHFDXVHLWZRXOGQRWRIIHUDQ\
H[WUDLQVLJKWUHODWHGWRRXUWURXEOHVKRRWLQJWHFKQLTXHV,QRWKHUZRUGVWKHVDPHWHFK
QLTXHV,GHVFULEHFDQEHDSSOLHGWRVXFKWUDQVDFWLRQV
Hidden Queries
,QQR'%WUHDWVHYHU\UHTXHVWIRUGDWDDVDWUDQVDFWLRQ,WGRHVQRWPDWWHUZKHWKHUWKH
WUDQVDFWLRQLVDVLQJOHVWDWHPHQWRULILWLVPXOWLSOHVWDWHPHQWV:LWKUHJDUGWRWURXEOH
VKRRWLQJ \RX FDQ KDQGOH VLQJOHTXHU\ WUDQVDFWLRQV DV GHVFULEHG LQ £5RZ
/RFNV¤RQSDJH<RXQHHGWRILQGRXWZKLFKTXHULHVUXQFRQFXUUHQWO\DQGZKLFK
ORFNVJHWLQWKHZD\RIHDFKRWKHU
7KLQJVFKDQJHZKHQ\RXKDYHWUDQVDFWLRQVWKDWFRQVLVWRIPXOWLSOHVWDWHPHQWV,QWKLV
FDVH WKH WUDQVDFWLRQ FDQ ORFN URZV HYHQ ZKHQ \RX VHH QR TXHU\ LQ WKH SHOW
PROCESSLISTRXWSXW
7RLOOXVWUDWHWKLVSUREOHPOHW¦VPRGLI\RXUH[DPSOHRQHPRUHWLPH1RZZHGRQ¦WHYHQ
QHHGWRFDOOsleepWRFUHDWHDGHOD\%HIRUHUXQQLQJWKLVH[DPSOH,UHYHUWHGWKHFKDQJHG
URZVVRWKHWDEOHKDVWKHVDPHYDOXHVDVLQWKHLQLWLDOWHVWVHWXS
Transactions | 63
mysql1> BEGIN;
Query OK, 0 rows affected (0.00 sec)
3OHDVH QRWH WKDW WKH WUDQVDFWLRQ LV QRW FORVHG /HW¦V VWDUW DQRWKHU IURP DQRWKHU
FRQQHFWLRQ
mysql2> BEGIN;
Query OK, 0 rows affected (0.00 sec)
------------------
---TRANSACTION 0 26243835, ACTIVE 106 sec, OS thread id 100936704
2 lock struct(s), heap size 320, 1 row lock(s), undo log entries 2
MySQL thread id 4484, query id 25022125 localhost root
7KHVDPHUHFLSHZLOOZRUNIRU0\,6$0WDEOHVORFNHGZLWKLOCK TABLE
TXHU\DQGWKXVQRWQHFHVVDULO\YLVLEOHLQWKHSHOW PROCESSLISTRXWSXW
a,:' ,QQR'%SULQWVLQIRUPDWLRQDERXWVXFKWDEOHVLQLWVVWDWXVRXWSXW
------------
TRANSACTIONS
------------
Trx id counter B55
Purge done for trx's n:o < B27 undo n:o < 0
History list length 7
LIST OF TRANSACTIONS FOR EACH SESSION:
---TRANSACTION 0, not started
MySQL thread id 3, query id 124 localhost ::1 root
show engine innodb status
Transactions | 65
MySQL thread id 1, query id 115 localhost ::1 root
--------
7KHORFNLQIRUPDWLRQLVVLPLODUWRZKDWZHVDZLQ£5RZ/RFNV¤RQSDJH
------- TRX HAS BEEN WAITING 4 SEC FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 349 page no 3 n bits 88 index `PRIMARY` of table `test`.`t`
trx id 0 26243836 lock_mode X locks rec but not gap waiting
Record lock, heap no 6 PHYSICAL RECORD: n_fields 3; compact format; info bits 32
0: len 4; hex 00000006; asc ;; 1: len 6; hex 0000019072fb; asc r ;; 2:
len 7; hex 000000003202ca; asc 2 ;;
7KLVFOHDUO\VKRZVWKDWRXUWUDQVDFWLRQLVZDLWLQJIRUWKHORFN)URPWKLVOLVWLQJWKRXJK
LWLVQRWFOHDUZKDWKROGVWKHORFN,I\RXDUHXVLQJYHUVLRQRUXVHEXQGOHG,QQR'%
LQ\RXKDYHWZRFKRLFHVILJXUHLWRXW\RXUVHOIRUXVHWKH,QQR'%/RFNPRQLWRU
,Q RXU H[DPSOH ZH KDYH RQO\ WZR WUDQVDFWLRQV VR LW¦V HDV\ WR VHH WKH DQVZHU DQG
£ILJXULQJLWRXW¤ZRXOGZRUN%XWLI\RXKDYHGR]HQVRIFRQQHFWLRQVXVLQJGLIIHUHQW
URZVRIWKHVDPHWDEOHLWZRXOGQRWEHVRHDV\,ZLOOGHVFULEHWKH,QQR'%/RFNPRQLWRU
ODWHU LQ WKLV FKDSWHU LQ £6+2: (1*,1( ,112'% 67$786 DQG ,QQR'% 0RQL
WRUV¤RQSDJH+HUHZHZLOOXVHDWKLUGFKRLFHDYDLODEOHIRUWKH,QQR'%3OXJLQRQO\
7KH ,QQR'% 3OXJLQ LQ DGGLWLRQ WR PRQLWRUV KDV INFORMATION_SCHEMA WDEOHV QDPHG
INNODB_LOCKSINNODB_LOCK_WAITS ZKLFKKROGVLQIRUPDWLRQDERXWDFTXLUHGORFNVDQG
ZDLWVIRUORFNV DQGINNODB_TRXZKLFKKROGVLQIRUPDWLRQDERXWUXQQLQJWUDQVDFWLRQV
)RURXUH[DPSOHZHFDQTXHU\WKHVHWDEOHV
mysql> SELECT * FROM innodb_locks\G
*************************** 1. row ***************************
lock_id: 3B86:1120:3:6
lock_trx_id: 3B86
lock_mode: X
lock_type: RECORD
lock_table: `test`.`t`
lock_index: `PRIMARY`
lock_space: 1120
lock_page: 3
lock_rec: 6
lock_data: 6
*************************** 2. row ***************************
lock_id: 3B85:1120:3:6
lock_trx_id: 3B85
lock_mode: X
lock_type: RECORD
lock_table: `test`.`t`
lock_index: `PRIMARY`
lock_space: 1120
lock_page: 3
lock_rec: 6
lock_data: 6
2 rows in set (0.01 sec)
7KH FROXPQ requesting_trx_id LV WKH ,' RI RXU £KDQJLQJ¤ WUDQVDFWLRQ DQG
blocking_trx_idLVWKH,'RIWKHWUDQVDFWLRQWKDWKROGVWKHORFNrequested_lock_idDQG
blocking_lock_id VKRZ LQIRUPDWLRQ DERXW WKH UHTXHVWHG DQG EORFNHG ORFNV
UHVSHFWLYHO\
$OOZHQHHGWRNQRZQRZLVWKH0\64/SURFHVV,'RIWKHEORFNLQJWUDQVDFWLRQVRZH
FDQGRVRPHWKLQJZLWKLW7KHFRQWHQWRIWKHINNODB_TRXWDEOHZLOOKHOSXVILQGLW
mysql> SELECT * FROM innodb_trx\G
*************************** 1. row ***************************
trx_id: 3B86
trx_state: LOCK WAIT
trx_started: 2011-08-02 14:48:51
trx_requested_lock_id: 3B86:1120:3:6
trx_wait_started: 2011-08-02 14:49:59
trx_weight: 2
trx_mysql_thread_id: 28546
trx_query: UPDATE t SET a=36 WHERE a=6
trx_operation_state: starting index read
trx_tables_in_use: 1
trx_tables_locked: 1
trx_lock_structs: 2
trx_lock_memory_bytes: 320
trx_rows_locked: 1
trx_rows_modified: 0
trx_concurrency_tickets: 0
trx_isolation_level: REPEATABLE READ
trx_unique_checks: 1
trx_foreign_key_checks: 1
trx_last_foreign_key_error: NULL
trx_adaptive_hash_latched: 0
trx_adaptive_hash_timeout: 10000
*************************** 2. row ***************************
trx_id: 3B85
trx_state: RUNNING
trx_started: 2011-08-02 14:48:41
trx_requested_lock_id: NULL
trx_wait_started: NULL
trx_weight: 4
trx_mysql_thread_id: 28544
trx_query: NULL
Transactions | 67
trx_operation_state: NULL
trx_tables_in_use: 0
trx_tables_locked: 0
trx_lock_structs: 2
trx_lock_memory_bytes: 320
trx_rows_locked: 1
trx_rows_modified: 2
trx_concurrency_tickets: 0
trx_isolation_level: REPEATABLE READ
trx_unique_checks: 1
trx_foreign_key_checks: 1
trx_last_foreign_key_error: NULL
trx_adaptive_hash_latched: 0
trx_adaptive_hash_timeout: 10000
2 rows in set (0.11 sec)
7KH IdRIRXUEORFNLQJWUDQVDFWLRQLV%6RWKLVLVWKHVHFRQGURZLQWKHRXWSXW
ZLWKDtrx_mysql_thread_idRI:HFDQFRQILUPWKLVXVLQJSHOW PROCESSLIST
mysql> SHOW PROCESSLIST\G
*************************** 1. row ***************************
Id: 28542
User: root
Host: localhost
db: information_schema
Command: Sleep
Time: 46
State:
Info: NULL
*************************** 2. row ***************************
Id: 28544
User: root
Host: localhost
db: test
Command: Sleep
Time: 79
State:
Info: NULL
*************************** 3. row ***************************
Id: 28546
User: root
Host: localhost
db: test
Command: Query
Time: 1
State: Updating
Info: UPDATE t SET a=36 WHERE a=6
*************************** 4. row ***************************
Id: 28547
User: root
Host: localhost
db: test
Command: Query
Time: 0
State: NULL
1RZ WKDW ZH NQRZ WKH 0\64/ WKUHDG ,' ZH FDQ GR ZKDWHYHU ZH ZDQW ZLWK WKH
EORFNLQJ WUDQVDFWLRQ HLWKHU ZDLW XQWLO LW ILQLVKHV RU NLOO LW ,I ZH UDQ WKH RIIHQGLQJ
FRPPDQGIURPDQDSSOLFDWLRQZHFDQDOVRDQDO\]HZKDWOHGWRVXFKDORFNLQJLVVXH
DQGFDQIL[LWWRSUHYHQWIXWXUHSUREOHPV
$FWXDOO\WKHINNODB_TRXWDEOHFRQWDLQVDORWRIXVHIXOLQIRUPDWLRQDERXWWUDQVDFWLRQV
,I ZH JR EDFN WR RXU H[DPSOH ZH FDQ VHH trx_state: LOCK WAIT IRU RXU ZDLWLQJ
WUDQVDFWLRQDQG trx_state: RUNNINGIRUWKHRQHWKDWLVUXQQLQJ,ZRQ¦WGHVFULEHWKLV
DGGLWLRQDOLQIRUPDWLRQKHUHEXW,ZLOOWRXFKRQLWLQ&KDSWHU
■ :HKDYHMXVWOHDUQHGWKDWDQXQFRPPLWWHGWUDQVDFWLRQFDQKROGORFNVHYHQLIWKH
TXHU\XVLQJWKHDIIHFWHGURZVILQLVKHGKRXUVDJR
<RXVKRXOGUHPHPEHUWKLVZKLOHFRGLQJ,VDZHQYLURQPHQWVZKHUHXVHUVVHWautocom
mit=0 DQG OHIW WUDQVDFWLRQV UXQQLQJ IRU KRXUV 7KLV OHDGV WR LVVXHV WKDW DUH KDUG WR
XQFRYHU DQG XQGHUVWDQG HVSHFLDOO\ ZKHQ WKH XVHU ZDV QRW SUHSDUHG IRU LW 6XFK
HQYLURQPHQWVDUHRIWHQXVHGLQSRSXODU-DYDIUDPHZRUNVWKDWDGG autocommit=0WRD
85/E\GHIDXOW
■ 7RVXPPDUL]HZKHQ\RXZRUNZLWKPXOWLVWDWHPHQWWUDQVDFWLRQVFRPPLWWKHPDV
VRRQ DV \RX FDQ 'RQ¦W OHDYH DQ XQFRPPLWWHG WUDQVDFWLRQ DURXQG DIWHU LWV ODVW
XSGDWHKDVILQLVKHGHYHQLILWGRHVQRWPRGLI\DQ\IXUWKHUURZV
Deadlocks
'HDGORFNLVDVLWXDWLRQZKHQWZRRUPRUHFRPSHWLQJWUDQVDFWLRQVDUHZDLWLQJIRUHDFK
RWKHUWRIUHHORFNVDQGWKXVQHLWKHUHYHUILQLVKHV:LWKURZOHYHOORFNLQJGHDGORFNV
DUHQRWDYRLGDEOH
,QQR'%KDVDQLQWHUQDOGHDGORFNGHWHFWRU:KHQLWILQGVRQHLWMXVWUROOVEDFNRQHRI
WKHWUDQVDFWLRQVUHSRUWLQJDQHUURUWKDWZH¦OOVHHPRPHQWDULO\:KHQGHVLJQLQJDQ
DSSOLFDWLRQ \RX QHHG WR EH SUHSDUHG IRU VXFK D VLWXDWLRQ DQG KDQGOH WKH UROOEDFN
DSSURSULDWHO\
,QIRUPDWLRQDERXWGHDGORFNVFDQEHIRXQGLQSHOW ENGINE INNODB STATUS7RGHPRQ
VWUDWHWKLVZHZLOOH[DPLQHDWULYLDOH[DPSOHRIDGHDGORFN
7KHLQLWLDOGDWDLV
mysql> CREATE TABLE `t` (
`a` int(10) unsigned NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`a`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.27 sec)
Transactions | 69
Query OK, 1 row affected (0.11 sec)
Records: 1 Duplicates: 0 Warnings: 0
1RZOHW¦VVWDUWWZRWUDQVDFWLRQVDQGLQVHUWRQHURZLQHDFKRIWKHP
mysql1> BEGIN;
Query OK, 0 rows affected (0.00 sec)
mysql2> BEGIN;
Query OK, 0 rows affected (0.00 sec)
:KLOHLWZDLWVOHW¦VJRWRWKHVHFRQGRQHDQGPRGLI\LWVURZ
mysql2> UPDATE t SET a=8 WHERE a=9;
ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction
7KH TXHU\ IDLOV LPPHGLDWHO\ UHWXUQLQJ LQIRUPDWLRQ DERXW WKH GHDGORFN WKDW KDV
RFFXUUHG0HDQZKLOHWKHVHFRQGTXHU\FRPSOHWHGZLWKQRSUREOHPV
Query OK, 1 row affected (9.56 sec)
Rows matched: 1 Changed: 1 Warnings: 0
<RXMXVWVDZKRZ,QQR'%¦VGHDGORFNGHWHFWRUZRUNHG7RILQGRXWZKDWKDSSHQHG
ZHFDQDJDLQH[DPLQHSHOW ENGINE INNODB STATUS
------------------------
LATEST DETECTED DEADLOCK
------------------------
110803 3:04:34
*** (1) TRANSACTION:
TRANSACTION 3B96, ACTIVE 29 sec, OS thread id 35542016 updating or deleting
mysql tables in use 1, locked 1
LOCK WAIT 3 lock struct(s), heap size 320, 2 row lock(s), undo log entries 2
MySQL thread id 30446, query id 772 localhost root Updating
update t set a=9 where a=8
*** (1) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 1121 page no 3 n bits 80 index `PRIMARY` of table `test`.`t`
trx id 3B96 lock mode S locks rec but not gap waiting
Record lock, heap no 8 PHYSICAL RECORD: n_fields 3; compact format; info bits 32
0: len 4; hex 00000009; asc ;;
1: len 6; hex 000000003b97; asc ; ;;
2: len 7; hex 510000022328d5; asc Q #( ;;
Transactions | 71
1: len 6; hex 000000003b96; asc ; ;;
2: len 7; hex 50000002221b83; asc P " ;;
7KHRXWSXWFRQWDLQVDORWRILQIRUPDWLRQDERXWWKHODWHVWGHDGORFNDQGZK\LWKDSSHQHG
<RXQHHGWRSD\DWWHQWLRQWRWKHSDUWVQDPHG WAITING FOR THIS LOCK TO BE GRANTED
ZKLFKVKRZVZKLFKORFNWKHWUDQVDFWLRQLVZDLWLQJIRU DQGHOLDS THE LOCK(S) ZKLFK
VKRZV WKH ORFNV WKDW DUH KROGLQJ XS WKLV WUDQVDFWLRQ 7KLV NQRZOHGJH LV HVSHFLDOO\
LPSRUWDQWLQDSSOLFDWLRQVZKHUH\RXFDQQRWSUHGLFWZKLFKTXHULHVDUHH[HFXWHGDWSDU
WLFXODUWLPHVVXFKDVTXHULHVLQYRNHGE\LQWHUDFWLRQVZLWKXVHUVRIDZHEDSSOLFDWLRQ
7RFRSHZLWKSRWHQWLDOGHDGORFNV\RXQHHGWRDGGHUURUKDQGOLQJIXQFWLRQDOLW\LQWR
\RXUDSSOLFDWLRQDVZDVGHVFULEHGLQ&KDSWHU,I\RXJHWDQHUURULQGLFDWLQJDGHDGORFN
DQGUROOEDFNKDVRFFXUUHGUHVWDUWWKHWUDQVDFWLRQ
Implicit Commits
6RPHVWDWHPHQWVFRPPLWWUDQVDFWLRQVHYHQZKHQ\RXGRQ¦WFDOOCOMMITH[SOLFLWO\7KLV
VLWXDWLRQLVFDOOHGDQimplicit commitDQGLI\RXDUHQ¦WDZDUH\RX¦UHGRLQJDFRPPLW
\RXFDQHQGXSZLWKDQLQFRQVLVWHQWVWDWH
$ORWRIVWDWHPHQWVFDXVHLPSOLFLWFRPPLWV,ZRQ¦WOLVWWKHPKHUHEHFDXVHWKH\FDQ
YDU\IURPYHUVLRQWRYHUVLRQ7KHJHQHUDOUXOHLVWKDW''/WUDQVDFWLRQUHODWHGDQG
DGPLQLVWUDWLYHVWDWHPHQWVFDXVHLPSOLFLWFRPPLWVZKHUHDVWKRVHWKDWZRUNZLWKGDWD
GRQRW
2QHV\PSWRPRIDQXQDQWLFLSDWHGLPSOLFLWFRPPLWLVZKHQ\RXVHHXQZDQWHGGDWDLQ
WDEOHVHYHQWKRXJKWKHVWDWHPHQWVLQVHUWLQJWKDWGDWDZHUHVXSSRVHGWREHUROOHGEDFN
+HUH¦VDQH[DPSOH
mysql> CREATE TABLE t1(f1 INT) ENGINE=InnoDB;
Query OK, 0 rows affected (0.14 sec)
mysql> BEGIN;
Query OK, 0 rows affected (0.00 sec)
mysql> ROLLBACK;
Query OK, 0 rows affected (0.00 sec)
■ *HQHUDOO\ WR SUHYHQW VXFK LVVXHV NHHS WUDQVDFWLRQV VPDOO VR WKDW HYHQ LI \RX
LQWHUUXSWDWUDQVDFWLRQE\PLVWDNHZLWKDVWDWHPHQWFDXVLQJDQLPSOLFLWFRPPLW
WKHVLGHHIIHFWZLOOEHPLQLPDO
Metadata Locking
7RHQVXUHGDWDFRQVLVWHQF\''/RSHUDWLRQVRQDWDEOHVKRXOGEHEORFNHGLIDQRWKHU
WUDQVDFWLRQ LV XVLQJ WKH WDEOH 6WDUWLQJ ZLWK YHUVLRQ WKLV LV DFKLHYHG E\ XVLQJ
PHWDGDWDORFNV
:KHQDWUDQVDFWLRQVWDUWVLWDFTXLUHVPHWDGDWDORFNVRQDOOWKHWDEOHVLWXVHVDQGUHOHDVHV
WKHORFNVZKHQLWILQLVKHV$OORWKHUWKUHDGVWKDWWU\WRPRGLI\WKHWDEOHV¦GHILQLWLRQV
ZDLWXQWLOWKHWUDQVDFWLRQHQGV
''/RSHUDWLRQVLQ0\64/VHUYHUVSULRUWRNQHZQRWKLQJDERXWSDUDOOHOWUDQVDF
WLRQV7KLVZRXOGOHDGWRFROOLVLRQVVLPLODUWRWKHIROORZLQJ
mysql1> BEGIN;
Query OK, 0 rows affected (0.08 sec)
Metadata Locking | 73
+------+
| 100 |
| 200 |
+------+
2 rows in set (0.10 sec)
,QRQHWUDQVDFWLRQZHDUHVHOHFWLQJGDWDIURPDWDEOHSODQQLQJWRXVHWKLVUHVXOWVHW
GXULQJWKHFXUUHQWWUDQVDFWLRQ$WWKHYHU\VDPHWLPHDQRWKHUWKUHDGGURSVWKHWDEOH
mysql2> DROP TABLE t1;
Query OK, 0 rows affected (0.17 sec)
DROPLVQRWDQRSHUDWLRQWKDWFDQEHUROOHGEDFNVRWKHILUVWWKUHDGLVWKHRQHDIIHFWHG
E\WKHFRQIOLFW
mysql> SELECT * FROM t1;
ERROR 1146 (42S02): Table 'test.t1' doesn't exist
2XUWUDQVDFWLRQREYLRXVO\FDQQRWFRPSOHWH$PHWDGDWDORFNZRXOGDOORZRXUWUDQV
DFWLRQ WR FRPSOHWH EHIRUH WKH RWKHU FRQQHFWLRQ¦V DROP VWDWHPHQW FRXOG H[HFXWH 7R
LOOXVWUDWHWKLVZHZLOOH[HFXWHWKHVDPHH[DPSOHRQYHUVLRQRUODWHU
mysql1> BEGIN;
Query OK, 0 rows affected (0.00 sec)
1RZWKHDROPDWWHPSWMXVWEORFNV
mysql2> DROP TABLE t1;
$IWHULVVXLQJWKDWFRPPDQG,ZDLWHGDIHZVHFRQGVVR\RXZLOOVHHKRZORQJWKHGURS
ZDVH[HFXWLQJDQGWKHQUROOHGEDFNWKHILUVWWUDQVDFWLRQ
mysql1> ROLLBACK;
Query OK, 0 rows affected (0.00 sec)
1RZZHFDQORRNDWWKHTXHU\H[HFXWLRQWLPHWREHVXUHWKHDROPZDLWHGXQWLOWKHILUVW
WUDQVDFWLRQILQLVKHG
mysql2> DROP TABLE t1;
Query OK, 0 rows affected (1 min 0.39 sec)
7KHQHZPRGHOLVPXFKVDIHUDQGDVVXFKGRHVQRWUHTXLUHDQ\QHZWURXEOHVKRRWLQJ
WHFKQLTXHV%XW0\64/KDVEHHQDURXQGIRUDORQJWLPHEHIRUHPHWDGDWDORFNVZHUH
LQWURGXFHGDQGXVHUVEHFDPHXVHGWRWKHROGEHKDYLRUHYHQFUHDWLQJZRUNDURXQGVIRU
LW6R,ZDQWWRDGGDIHZQRWHVDERXWWKHGLIIHUHQFHVLQVHUYHUEHKDYLRUFUHDWHGE\
PHWDGDWDORFNLQJ
mysql1> BEGIN;
Query OK, 0 rows affected (0.00 sec)
$WWKHVDPHWLPHDQRWKHUWKUHDGFDOOVTRUNCATEZKLFKDIIHFWVWDEOHPHWDGDWD
mysql2> TRUNCATE TABLE tm;
<RX FDQ VHH WKH VWDWHV RI ERWK WKUHDGV LI \RX UXQ SHOW PROCESSLIST XVLQJ D WKLUG
FRQQHFWLRQ
mysql> SHOW PROCESSLIST\G
*************************** 1. row ***************************
Id: 30970
User: root
Host: localhost
db: test
Command: Sleep
Time: 26
State:
Info: NULL
*************************** 2. row ***************************
Id: 30972
User: root
Metadata Locking | 75
Host: localhost
db: test
Command: Query
Time: 9
State: Waiting for table metadata lock
Info: TRUNCATE TABLE tm
*************************** 3. row ***************************
Id: 31005
User: root
Host: localhost
db: NULL
Command: Query
Time: 0
State: NULL
Info: SHOW PROCESSLIST
3 rows in set (0.00 sec)
7RSURYLGHDQHIIHFWLYHWLPHRXW\RXFDQVHWlock_wait_timeoutWRDVPDOOHUYDOXHVXFK
DVRQHVHFRQG
mysql> set lock_wait_timeout=1;
Query OK, 0 rows affected (0.00 sec)
Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
,WPLJKWVHHPDUWLILFLDOWRLOOXVWUDWHDSUREOHPFDXVHGE\D0\64/EXJ
LQVWHDGRIDXVHUHUURUEXWWKHPHVVDJHLVXVHIXO1RERG\LVLQVXUHG
a,:' DJDLQVW KLWWLQJ D EXJ DQG LW LV JRRG WR EH SUHSDUHG )RUHZDUQHG LV
IRUHDUPHG
7KHV\PSWRPVRID£UHVRXUFH¤GHDGORFNDUHWKHVDPHDVIRUGHDGORFNVFDXVHGE\URZ
ORFNLQJTXHULHVMXVWKDQJ1RLQWHUQDOPHFKDQLVPFDQILQGVXFKDGHDGORFNDQGNLOOLW
VRGRQ¦WH[SHFWWKDWWKHWKUHDGZLOOWLPHRXW DVZLWKDQ,QQR'%ORFN RULPPHGLDWHO\
7KLVRXWSXWVKRZVVHYHUDOTXHULHVZDLWLQJIRUGLIIHUHQWNLQGVRIORFNVIRUPRUHWKDQ
VHFRQGV
7KH TRANSACTIONSSDUWRIWKH SHOW ENGINE INNODB STATUSRXWSXWGRHVQRWVKRZDQ\
QHZLQIRUPDWLRQ
------------
TRANSACTIONS
------------
Trx id counter 4211
Purge done for trx's n:o < 4211 undo n:o < 0
History list length 127
LIST OF TRANSACTIONS FOR EACH SESSION:
---TRANSACTION 0, not started, OS thread id 35934208
MySQL thread id 502, query id 124 localhost root
show engine innodb status
---TRANSACTION 0, not started, OS thread id 33726976
MySQL thread id 6, query id 71 localhost root Waiting for table metadata lock
select * from t1, t2
---TRANSACTION 0, not started, OS thread id 35786240
mysql tables in use 2, locked 2
MySQL thread id 8, query id 69 localhost root Waiting for table level lock
insert into t3 values ((select count(*) from t4))
---TRANSACTION 4201, not started, OS thread id 35354624
mysql tables in use 2, locked 4
MySQL thread id 10, query id 68 localhost root
---TRANSACTION 0, not started, OS thread id 35633152
MySQL thread id 7, query id 70 localhost root Waiting for table metadata lock
rename table t2 to t0, t4 to t2, t0 to t4
6WDUWLQJ ZLWK YHUVLRQ DGGLWLRQDO LQIRUPDWLRQ FDQ EH UHFHLYHG IURP WKH
performance_schema ZKLFK ,¦OO GHVFULEH LQ £3(5)250$1&(B6&+(0$
7DEOHV¤RQSDJH+HUH,ZDQWWRVKRZZKDWWRGRZKHQWKHSUREOHP,MXVWKLJK
OLJKWHGDULVHV
7KHILUVWWDEOHWRFKHFNLV MUTEX_INSTANCESZKLFKOLVWVDOOPXWH[HVFUHDWHGVLQFHWKH
VHUYHUVWDUWHG6RPHRIWKHPDUHFXUUHQWO\XQXVHGVR\RXVKRXOGVNLSWKHPLQ\RXU
SELECTDQGUHWULHYHRQO\WKHRQHVZKHUHLOCKED_BY_THREAD_IDLVQRWQXOO
mysql> SELECT * FROM MUTEX_INSTANCES WHERE LOCKED_BY_THREAD_ID is
not null\G
*************************** 1. row ***************************
NAME: wait/synch/mutex/sql/MDL_wait::LOCK_wait_status
OBJECT_INSTANCE_BEGIN: 35623528
LOCKED_BY_THREAD_ID: 23
*************************** 2. row ***************************
NAME: wait/synch/mutex/sql/MDL_wait::LOCK_wait_status
OBJECT_INSTANCE_BEGIN: 35036264
LOCKED_BY_THREAD_ID: 22
*************************** 3. row ***************************
7RILQGRXWZKRZDLWVRQWKHVHPXWH[HVTXHU\WKHEVENTS_WAITS_CURRENTWDEOH
mysql> SELECT THREAD_ID, EVENT_ID, EVENT_NAME, SOURCE,
TIMER_START, OBJECT_INSTANCE_BEGIN, OPERATION FROM EVENTS_WAITS_CURRENT WHERE
THREAD_ID IN(SELECT LOCKED_BY_THREAD_ID FROM MUTEX_INSTANCES WHERE
LOCKED_BY_THREAD_ID IS NOT NULL)\G
*************************** 1. row ***************************
THREAD_ID: 24
EVENT_ID: 268
EVENT_NAME: wait/synch/cond/mysys/my_thread_var::suspend
SOURCE: thr_lock.c:461
TIMER_START: 128382107931720
OBJECT_INSTANCE_BEGIN: 508721156
OPERATION: timed_wait
*************************** 2. row ***************************
THREAD_ID: 22
EVENT_ID: 44
EVENT_NAME: wait/synch/cond/sql/MDL_context::COND_wait_status
SOURCE: mdl.cc:995
TIMER_START: 130306657228800
OBJECT_INSTANCE_BEGIN: 35036372
OPERATION: timed_wait
*************************** 3. row ***************************
THREAD_ID: 23
EVENT_ID: 42430
EVENT_NAME: wait/synch/cond/sql/MDL_context::COND_wait_status
SOURCE: mdl.cc:995
TIMER_START: 7865906646714888
OBJECT_INSTANCE_BEGIN: 35623636
OPERATION: timed_wait
3 rows in set (2.23 sec)
7KH THREAD_IDLQWKHRXWSXWLVWKHDFWXDOQXPEHUDVVLJQHGLQWHUQDOO\WRDWKUHDGE\
P\VTOGQRWWKHQXPEHURIWKHFRQQHFWLRQWKUHDGWKDWFDQKHOSXVILQGWKHVWDWHPHQW
FDXVLQJ WKH GHDGORFN 7R ILQG WKH QXPEHU RI WKH FRQQHFWLRQ WKUHDG TXHU\ WKH
THREADSWDEOH,KDYHQRWILOWHUHGWKHRXWSXWKHUHEHFDXVH,ZDQWWRVKRZ\RXDOOWKH
WKUHDGVWKDWUXQLQVLGHWKHP\VTOGSURFHVVZKLOHLWVHUYHVWKHVL[FRQQHFWLRQVIURPRXU
H[DPSOH
mysql> SELECT * FROM THREADS\G
*************************** 1. row ***************************
THREAD_ID: 0
ID: 0
NAME: thread/sql/main
*************************** 2. row ***************************
THREAD_ID: 24
ID: 8
NAME: thread/sql/one_connection
*************************** 3. row ***************************
THREAD_ID: 2
1RZZHKDYHDOOWKHLQIRUPDWLRQZHFDQJHWDERXWZKDWLVJRLQJRQLQVLGHWKHVHUYHU
ZLWKRXWHQJDJLQJLQVSHFLDOPDQLSXODWLRQVVXFKDVDWWDFKLQJDGHEXJJHUWRWKHUXQQLQJ
P\VTOGSURFHVV,QWKLVFDVHZHDFWXDOO\KDGDOOWKHLQIRUPDWLRQZHQHHGHGDIWHUWKH
ILUVW SHOW PROCESSLIST FDOO %XW , ZDQWHG WR VKRZ ZKDW¦V DYDLODEOH IURP
performance_schemaWRKHOSGHEXJLQWHUQDOSUREOHPVVXFKDVGHDGORFNVZKHQWKHVWDWH
LVQRWDVFOHDUDVLWZDVLQWKLVH[DPSOH
:KDWVKRXOGEHGRQHWRVROYHDGHDGORFN"<RXQHHGWRSLFNDFRQQHFWLRQWRVHUYHDV
WKH YLFWLP DQG NLOO LW ,Q WKLV FDVH IRUWXQDWHO\ ZH FDQ ILQG D UHODWLYHO\ XQLPSRUWDQW
FRQQHFWLRQLQWKHSHOW ENGINE INNODB STATUSZHVDZHDUOLHU+HUHLVZKDWLWVD\VDERXW
0\64/VHUYHU¦VWKUHDG
---TRANSACTION 4201, not started, OS thread id 35354624
mysql tables in use 2, locked 4
MySQL thread id 10, query id 68 localhost root
7KLVLVQRWZDLWLQJIRUDQ\DFWLRQEXWLWLVORFNLQJWZRWDEOHV/HW¦VNLOOLW
mysql> KILL 10;
Query OK, 0 rows affected (0.09 sec)
:HZHUHOXFN\DQGNLOOLQJWKLVVLQJOHFRQQHFWLRQVROYHGWKHSUREOHP
mysql> SHOW PROCESSLIST\G
*************************** 1. row ***************************
Id: 2
User: root
Host: localhost
db: performance_schema
Command: Query
7KLVZDVDVKRUWRYHUYLHZDERXWV\VWHPGHDGORFNVDQGZKDWWRGRLI\RXPHHWWKHP
7KHEDVLFSURFHGXUHLVWRPDNHVXUHWKHUHDUHWKUHDGVZDLWLQJHVVHQWLDOO\IRUHYHUILQG
DWKUHDG\RXFDQOLYHZLWKRXWDQGNLOOLW<RXVKRXOGQRWEHDIUDLGRINLOOLQJVWDOOHG
'RQ¦WPL[VHPDSKRUHV¦ORQJZDLWLQJWLPHVZLWKXVHUVHVVLRQVWKDWODVW
PRUHWKDQVHFRQGV,QQR'%VHPDSKRUHVGRSURWHFWFHUWDLQRSHUD
WLRQV$VLQJOHVHVVLRQFDQLVVXHQRQHRUGR]HQVRIWKHP
<RXFDQPRQLWRUWKHVWDWHRIDQDSSOLFDWLRQDQGSUHYHQWVXFKVLWXDWLRQV7KXVSHU
WDLQLQJWR,QQR'%VHPDSKRUHVWKHVWRUDJHHQJLQHSULQWVLQIRUPDWLRQDERXWZDLWWLPHV
LQLWVPRQLWRU
----------
SEMAPHORES
----------
OS WAIT ARRAY INFO: reservation count 179, signal count 177
--Thread 35471872 has waited at trx/trx0rec.c line 1253 for 0.00 seconds the semaphore:
X-lock (wait_ex) on RW-latch at 0x149b124c created in file buf/buf0buf.c line 898
a writer (thread id 35471872) has reserved it in mode wait exclusive
number of readers 1, waiters flag 0, lock_word: ffffffff
Last time read locked in file buf/buf0flu.c line 1186
Last time write locked in file trx/trx0rec.c line 1253
Mutex spin waits 209, rounds 3599, OS waits 38
RW-shared spins 70, rounds 2431, OS waits 67
RW-excl spins 0, rounds 2190, OS waits 71
Spin rounds per wait: 17.22 mutex, 34.73 RW-shared, 2190.00 RW-excl
'RQ¦WZRUU\LI,QQR'%SULQWVLQIRUPDWLRQDERXWVHPDSKRUHZDLWVIRU
RSHUDWLRQVWKDWQHHGWRWDNHDORQJWLPHVXFKDVCHECK TABLERQDKXJH
a,:' WDEOH:KDW\RXQHHGWRWDNHDFWLRQRQLVDODUJHZDLWLQJWLPHGXULQJD
QRUPDORSHUDWLRQ
7KLVZLOOFKDQJHDVGLVFXVVHGLQ£0XOWLWKUHDGHG6ODYH¤RQSDJH
5RZEDVHGORJJLQJUHFRUGVUDZGDWDDERXWURZVLQWKHORJ7KHVODYH
GRHVQRWH[HFXWHWKHVDPHTXHULHVDVWKHPDVWHUEXWLQVWHDGXSGDWHV
m
UP, WDEOHURZVGLUHFWO\7KLVLVWKHVDIHVWELQDU\ORJJLQJIRUPDWEHFDXVHLW
FDQ¦WLQVHUWLQWRWKHVODYHWDEOHDQ\YDOXHVWKDWGRQRWH[LVWRQWKHPDVWHU
7KLV IRUPDW FDQ EH XVHG VDIHO\ HYHQ ZKHQ \RX FDOO QRQGHWHUPLQLVWLF
IXQFWLRQVVXFKDVNOW()
6WDWHPHQWEDVHGORJJLQJMXVWSXWVTXHULHVLQWKHRULJLQDO64/IRUPDW
LQWRWKHORJVRWKHVODYHH[HFXWHVWKHVDPHFRPPDQGVDVWKHPDVWHU,I
\RXXVHWKLVIRUPDWQHWZRUNWUDIILFXVXDOO\¢DOWKRXJKQRWDOZD\V¢LV
PXFKORZHUWKDQLIDURZEDVHGIRUPDWLVXVHGEHFDXVHDTXHU\FDQWDNH
XSOHVVGDWDWKDQWKHDFWXDOFKDQJHVLWPDNHVWRURZV7KLVLVHVSHFLDOO\
QRWLFHDEOHZKHQ\RXXSGDWHVHYHUDOURZVLQDWDEOHZLWK%/2%FROXPQV
7KH GLVDGYDQWDJH RI WKLV IRUPDW LV WKDW LW IRUFHV \RX WR HQVXUH GDWD
FRQVLVWHQF\ )RU H[DPSOH LI \RX LQVHUW WKH RXWSXW RI WKH IXQFWLRQ
NOW() LQWR D FROXPQ \RX ZLOO PRVW OLNHO\ KDYH GLIIHUHQW GDWD RQ WKH
PDVWHUDQGVODYH
7KHPL[HGELQDU\ORJJLQJIRUPDWFRQWDLQVWKHDGYDQWDJHVRIERWKURZ
DQG VWDWHPHQW ORJJLQJ LW VDYHV WKH PDMRULW\ RI TXHULHV LQ VWDWHPHQW
IRUPDWEXWVZLWFKHVWRURZIRUPDWZKHQDTXHU\LVQRWVDIHLHZKHQ
LWXVHVDQRQGHWHUPLQLVWLFIXQFWLRQVXFKDVNOW()
:KHQ\RXSODQDQDSSOLFDWLRQXQGHUFRQGLWLRQVZKHUH0\64/LVXVLQJUHSOLFDWLRQEH
DZDUHRIKRZGLIIHUHQWVWDWHPHQWVDIIHFWFRQVLVWHQF\(YHQZKHQWKHPDVWHUSURYLGHV
DORWRIDGGLWLRQDOLQIRUPDWLRQWRWKHVODYHWKHODWWHUFDQQRWKDQGOHDOOLVVXHV
7KH0\64/5HIHUHQFH 0DQXDO FRQWDLQV DOLVWRIVWDWHPHQWVWKDWDUHQRWVDIHZKHQ
VWDWHPHQWEDVHG UHSOLFDWLRQ LV XVHG PHDQLQJ WKDW XVLQJ VXFK D VWDWHPHQW FDQ OHDYH
Multithreaded Slave
7KH 5HSOLFDWLRQ 7HDP LV ZRUNLQJ RQ D PXOWLWKUHDGHG VODYH 7KH FXUUHQW VWDWXV
RI WKLV HQKDQFHPHQW LV IHDWXUH SUHYLHZ $ PXOWLWKUHDGHG VODYH FDQ GLVWULEXWH
WUDQVDFWLRQV LQWR GLIIHUHQW WKUHDGV <RX FDQ WXQH WKH QXPEHU RI WKUHDGV XVLQJ WKH
slave_parallel_workersYDULDEOH
7KLV IHDWXUH DIIHFWV UHSOLFDWLRQ VFDODELOLW\ LH WKH VSHHG RI GDWD XSGDWHV VR LW FDQ
SUHYHQWVODYHVIURPIDOOLQJVRIDUEHKLQGWKDWFRQVLVWHQF\LVWKUHDWHQHG%XWGRQ¦WH[SHFW
LWWRSUHYHQWGDWDFRQVLVWHQF\LVVXHV
<RXFDQOHDUQPRUHDERXWPXOWLWKUHDGHGVODYHVLQDEORJSRVWE\/XtV6RDUHV
7R LOOXVWUDWH RUGHULQJ SUREOHPV , ZLOO XVH D VLPSOH WDEOH ZLWK D VLQJOH ILHOG DQG QR
XQLTXHLQGH[,QUHDOOLIHDVLPLODUSDWWHUQDSSOLHVZKHQHYHUTXHULHVVHDUFKIRUURZV
ZLWKRXWXVLQJDXQLTXHLQGH[
([DPSOH([DPSOHRIUHSOLFDWLRQLVVXHKDSSHQHGGXHWRZURQJRUGHURIWUDQVDFWLRQV
CREATE TABLE t1(f1 CHAR(2)) ENGINE=InnoDB;
1RZ,¦OOLPLWDWHWKHHIIHFWRIFRQFXUUHQWWUDQVDFWLRQVLQVHUWLQJURZVLQEDWFKPRGH
master1> BEGIN;
master1> INSERT INTO t1 VALUES(1);
master1> INSERT INTO t1 VALUES(2);
master1> INSERT INTO t1 VALUES(3);
master1> INSERT INTO t1 VALUES(4);
master1> INSERT INTO t1 VALUES(5);
1RWH WKDW WKLV WUDQVDFWLRQ LV QRW \HW FRPPLWWHG 1H[W , RSHQ D QHZ WUDQVDFWLRQ LQ
DQRWKHUFRQQHFWLRQDQGLQVHUW\HWDQRWKHUEXQFKRIURZV
master2> BEGIN;
master2> INSERT INTO t1 VALUES('a');
master2> INSERT INTO t1 VALUES('b');
master2> INSERT INTO t1 VALUES('c');
master2> INSERT INTO t1 VALUES('d');
7KLVVHFRQGWUDQVDFWLRQLVFRPPLWWHG1RZ,¦OOFRPPLWWKHILUVWRQH
master1> COMMIT;
<RXSUREDEO\H[SHFWWKDWWKHWDEOHZLOOKDYHDVWKHILUVWURZVDQGDEF
GHDVWKHIROORZLQJURZV7KLVLVDEVROXWHO\FRUUHFWEHFDXVHWKHILUVWWUDQVDFWLRQVWDUWHG
HDUOLHUWKDQWKHVHFRQGRQH
master1> SELECT * FROM t1;
+------+
| f1 |
+------+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| a |
| b |
| c |
| d |
| e |
+------+
10 rows in set (0.04 sec)
%XW WKH PDVWHU GRHVQ¦W ZULWH DQ\WKLQJ WR WKH ELQDU\ ORJ XQWLO WKH WUDQVDFWLRQ LV
FRPPLWWHG7KHUHIRUHWKHVODYHZLOOKDYHDEFGHDVWKHILUVWURZVDQG
DVWKHVHFRQGVHW
slave> SELECT * FROM t1;
+------+
| f1 |
+------+
| a |
| b |
| c |
| d |
| e |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
+------+
10 rows in set (0.04 sec)
7KLVLVILQHVRIDUWKHPDVWHUDQGVODYHFRQWDLQVDPHWKHGDWDDOWKRXJKLQDGLIIHUHQW
RUGHU7KLQJVEUHDNZKHQRQHUXQVDQXQVDIHUPDATE
master1> UPDATE t1 SET f1='A' LIMIT 5;
Query OK, 5 rows affected, 1 warning (0.14 sec)
Rows matched: 5 Changed: 5 Warnings: 1
$V\RXVHHWKHVHUYHUZDUQVXVWKDWWKLVTXHU\LVQRWVDIH/HW¦VVHHZK\2QWKHPDVWHU
ZHHQGXSZLWK
master1> SELECT * FROM t1;
+------+
| f1 |
+------+
| A |
| A |
| A |
| A |
| A |
| a |
| b |
| c |
| d |
| e |
+------+
ZKHUHDVWKHVODYHKDVDFRPSOHWHO\GLIIHUHQWGDWDVHW
slave> SELECT * FROM t1;
+------+
| f1 |
+------+
| A |
| A |
| A |
| A |
| A |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
+------+
7KLV H[DPSOH LV TXLWH VLPSOH ,Q UHDO OLIH PL[XSV DUH XVXDOO\ PXFK ZRUVH ,Q WKLV
H[DPSOH,XVHGDWUDQVDFWLRQDOVWRUDJHHQJLQHDQGPXOWLVWDWHPHQWWUDQVDFWLRQVMXVWWR
UHSURGXFHDQHUURQHRXVUHVXOWHDVLO\:LWKDQRQWUDQVDFWLRQDOVWRUDJHHQJLQH\RXFDQ
VHHVLPLODULVVXHVZKHQXVLQJ0\64/H[WHQVLRQVWKDWGHOD\DFWXDOGDWDFKDQJHVVXFK
DVINSERT DELAYED
7KHEHVWZD\WRSUHYHQWVXFKDVLWXDWLRQLVWRXVHURZEDVHGRUPL[HGUHSOLFDWLRQ,I
\RX VWLFN WR VWDWHPHQWEDVHG UHSOLFDWLRQ LW LV DEVROXWHO\ QHFHVVDU\ WR GHVLJQ WKH
7KHVDPHLVVXHRFFXUVZKHQPL[LQJWUDQVDFWLRQDOWDEOHVXVLQJGLIIHUHQW
HQJLQHVLQWKHVDPHWUDQVDFWLRQ,IHQJLQHVKDYHGLIIHUHQWWUDQVDFWLRQ
LVRODWLRQ OHYHOV RU GLIIHUHQW UXOHV IRU VWDWHPHQWV WKDW FDXVH LPSOLFLW
FRPPLWV\RXFDQHQGXSZLWKSUREOHPVVLPLODUWRWKRVHGHVFULEHGIRU
PL[LQJWUDQVDFWLRQDODQGQRQWUDQVDFWLRQDOWDEOHV
7KLVFDQKDSSHQHYHQZKHQXVLQJDVLQJOH0\64/VHUYHUEXWLQUHSOLFDWHGHQYLURQ
PHQWVWKLQJVVRPHWLPHVJHWHYHQZRUVH6R,¦PLQFOXGLQJWKLVVHFWLRQLQWKHSDUWDERXW
UHSOLFDWLRQHYHQWKRXJKLWFRQWDLQVOHVVRQVIRUQRQUHSOLFDWHGHQYLURQPHQWVDVZHOO
)RU RXU H[DPSOH ZH ZLOO VKRZ D VWRUHG SURFHGXUH XVLQJ WKH VDPH FRQFHSW DV WKH
H[DPSOHIURP£7UDFLQJ%DFN(UURUVLQ'DWD¤RQSDJH,¦PFKDQJLQJWKHWHPSRUDU\
WDEOHKHUHWRDSHUVLVWHQWRQHDQGDGGLQJDQRWKHUSURFHGXUHWKDWZLOOILOOURZVLQWDEOH
t27DEOHt2ZLOODOVRXVHWKH0\,6$0VWRUDJHHQJLQH0\,6$0ZDVWKHGHIDXOWHQJLQH
EHIRUHVRVXFKDWHPSRUDU\WDEOHFDQEHFUHDWHGHDVLO\LIWKHXVHUIRUJHWVWRDGGWKH
ENGINERSWLRQWRWKH CREATE TABLEVWDWHPHQW7KHXVHUPD\DOVRXVH0\,6$0LQWKH
PLVWDNHQKRSHRILPSURYLQJSHUIRUPDQFH
CREATE TABLE t1(f1 INT) ENGINE=InnoDB;
CREATE TABLE t2(f1 INT) ENGINE=MyISAM;
CREATE TABLE t3(f1 INT) ENGINE=InnoDB;
7KHUHDUHH[FHSWLRQVWRWKLVUXOHWKDW,ZRXOGFDOO£VHPLVDIH¤OLNHZKHQDQRQWUDQVDFWLRQDOWDEOHLVUHDG
RQO\RUZULWHRQO\ DORJWDEOHIRULQVWDQFHLVZULWHRQO\LQWKLVFRQWH[W :KHQ\RXXVHVXFKWDEOHV
WRJHWKHUZLWKWUDQVDFWLRQDOWDEOHVSODQFDUHIXOO\
1RZ,ZLOODGGYDOXHVLQWRt2LQDWUDQVDFWLRQ
master> BEGIN;
Query OK, 0 rows affected (0.00 sec)
$QG,¦OOFDOOp1()ZLWKRXWFRPPLWWLQJWKHWUDQVDFWLRQLQWKHSDUDOOHOPDVWHUFRQQHFWLRQ
master> BEGIN;
Query OK, 0 rows affected (0.00 sec)
master> COMMIT;
Query OK, 0 rows affected (0.00 sec)
$V\RXVHHWKHUHDUHWKUHHURZVRQWKHPDVWHU/HW¦VVHHKRZPDQ\ZHKDYHRQWKHVODYH
slave> SELECT * FROM t1;
Empty set (0.00 sec)
7KHVODYHDFWXDOO\KDVQRURZV7KLVKDSSHQHGEHFDXVHWKHPDVWHUZURWHXSGDWHVWR
QRQWUDQVDFWLRQDOWDEOHVLQWRWKHWUDQVDFWLRQFDFKH%XWDVZHVDZHDUOLHUFDFKHFRQWHQW
LVZULWWHQWRWKHELQDU\ORJRQO\DIWHUDWUDQVDFWLRQDFWXDOO\HQGV,QWKLVFDVHSHUKDSV
WKHVODYHDFWXDOO\FRUUHVSRQGVPRUHFORVHO\WRWKHXVHU¦VLQWHQWWKDQWKHPDVWHU EHFDXVH
WKH PDVWHU KDV £JKRVW¤ HQWULHV LQ t1 FRUUHVSRQGLQJ WR D WUDQVDFWLRQ WKDW QHYHU
FRPSOHWHG EXW WKH SRLQW LV WKDW ZH HQG XS ZLWK GDWD LQFRQVLVWHQF\ WKDQNV WR WKH
QRQWUDQVDFWLRQDOWDEOH
$IWHUWDNLQJWKLVSHOW PROCESSLISTRXWSXW,UROOHGEDFNWKHSDUDOOHOTXHU\VRWKH64/
WKUHDGFRXOGVXFFHVVIXOO\ILQLVKWKHTXHU\
slave> SHOW PROCESSLIST\G
*************************** 1. row ***************************
Id: 1
User: system user
Host:
db: NULL
Command: Connect
Time: 267
State: Waiting for master to send event
Info: NULL
*************************** 2. row ***************************
Id: 2
User: system user
Host:
db: NULL
Command: Connect
Time: 168
State: Slave has read all relay log; waiting for the slave I/O thread to update it
Info: NULL
...
<RXFDQDOVRHQFRXQWHUDVLWXDWLRQZKHUHWKHVODYH64/WKUHDGLVKROGLQJORFNVRQURZV
WKDW\RXUDSSOLFDWLRQLVWU\LQJWRDFFHVV7RVHHZKHQWKLVKDSSHQVH[DPLQHWKHRXWSXW
RISHOW PROCESSLISTDQGSHOW ENGINE INNODB STATUS
7KHVROXWLRQWRERWKRIWKHVHVLWXDWLRQVLVHLWKHUWRZDLWXQWLOWKHDFWLYHWKUHDGILQLVKHV
RUWRUROOEDFNDXVHUWUDQVDFWLRQLILWZDLWVIRUDORFNIRUDORQJWLPH
6RZK\GLG,XVHSHOW PROCESSLISTLQVWHDGRIWKHPROCESSLISTWDEOHLQWKHPDMRULW\RI
P\H[DPSOHV")LUVWSHOW PROCESSLISTLVVXSSRUWHGLQDOO0\64/YHUVLRQV:KHQGRLQJ
P\VXSSRUWMRE,FDQUHTXHVWWKLVLQIRUPDWLRQIURPFXVWRPHUVZLWKRXWFKHFNLQJLQ
DGYDQFHZKDWYHUVLRQRI0\64/WKH\XVH$QRWKHUH[SODQDWLRQFRPHVIURPP\VXSSRUW
MREDVZHOOZKHQZRUNLQJZLWKFXVWRPHUVZHGRQ¦WNQRZDOOWKHGHWDLOVDERXWWKHLU
HQYLURQPHQWVRORRNLQJDWWKHQRQILOWHUHGSURFHVVOLVWFDQSURYLGHVRPHLQVLJKWVDERXW
LW
&RQVLGHUDWLRQV DUH GLIIHUHQW ZKHQ \RX GHEXJ \RXU RZQ DSSOLFDWLRQ %HFDXVH \RX
DOUHDG\KDYHLQIRUPDWLRQDERXWZKLFKSURFHVVHVDUHLPSRUWDQW\RXFDQOLPLWRXWSXW
XVLQJTXHULHVZLWKDWHEREFRQGLWLRQVXFKDV
mysql> SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST WHERE TIME > 50
mysql> SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST WHERE INFO LIKE 'my query%'
7KLVFDQVDYHWLPHZKHQDQDO\]LQJWKHUHVXOWV
------------------
TABLE LOCK table `test`.`t` trx id 0 26244357 lock mode IX
RECORD LOCKS space id 349 page no 3 n bits 88 index `PRIMARY` of table `test`.`t`
trx id 0 26244357 lock_mode X locks rec but not gap waiting
&RPSDUHWKLVRXWSXWZLWKWKHRXWSXWZLWKRXWORFNV\RXVDZHDUOLHU7KHLPSRUWDQW
GLIIHUHQFHLVWKDWQRZ\RXKDYHLQIRUPDWLRQDERXWWKHWUDQVDFWLRQWKDWKROGVWKHORFN
---TRANSACTION 0 26244356, ACTIVE 6 sec, OS thread id 101099008
2 lock struct(s), heap size 320, 1 row lock(s), undo log entries 2
MySQL thread id 184, query id 93 localhost root
TABLE LOCK table `test`.`t` trx id 0 26244356 lock mode IX
RECORD LOCKS space id 349 page no 3 n bits 88 index `PRIMARY` of table `test`.`t`
trx id 0 26244356 lock_mode X locks rec but not gap
Record lock, heap no 6 PHYSICAL RECORD: n_fields 3; compact format; info bits 32
0: len 4; hex 00000006; asc ;; 1: len 6; hex 000001907504; asc u ;; 2:
len 7; hex 0000000032081c; asc 2 ;;
,SXWLQWKHZKROHWUDQVDFWLRQLQIRUPDWLRQWRVKRZWKHLGHQWLILFDWLRQLQIRUPDWLRQIRU
WKHORFN£5HFRUGORFNKHDSQR¤:HDUHLQWHUHVWHGLQWKHIROORZLQJ
Record lock, heap no 6 PHYSICAL RECORD: n_fields 3; compact format; info bits 32
0: len 4; hex 00000006; asc ;; 1: len 6; hex 000001907504; asc u ;; 2:
len 7; hex 0000000032081c; asc 2 ;;
7KLVLVWKHSK\VLFDOFRQWHQWRIWKHORFNHGUHFRUG$QGZKHQ\RXFKHFNWKHZDLWLQJ
WUDQVDFWLRQ\RXFDQVHHWKDWLWZDLWVIRUH[DFWO\WKHVDPHORFN SD\DWWHQWLRQWRPHYSICAL
RECORD
update t set a=36 where a=6
------- TRX HAS BEEN WAITING 1 SEC FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 349 page no 3 n bits 88 index `PRIMARY` of table `test`.`t`
trx id 0 26244357 lock_mode X locks rec but not gap waiting
Record lock, heap no 6 PHYSICAL RECORD: n_fields 3; compact format; info bits 32
0: len 4; hex 00000006; asc ;; 1: len 6; hex 000001907504; asc u ;; 2:
len 7; hex 0000000032081c; asc 2 ;;
7KLV LV YHU\ XVHIXO LQIRUPDWLRQ EHFDXVH \RX FDQ FOHDUO\ FRUUHODWH WKH WUDQVDFWLRQV
ZDLWLQJIRUORFNVZLWKWKRVHKROGLQJORFNV
(DUOLHUZHGLVFXVVHG,QQR'%INFORMATION_SCHEMAWDEOHV:K\ZRXOGRQHXVH,QQR'%
0RQLWRUV ZKHQ \RX FRXOG MXVW ORRN DW WKHVH WDEOHV" 7KH UHDVRQ LV WKDW
INFORMATION_SCHEMAFRQWDLQVRQO\FXUUHQWLQIRUPDWLRQZKHUHDV,QQR'%PRQLWRUVFDQ
GXPSLQIRUPDWLRQLQWRWKHHUURUORJILOHVRWKDW\RXFDQDQDO\]HLWODWHU7KLVLQIRUPDWLRQ
LVYHU\XVHIXOZKHQ\RXZDQWWRILQGRXWZKDWLVJRLQJRQZKLOH\RXUDSSOLFDWLRQLV
UXQQLQJ
INFORMATION_SCHEMA Tables
6WDUWLQJ ZLWK WKH ,QQR'% 3OXJLQ IRU YHUVLRQ 0\64/ VXSSRUWV QHZ ,QQR'%
INFORMATION_SCHEMAWDEOHV7KRVHUHODWHGWRFRQFXUUHQF\LVVXHVDUH
INNODB_TRX
&RQWDLQVDOLVWRIDOOWUDQVDFWLRQVWKDWDUHFXUUHQWO\UXQQLQJ
INNODB_LOCKS
&RQWDLQVLQIRUPDWLRQDERXWWKHFXUUHQWORFNVKHOGE\WUDQVDFWLRQVDQGZKLFKORFNV
HDFKWUDQVDFWLRQLVZDLWLQJIRU
INNODB_LOCK_WAITS
&RQWDLQVLQIRUPDWLRQDERXWWKHORFNVWUDQVDFWLRQVDUHZDLWLQJIRU
7KHVHWDEOHVDUHHDV\WRXVHDQGFDQTXLFNO\SURYLGHLQIRUPDWLRQDERXWWUDQVDFWLRQ
VWDWHVDQGORFNV<RXVDZH[DPSOHVHDUOLHULQWKLVFKDSWHUWKDWLOOXVWUDWHHYHU\WKLQJ,
QHHGWRVD\RQWKHVXEMHFW
$OLVWRIEORFNLQJWUDQVDFWLRQV
SELECT * FROM INNODB_LOCKS WHERE LOCK_TRX_ID IN
(SELECT BLOCKING_TRX_ID FROM INNODB_LOCK_WAITS)
RU
SELECT INNODB_LOCKS.* FROM INNODB_LOCKS JOIN INNODB_LOCK_WAITS
ON (INNODB_LOCKS.LOCK_TRX_ID = INNODB_LOCK_WAITS.BLOCKING_TRX_ID)
$OLVWRIORFNVRQSDUWLFXODUWDEOH
SELECT * FROM INNODB_LOCKS WHERE LOCK_TABLE = 'db_name.table_name'
$OLVWRIWUDQVDFWLRQVZDLWLQJIRUORFNV
SELECT TRX_ID, TRX_REQUESTED_LOCK_ID, TRX_MYSQL_THREAD_ID, TRX_QUERY
FROM INNODB_TRX WHERE TRX_STATE = 'LOCK WAIT'
7KHTHREADSWDEOHFRQWDLQVDOLVWRIDOOFXUUHQWO\UXQQLQJWKUHDGV7KH,'VDUHLQWHUQDOO\
DVVLJQHGDQGDUHWRWDOO\GLIIHUHQWIURPWKH,'VRIWKHFRQQHFWLRQWKUHDGV)XUWKHUPRUH
WKHVHUYHUUXQVDORWRILQWHUQDOWKUHDGVWKDWDUHQRWUHODWHGWRFRQQHFWLRQWKUHDGV )RU
LQVWDQFH VODYHV UXQ DQ 64/ WKUHDG DQG ,2 WKUHDG 7KLV WDEOH FRQWDLQV D PROCESS
LIST_IDILHOGWKDWVKRZVZKLFKFRQQHFWLRQWKUHDG,'LIDQ\LVDVVRFLDWHGZLWKHDFK
SDUWLFXODUWKUHDG
*_SUMMARY_*WDEOHVFRQWDLQDJJUHJDWHLQIRUPDWLRQIRUWHUPLQDWHGHYHQWV
$VDQH[DPSOHWRILQGRXWZKLFKWDEOHVDUHXVHGPRVW\RXFDQWU\WKHIROORZLQJTXHU\
,WZLOOZRUNIRUVWRUDJHHQJLQHVWKDWVWRUHWDEOHGDWDLQVHSDUDWHILOHVVXFKDV0\,6$0
RU,QQR'%ZKHQWKHRSWLRQinnodb_file_per_tableLVLQXVH
Log Files
7KHUHDUHWZR0\64/VHUYHUORJILOHVWKDWFDQKHOS\RXZLWKFRQFXUUHQF\SUREOHPVWKH
HUURUORJILOHDQGWKHJHQHUDOTXHU\ORJILOH
7KH HUURU ORJILOH FRQWDLQV LQIRUPDWLRQ DERXW ZKDW LV JRLQJ ZURQJ ,W ZLOO FRQWDLQ
LQIRUPDWLRQ DERXW XQVDIH UHSOLFDWLRQ VWDWHPHQWV LQWHQWLRQDO FUDVKHV GXH WR ORQJ
VHPDSKRUHZDLWVDQGVRRQ,KDYHDOUHDG\DGYLVHGLQ&KDSWHUWKDWWKHHUURUORJILOH
LV WKH ILUVW SODFH WR ORRN ZKHQ \RX HQFRXQWHU D SUREOHP 7KH VDPH WLS DSSOLHV WR
FRQFXUUHQF\DVZHOO:KHQ\RXGRQ¦WNQRZWKHVRXUFHRIDSUREOHPORRNDWWKHHUURU
ORJILUVW
7KLVZLOOUHWXUQDOLVWRITXHULHVWKDWZHUHUXQE\WKHORFNLQJWKUHDG<RXVKRXOGEHDEOH
WR ILQG D BEGIN RU START TRANSACTION VWDWHPHQW WKDW NLFNV RII WKH ZKROH PXOWLVWDWH
PHQWWUDQVDFWLRQ2QFH\RXGLVFRYHUWKHRIIHQGLQJWUDQVDFWLRQ\RXFDQUHVHDUFKZKDW
WRFKDQJHLQWKHDSSOLFDWLRQWRSUHYHQWVLPLODUORFNLQJLQWKHIXWXUH
7RLOOXVWUDWHWKLVOHW¦VUHWXUQWRWKHH[DPSOHIURP£+LGGHQ4XHULHV¤RQSDJH,QWKH
RXWSXWIURPSHOW PROCESSLISTZHVDZ
mysql> SHOW PROCESSLIST\G
*************************** 1. row ***************************
Id: 184
User: root
Host: localhost
db: test
Command: Sleep
Time: 25
State:
Info: NULL
*************************** 2. row ***************************
Id: 217
User: root
Host: localhost
db: test
Command: Query
Time: 5
State: Updating
Info: UPDATE t SET a=36 WHERE a=6
*************************** 3. row ***************************
Id: 219
User: root
Host: localhost
db: mysql
Command: Query
Time: 0
State: NULL
Info: SHOW PROCESSLIST
3 rows in set (0.00 sec)
------------------
---TRANSACTION 0 26244352, ACTIVE 139 sec, OS thread id 101099008
2 lock struct(s), heap size 320, 1 row lock(s), undo log entries 2
MySQL thread id 184, query id 79 localhost root
...
2XU EORFNHG WUDQVDFWLRQ LV RI 0\64/ WKUHDG 7KH RQO\ WUDQVDFWLRQ
FXUUHQWO\KROGLQJORFNVLVRI0\64/WKUHDG%XWLWLVQRWDWDOOFOHDUZKDW
WKUHDGLVGRLQJXQWLOZHORRNDWWKHJHQHUDOTXHU\ORJILOH
mysql> SELECT argument, event_time FROM mysql.general_log WHERE
thread_id=184 ORDER BY event_time;
+-----------------------------+---------------------+
| argument | event_time |
+-----------------------------+---------------------+
| begin | 2011-08-09 13:55:58 |
| update t set a=26 where a=6 | 2011-08-09 13:56:09 |
+-----------------------------+---------------------+
2 rows in set (0.15 sec)
7KH0\64/VHUYHUSURYLGHVDQHQRUPRXVQXPEHURIRSWLRQVWKDW\RXFDQVHWLQYDULRXV
ZD\VLQWKHP\FQIFRQILJXUDWLRQILOHRQWKHFRPPDQGOLQHWKDWVWDUWVWKHVHUYHURUE\
VHWWLQJYDULDEOHVDWUXQWLPH0RVW0\64/YDULDEOHVFDQEHVHWG\QDPLFDOO\DQGWKHUH
LVJHQHUDOO\RQHYDULDEOHFRUUHVSRQGLQJWRHDFKFRQILJXUDWLRQRSWLRQ
6RPHRIWKHRSWLRQVDUHJOREDOVRPHDSSO\WRVSHFLILFVWRUDJHHQJLQHVVRPHFDOOHG
VHVVLRQ DSSO\ WR FRQQHFWLRQ DQG VRPH DSSO\ WR SDUWLFXODU DFWLYLWLHV VXFK DV
UHSOLFDWLRQ7KLVFKDSWHULVQRWDJHQHUDOJXLGHWR0\64/VHUYHURSWLRQVEXWFRYHUV
WKHSUREOHPVWKDWVRPHFDQFUHDWHRUWKHZD\VLQZKLFKFKDQJLQJDQRSWLRQFDQKHOS
\RXWURXEOHVKRRW0\64/
nrÿ- %HIRUHHPEDUNLQJRQWKLVFKDSWHUZHQHHGWRDJUHHRQFHUWDLQWHUPV
,ZLOOXVHERWKRSWLRQDQGYDULDEOHWRGHQRWHDVHUYHURSWLRQ0\64/
XVHV D VHSDUDWH V\QWD[ IRU RSWLRQV DQG YDULDEOHV RSWLRQV DUH XVXDOO\
VSHOOHGZLWKK\SKHQV variable-name ZKHUHDVWKHFRUUHVSRQGLQJYDUL
DEOHVDUHVSHOOHGZLWKXQGHUVFRUHV variable_name 8VXDOO\WKH0\64/
VHUYHUVXSSRUWVERWKW\SHVRIV\QWD[IRUWKHFRPPDQGOLQHDQGFRQILJ
XUDWLRQILOHEXWVXSSRUWVRQO\WKH variable_nameV\QWD[IRUYDULDEOHV
7KHUHIRUH ZH ZLOO XVH WKH ODWWHU V\QWD[ LQ WKLV ERRN ZKHQHYHU LW LV
VXSSRUWHG
9DULDEOHVFDQEHVSOLWLQWRGLIIHUHQWJURXSVGHSHQGLQJRQWKHLUSXUSRVHWRSRLQWWKH
VHUYHUWRGLUHFWRULHVWROLPLWKDUGZDUHUHVRXUFHVWRFKDQJHKRZP\VTOGWUHDWVRQHRU
DQRWKHUVLWXDWLRQDQGVRRQ7KH\FDQDOVREHVSOLWLQWRGLIIHUHQWJURXSVGHSHQGLQJRQ
ZKHQWKH\DUHDOORFDWHGDWVHUYHUVWDUWZKHQDFRQQHFWLRQWKUHDGLVFUHDWHGRUZKHQ
WKHVHUYHUVWDUWVDSDUWLFXODURSHUDWLRQ
107
Service Options
,XVHWKHWHUPVHUYLFHRSWLRQVEHFDXVHWKLVVLQJOHZRUGH[SODLQVDOOWKHYDULHWLHVRIWKHLU
IXQFWLRQDOLW\SRLQWLQJWKHVHUYHUWRGLUHFWRULHVDQGILOHVWHOOLQJLWZKHWKHUDSDUWLFXODU
ORJVKRXOGEHWXUQHGRQDQGVRRQ7KHVHRSWLRQVXVXDOO\GRQ¦WFUHDWHSUREOHPV,
IRXQGRQO\WZRW\SLFDOWURXEOHVKRRWLQJFDVHVZLWKWKHPZKHQDQRSWLRQSRLQWVWRD
ZURQJSDWKDQGZKHQDSDUWLFXODUIHDWXUHZKHQWXUQHGRQFKDQJHVWKHEHKDYLRURI
WKHmysqldFRPPDQG7KHODWWHUFDVHFDQEHKDUGWRGLDJQRVHEHFDXVH\RXVLPSO\FDQQRW
H[SHFWWKHVHFKDQJHV
:KHQ DQ RSWLRQ XVHV WKH ZURQJ SDWK \RX¦OO XVXDOO\ QRWLFH WKH SUREOHP DW VHUYHU
VWDUWXS)RUH[DPSOHLI\RXSRLQWWRWKHZURQJdatadirmysqldZLOOUHIXVHWRVWDUWDQG
ZLOOSULQWDPHVVDJHVXFKDV
$./bin/mysqld --datadir=/wrong/path &
[1] 966
%XWRIFRXUVH\RXGRQ¦WVHHWKLVPHVVDJHRQWKHFRPPDQGOLQHLIP\VTOGLVVWDUWHGLQD
V\VWHPVWDUWXSILOHDVDGDHPRQ,QWKDWFDVHXVHUVXVXDOO\QRWLFHWKHSUREOHPZKHQ
WKHLUILUVWFRQQHFWLRQDWWHPSWIDLOVZLWKDQHUURUOLNHWKHIROORZLQJ
$./bin/mysql -uroot -S /tmp/mysql_ssmirnova.sock
ERROR 2002 (HY000): Can't connect to local MySQL server through socket
'/tmp/mysql_ssmirnova.sock' (2)
7KHHUURUVLPSO\LQGLFDWHVWKDWQRVHUYHULVUXQQLQJ,QVXFKFDVHV\RXQHHGWRH[DPLQH
WKH HUURU ORJILOH RU LI WKHUH LV QR HUURU ORJILOH FKHFN WKH RSHUDWLQJ V\VWHP ORJ IRU
PHVVDJHVFRQFHUQLQJP\VTOG7KH0\64/HUURUORJILOHZRXOGFRQWDLQWKHVDPHPHVVDJH
DVZHVDZLQWKHHDUOLHUOLVWLQJ$QRSHUDWLQJV\VWHPPHVVDJHFDQYDU\EXWXVXDOO\VD\V
WKDWVRPHDXWRPDWLFVFULSWVXFKDVP\VTOVHUYHUIURPWKH0\64/LQVWDOODWLRQIDLOHG
WRVWDUWP\VTOG<RXFDQDOVRFKHFNWKDWQR0\64/VHUYHULVUXQQLQJE\ORRNLQJDWD
SURFHVV OLVWLQJ +HUH LV DQ H[DPSOH IRU /LQX[ VKRZLQJ WKDW P\VTOG GRHVQ¦W DSSHDU
DQ\ZKHUHLQWKHV\VWHP¦VSURFHVVHV
$ps -ef | grep mysqld
10149 7076 6722 0 23:35 pts/0 00:00:00 grep mysqld
7KHP\VTODGPLQXWLOLW\KDVpingFRPPDQGWKDWUHSRUWVZKHWKHUWKH0\64/VHUYHULV
DOLYHRUVWRSSHG
$IHZRSWLRQVSRLQWLQJWRVSHFLILFSDWKVGRQRWSUHYHQWWKH0\64/VHUYHUIURPVWDUWLQJ
EXWVLPSO\WXUQRIIDSDUWLFXODURSWLRQ)RUH[DPSOHOHW¦VVHHZKDWDFRUUXSW,QQR'%
VWDUWXSVHTXHQFHPLJKWORRNOLNH
110815 14:14:45 [Note] Plugin 'FEDERATED' is disabled.
110815 14:14:45 [Note] Plugin 'ndbcluster' is disabled.
110815 14:14:45 [ERROR] InnoDB: syntax error in innodb_data_file_path
110815 14:14:45 [ERROR] Plugin 'InnoDB' init function returned error.
110815 14:14:45 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
110815 14:14:45 [Note] Event Scheduler: Loaded 0 events
110815 14:14:45 [Note] ./libexec/mysqld: ready for connections.
Version: '5.1.60-debug' socket: '/tmp/mysql_ssmirnova.sock' port: 33051
Source distribution
7KHVHUYHUZDVVXFFHVVIXOO\VWDUWHGEXWWKH,QQR'%HQJLQHZDVQRWORDGHG
mysql> SHOW ENGINES\G
*************************** 1. row ***************************
Engine: ndbcluster
Support: NO
Comment: Clustered, fault-tolerant tables
Transactions: NULL
XA: NULL
Savepoints: NULL
*************************** 2. row ***************************
Engine: MRG_MYISAM
Support: YES
Comment: Collection of identical MyISAM tables
Transactions: NO
XA: NO
Savepoints: NO
*************************** 3. row ***************************
Engine: BLACKHOLE
Support: YES
Comment: /dev/null storage engine (anything you write to it disappears)
Transactions: NO
XA: NO
Savepoints: NO
*************************** 4. row ***************************
Engine: CSV
Support: YES
Comment: CSV storage engine
Transactions: NO
XA: NO
Savepoints: NO
*************************** 5. row ***************************
Engine: MEMORY
Support: YES
Comment: Hash based, stored in memory, useful for temporary tables
Transactions: NO
, WXUQHG WKH HUURU ORJILOH RII VR WKDW ZH FRXOG VHH WKH HUURU RQ WKH FRQVROH EXW LQ
SURGXFWLRQWKHHUURUORJZRXOGEHWKHSODFHWRORRNIRUWKHHUURUPHVVDJH7KHUHIRUH
LI\RXILQGRXWWKDWRQHRIWKHIHDWXUHV\RXQHHGGRHVQRWH[LVWFKHFNWKHHUURUORJILOH
ILUVW
,WLVYHU\LPSRUWDQWWRXQGHUVWDQGKRZDGHVLUHGIHDWXUHDIIHFWVWKHZRUNDVHUYHUGRHV
)RUH[DPSOHZKHQ,QQR'%LVQRWDYDLODEOHZHVWLOOFDQFUHDWHWDEOHVVXFFHVVIXOO\LIWKH
64/PRGHGRHVQRWFRQWDLQNO_ENGINE_SUBSTITUTION
mysql> CREATE TABLE t1(f1 INT) ENGINE=InnoDB;
Query OK, 0 rows affected, 2 warnings (0.01 sec)
7KLVH[DPSOHVKRZVWKDWLW¦VDOZD\VLPSRUWDQWWRFKHFNZDUQLQJV,QWKLVFDVHWKHWDEOH
ZDVFUHDWHGXVLQJWKHZURQJVWRUDJHHQJLQHEHFDXVHZHKDGDQHUURUWU\LQJWRVWDUW
,QQR'%
mysql> SHOW WARNINGS;
+---------+------+--------------------------------------------+
| Level | Code | Message |
+---------+------+--------------------------------------------+
| Warning | 1286 | Unknown table engine 'InnoDB' |
| Warning | 1266 | Using storage engine MyISAM for table 't1' |
+---------+------+--------------------------------------------+
2 rows in set (0.00 sec)
,I\RXGRQ¦WFKHFNWKHZDUQLQJVDXVHUPLJKWVWDUWXVLQJWKLVWDEOHDQGGLVFRYHUWKH
SUREOHPRQO\ZKHQ\RXUZKROHDSSOLFDWLRQLVDIIHFWHG$V\RXNQRZIURPWKHSUHYLRXV
FKDSWHU0\,6$0DQG,QQR'%XVHGLIIHUHQWORFNLQJPHWKRGVVRDQDSSOLFDWLRQZULWWHQ
7KHQ,FRQQHFWDVXVHUVYHWDDQGUXQ
sveta> CREATE FUNCTION f1() RETURNS INT RETURN 1;
Query OK, 0 rows affected (0.02 sec)
(YHU\WKLQJLVILQH%XWWKLQJVFKDQJHZKHQ,VWDUWP\VTOGZLWKWKHlog_binRSWLRQ
$./libexec/mysqld --defaults-file=support-files/my-small.cnf \
--basedir=. --datadir=./data --socket=/tmp/mysql_ssmirnova.sock --port=33051 \
--log_error --log_bin &
[1] 3658
DQGWU\WRUHFUHDWHWKHVDPHIXQFWLRQ
sveta> DROP FUNCTION f1;
Query OK, 0 rows affected (0.00 sec)
7KHHUURUPHVVDJHFOHDUO\H[SODLQVWKHLVVXH,ZDQWHGWRVKRZWKLVH[DPSOHWRGHPRQ
VWUDWHKRZDQRSWLRQFDQFKDQJHVHUYHUEHKDYLRUHYHQLILWVPDLQSXUSRVHLVQRWWRDIIHFW
XVHUTXHULHV8VXDOO\ZKHQDXVHUPHHWVVXFKDSUREOHPWKHFDXVHLVQRWVRFOHDUDQG
FDQEHFRQIXVLQJ
7KLVWLPHLWLVFOHDUIURPWKHZDUQLQJPHVVDJHZK\WKHHUURUKDSSHQHG%XWVRPHWLPHV
LWLVQRWVRFOHDU
$./my sql test <phpconf2009_1.sql
ERROR 1064 (42000) at line 33: You have an error in your SQL syntax; check the
manual that corresponds to your MySQL server version for the right syntax to use
near
'00000000000000000000000000000000000000000000000000000000000000000000000000000000'
at line 2
7KHH[DFWPHVVDJH\RXJHWGHSHQGVRQWKHSDUWLFXODUVWDWHPHQW\RXVHQWWRWKHVHUYHU
XVXDOO\ZKHQVHOHFWLQJGDWDIURPYHU\ODUJHWDEOHRUDFFHVVLQJDBLOBILHOG
■ ,I\RXVWDUWJHWWLQJV\QWD[HUURUVIRUYDOLGTXHULHVFKHFNZKHWKHUWKHLUVL]HH[FHHGV
max_allowed_packet
,IWKHUHVXOWVDUHGLIIHUHQWVWDUWDGGLQJRSWLRQVWKDW\RXXVHGEHIRUHRQHE\RQHDQG
WHVWWRVHHLIWKHZURQJEHKDYLRUFRPHVEDFN2QFH\RXILQGZKLFKYDULDEOHFDXVHVWKH
FKDQJHV\RXFDQUHIHUWRLWVGRFXPHQWDWLRQDQGDGMXVWLWDFFRUGLQJO\
Performance Options
7KHVHRSWLRQVJHQHUDOO\GRQ¦WFDXVHHUURUVEXWFDQKDYHDGUDPDWLFHIIHFWRQSHUIRU
PDQFH8VXDOO\\RXUXQWKHVHUYHUXQGHUYDULRXVUHDOOLIHORDGVZKLOHWXQLQJWKHPXQWLO
\RXKDYHDFRPELQDWLRQWKDWZRUNVZHOOIRU\RXUSDUWLFXODUHQYLURQPHQW
+RZHYHUWKHUHLVRQHVLWXDWLRQZKHQVXFKDQRSWLRQFDQFDXVHDQHUURUDQGUHPRYLQJ
LWIURPWKHFRQILJXUDWLRQILOHRUUHGXFLQJLWVYDOXHFDQPDNHVHQVH7KLVLVZKHQ\RXU
VHUYHUKLWVDQRXWRIUHVRXUFHVHUURU7KHPRVWFRPPRQFDVHVLQYROYHDODFNRIPHPRU\
RUILOHGHVFULSWRUV,I\RXILQG\RXUVHOILQVXFKDVLWXDWLRQXVHWKH--no-defaultsPHWKRG
IURPWKHSUHYLRXVVHFWLRQWRILQGWKHRSWLRQWKDW¦VWRRELJ
:KHQXVLQJWKLVPHWKRGVDYHWKHUHVXOWVRIHYHU\WHVW)RUH[DPSOHLI
\RXDUHZRUNLQJRQLPSURYLQJSHUIRUPDQFHUXQEHQFKPDUNVRUPHDV
XUHTXHU\H[HFXWLRQWLPHEHIRUHFKDQJLQJDQ\WKLQJDQGWKHQUHSHDWWKH
VDPHWHVWDIWHUPRGLI\LQJHDFKRSWLRQ
,SXWSESSIONLQVTXDUHEUDFNHWVEHFDXVH\RXFDQRPLWWKLVNH\ZRUGWKHsetFRPPDQG
XVHVSESSIONDVWKHGHIDXOW
7RVHWDGLOBALYDULDEOHXVHWKHVWDWHPHQW
SET GLOBAL var_name=value
:KHQ\RXWHVWRSWLRQV,VXJJHVW\RXWU\WRXVHDSESSIONYDULDEOHZKHQHYHUSRVVLEOH
$IWHU\RXDUHKDSS\ZLWKWKHUHVXOWV\RXFDQXVHDGLOBALYDULDEOHWRFKDQJHWKHUXQQLQJ
VHUYHU¦VFRQILJXUDWLRQDQGWKHQFKDQJHWKHFRQILJXUDWLRQILOHVRWKDWWKLVYDOXHZLOOEH
DSSOLHGDIWHUDUHVWDUW
..
#..4ÿ
4
8VLQJSET SESSIONLVDOVRYHU\KHOSIXOZKHQ\RXZDQWWRFKHFNWKHHIIHFW
RIDQRSWLRQRQDSDUWLFXODUTXHU\,QWKLVFDVH\RXFDQVHWWKHYDULDEOH
a,:' EHIRUHWKHTXHU\WHVWDQGWKHQUHWXUQEDFNWRWKHGHIDXOWYDOXHXVLQJ
WKHVWDWHPHQWSET [SESSION] variable_name=DEFAULT
,IDQRSWLRQLVVKDUHGDPRQJWKUHDGV\RXFDQVWDUWE\VHWWLQJD GLOBALYDULDEOHDQG
WKHQH[DPLQHKRZWKHVHUYHUEHKDYHV$IWHU\RXDUHKDSS\ZLWKWKHUHVXOWFKDQJHWKH
FRQILJXUDWLRQILOHWRLQFOXGHWKHQHZYDULDEOHDQGLWVVHWWLQJ
7KLVPHWKRGDOORZV\RXWRWHVWFKDQJHVZLWKRXWLQWHUUXSWLQJWKHDSSOLFDWLRQEHFDXVH
LWSXWV\RXUGHVLUHGFKDQJHLQWRHIIHFWZKLOHGHOD\LQJWKHVHUYHUUHVWDUWXQWLODVFKHGXOHG
WLPH
7KHUHDUHDIHZRSWLRQVWKDWFDQQRWEHVHWG\QDPLFDOO\,QWKHVHFDVHV\RXKDYHWR
UHVWDUWWKH0\64/VHUYHUHYHQLI\RXMXVWZDQWWRWHVWWKHLUHIIHFWV
7KHUH DUH IHZ H[FHSWLRQV VXFK DV SET GLOBAL general_log=1 8VXDOO\ VXFK H[FHSWLRQV GR QRW KDYH D
SESSIONHTXLYDOHQW
6RPHYDULDEOHVDUHQRWLQGHSHQGHQW)RUH[DPSOHYDULDEOHVWKDWFRQWURO
WKHTXHU\FDFKHFKDQJHQRWKLQJZKHQ query_cache_sizeLVVHWWR]HUR
"v :KHQWXQLQJVXFKRSWLRQVDOZD\VWKLQNDERXWWKHHIIHFWRIWKHZKROH
JURXSQRWMXVWDVLQJOHYDULDEOH
:KHQ\RXFKDQJHDVHUYHURSWLRQLWFDQDIIHFWFKDQJHVWRVWDWXVYDULDEOHV)RUH[DPSOH
LI\RXFKDQJHWKHWDEOHFDFKH\RXVKRXOGORRNDWWKHG\QDPLFVRIWKHOpen_tablesDQG
Opened_tables VWDWXV YDULDEOHV Opened_tables VKRXOG QRW JURZ ZKHUHDV DOO
Open_tablesVKRXOGEHLQWKHFDFKHLIWKHWDEOHFDFKHLVVHWSURSHUO\
6RPHWLPHVDYDULDEOH¦VYDOXHWKDWZDVMXVWVHWFDQEHGLVFDUGHGEHFDXVH
WKHVSHFLILHGYDOXHZDVHLWKHUWRRELJRUWRRVPDOO,I\RXVXVSHFWWKDW
\RXUFKDQJHKDGQRHIIHFWFKHFNZKHWKHULWZDVUHDOO\PDGHE\XVLQJ
WKHTXHU\ SHOW [SESSION|GLOBAL] VARIABLES LIKE 'variable_name'RU
WKHTXHU\ SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.[SESSION|
GLOBAL]_VARIABLES WHERE VARIABLE_NAME='variable_name'
Descriptions of Variables
1RZWKDW\RXDUHIDPLOLDUZLWKULVNIUHHWXQLQJPHWKRGVIRUVHUYHUYDULDEOHVZHDUH
UHDG\WRGLVFXVVDIHZLPSRUWDQWRQHV7KLVLVQRWDFRPSOHWHJXLGHEXWDVWDUWLQJSRLQW
IRUIXUWKHUUHVHDUFK
<RXFDQUHDGWKHUHVWRIWKLVVHFWLRQLQDQ\RUGHUJRWKURXJKLWIURPEHJLQQLQJWRHQG
FKHFNWKHSDUWLFXODUWRSLFVRIPRVWLQWHUHVWWR\RXDWWKHPRPHQWRUHYHQVNLSLWDQG
XVHLWDVDUHIHUHQFHZKHQ\RXHQFRXQWHUDSUREOHP,GRQ¦WGHVFULEHHYHU\RSWLRQEXW
$WILUVW,GRXEWHGZKHWKHU,VKRXOGGHYRWHDVHFWLRQRIWKLVERRNWR
LQGLYLGXDOYDULDEOHVEHFDXVHHDFKRQHLVIXOO\GHVFULEHGLQRWKHUVRXUFHV
"v %XWWKH0\64/5HIHUHQFH0DQXDOGRHVQRWGHVFULEHWKHPVSHFLILFDOO\
IURP D WURXEOHVKRRWLQJ DSSURDFK VR , GHFLGHG WR RIIHU WKLV VKRUW
RYHUYLHZ
Server-related options
7KHVHDIIHFWDOOFRQQHFWLRQVDQGVWDWHPHQWV
/LPLWVDQGmax_*YDULDEOHV
<RXDOUHDG\VDZKRZmax_allowed_packetDIIHFWVDQDSSOLFDWLRQHDUOLHULQ£2SWLRQV
7KDW/LPLW+DUGZDUH5HVRXUFHV¤RQSDJH2WKHURSWLRQVUHVWULFWWKHVL]HRI
UHVXOWVHWV([DPSOHVLQFOXGH group_concat_max_lenZKLFKOLPLWVWKHQXPEHURI
E\WHVWKDWWKHGROUP_CONCATIXQFWLRQFDQUHWXUQ-XVWFRPSDUH
mysql> SELECT @@group_concat_max_len;
+------------------------+
| @@group_concat_max_len |
+------------------------+
| 1024 |
+------------------------+
1 row in set (0.00 sec)
DQG
mysql> SET group_concat_max_len=100; O
Query OK, 0 rows affected (0.00 sec)
o ,GHFUHDVHGWKHYDOXHRIgroup_concat_max_lenWRVKRZDQH[DPSOHWKDWFDQILW
LQWKLVERRN,QUHDOOLIHWKLVSUREOHPXVXDOO\KDSSHQVZKHQWKHXVHUUXQVWKLV
IXQFWLRQRQDODUJHGDWDVHWIRUZKLFKWKHGHIDXOWYDOXHLVWRRVPDOO
,ZRQ¦WGHVFULEHHDFKYDULDEOHRIWKHmax_*JURXS-XVWFKHFNWKHLUYDOXHVLI\RXILQG
WKDWP\VTOGLVOLPLWLQJHLWKHUWKHVL]HRIWKHVWDWHPHQW\RX¦UHVHQGLQJRUWKHUHVXOWV
UHWXUQHG
3HUPLVVLRQV
$QRWKHUSRVVLELOLW\\RXVKRXOGFRQVLGHULIDVWDWHPHQWIDLOVLVZKHWKHU\RXUXVHU
KDV WKH SHUPLVVLRQV WR LVVXH LW RU ULJKWV WR D SDUWLFXODU GDWDEDVH RU WDEOH )RU
H[DPSOH WKH local_infile RSWLRQ FDQ DOORZ RU GLVDOORZ UXQQLQJ WKH LOAD DATA
LOCAL INFILE TXHU\ 7KH 0\64/ VHUYHU XVXDOO\ JLYHV D FOHDU HUURU PHVVDJH WR
H[SODLQZK\RQHRUDQRWKHURSHUDWLRQLVQRWDOORZHG
64/PRGHV
7KH0\64/VHUYHUGHILQHV64/PRGHVWKDWFDQFKDQJHKRZWKHVHUYHUWUHDWVFOLHQW
LQSXW<RXDOUHDG\VDZKRZNO_ENGINE_SUBSTITUTIONDQGSTRICT_TRANS_TABLESFDQ
DIIHFWDQDSSOLFDWLRQ2WKHUPRGHVFDQPRGLI\RWKHUEHKDYLRU
+HUH LV DQRWKHU H[DPSOH WKDW XVHV WKH ANSI_QUOTES PRGH 7KLV PRGH WHOOV WKH
0\64/VHUYHUWRXVHTXRWHVGHILQHGLQWKH$16,64/VWDQGDUGLQVWHDGRI0\64/¦V
GHIDXOW7KHSUREOHP,GHVFULEHKHUHKDSSHQVQRWZKHQWKLVPRGHLVLQXVHEXW
ZKHQWKHXVHUUHOLHVRQWKHGHIDXOWHPSW\PRGHLQWKHKRSHWKDWWKHVHUYHUZLOO
UHMHFW$16,TXRWHVVHWE\PLVWDNH
mysql> SELECT @@sql_mode;
+------------+
| @@sql_mode |
+------------+
| |
+------------+
1 row in set (0.00 sec)
,QWKHILUVWFDVHZKHUHWKHGHIDXOWLVLQHIIHFWWKH0\64/WUHDWV"f1"DVDVWULQJDQG
FRQYHUWVLWWRDOUBLE7KLVLVDYDOLGYDOXHLQWKHGHIDXOW64/PRGHEXWLVWUHDWHG
GLIIHUHQWO\IURPZKDWWKHXVHUH[SHFWV
mysql> SHOW WARNINGS;
+---------+------+----------------------------------------+
| Level | Code | Message |
+---------+------+----------------------------------------+
| Warning | 1292 | Truncated incorrect DOUBLE value: 'f1' |
+---------+------+----------------------------------------+
1 row in set (0.09 sec)
:KHQFRQYHUWHGWRDDOUBLEWKHYDOXH"f1"LVWUDQVODWHGWRDQG£¤LVQRWHTXDO
WR£¤,QWKHANSI_QUOTESPRGH"f1"LVWUHDWHGDVDILHOGQDPHVRWKHTXHU\ZRUNV
7KLVLVYHU\FRPPRQLVVXHWKDWFDQEHHDVLO\PLVVHGLQFRPSOLFDWHGTXHULHVZLWK
PXOWLSOHFRQGLWLRQV
■ :KHQ \RX PHHW £VWUDQJH¤ TXHU\ UHVXOWV FKHFN WKH 64/ PRGH DQG DQDO\]H
ZKHWKHULWFDQEHDIIHFWLQJ\RXUTXHU\
,LQFOXGHGVHYHUDOH[DPSOHVRI64/PRGHLQWKLVERRNWRVKRZKRZWKH\FDQPDNH
GLIIHUHQWDVSHFWVRIWKHVHUYHUEHKDYHGLIIHUHQWO\,UHFRPPHQGWKDW\RXVWXG\WKH
OLVWRI64/PRGHVDQGZKDWWKH\GRLQWKH0\64/5HIHUHQFH0DQXDO
2QH GHWDLO ZRUWK PHQWLRQLQJ LV WKDW VWDUWLQJ ZLWK YHUVLRQ WKH ,QQR'%
3OXJLQKDVDQ innodb_strict_modeRSWLRQZKLFKLIVHWWXUQVRQVWULFWFKHFNVRI
GDWDLQVHUWHGLQWR,QQR'%WDEOHV7KLVEHKDYHVVLPLODUO\WREXWVOLJKWO\GLIIHUHQWO\
IURPWKHVWULFW64/PRGHV6RLI\RXDUHXVLQJWKH,QQR'%3OXJLQ\RXQHHGWR
FKHFNWKHGHVFULSWLRQRIWKLVYDULDEOH7KHRSWLRQLVWXUQHGRIIE\GHIDXOW
&KDUDFWHUVHWVDQGFROODWLRQV
8QGHUVWDQGLQJWKHVHYDULDEOHVLVFULWLFDOIRUWKRVHZKRXVH0\64/WRVWRUHGDWDLQ
QRQ(QJOLVKODQJXDJHVZKLFKDSSOLHVZKHQWKH latin1FKDUDFWHUVHWGRHVQ¦WVXLW
\RXUQHHGV
» ?,
7KHFKDUDFWHUVHWLVDPDSWKDWPDWFKHVDFKDUDFWHURUV\PEROWRD
E\WH VHTXHQFH WKDW UHSUHVHQWV LW &ROODWLRQ LV D VRUWLQJ UXOH $
* t* FKDUDFWHUVHWFDQKDYHPXOWLSOHFROODWLRQV
7KLVWRSLFLVKXJHVR,ZLOOQRWWU\WRFRYHULWKHUHH[KDXVWLYHO\EXWZLOOJLYH\RX
DIHZVWDUWLQJSRLQWV
:K\GLGWKHTXHU\ZLWKDJOINIDLO":HVSHFLILHGWKHlatin1_german2_ciFROODWLRQ
IRU WKH ILUVW WDEOH ZKHUHDV WKH VHFRQG RQH XVHG WKH GHIDXOW FROODWLRQ IRU WKH
FRQQHFWLRQ
,¦OOUHWXUQWRWKLVH[DPSOHLQDPRPHQWEXWILUVW,¦OOVKRZWZRTXHULHVWKDWDUH
H[WUHPHO\KHOSIXOIRUGLDJQRVLQJVXFKLVVXHV
mysql> SHOW VARIABLES LIKE '%char%';
+--------------------------+----------------------------------------------+
| Variable_name | Value |
+--------------------------+----------------------------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /Users/apple/mysql-5.1/share/mysql/charsets/ |
+--------------------------+----------------------------------------------+
8 rows in set (0.09 sec)
5XQWKHVHHYHU\WLPH\RXVXVSHFWVRPHWKLQJLVZURQJZLWKWKHFKDUDFWHUVHWRU
FROODWLRQWKHQDQDO\]HWKHUHVXOWDQGFRQWH[WRIWKHTXHU\7KHJHQHUDOVDIHUXOHLV
WRKDYHDOOcharacter_set_*YDULDEOHVcollation_*YDULDEOHVDQGFUHDWHRSWLRQVWKH
VDPHIRUDQ\WDEOHVDQGFRQQHFWLRQVWKDWZRUNWRJHWKHU7KHHDVLHVWZD\WRVHW
FOLHQWRSWLRQVLVWRXVHWKHSET NAMESVWDWHPHQW2IFRXUVHWKHUHFDQEHFDVHVZKHQ
\RXQHHGGLIIHUHQWFKDUDFWHUVHWVRUFROODWLRQVEXW\RXVKRXOGXQGHUVWDQGWKHLU
HIIHFWV
,I ZH JR EDFN WR RXU collation_connection H[DPSOH WKH GLIIHUHQW FROODWLRQV OLH
EHKLQGZK\WKHJOINTXHU\FDQQRWEHH[HFXWHG:HFDQFRQILUPWKLVLIZHFKDQJH
WKHYDOXHRIWKHYDULDEOH
mysql> SET COLLATION_CONNECTION='latin1_german2_ci';
Query OK, 0 rows affected (0.00 sec)
■ &KHFNFKDUDFWHUVHWRSWLRQVDQGWDEOHGHILQLWLRQVZKHQ\RXHQFRXQWHULVVXHV
ZKLOHGRLQJVRUWVRUFRPSDULVRQV
2SHUDWLQJV\VWHPKDQGOLQJIRUlower_case*RSWLRQV
7KH lower_case_filesystem DQG lower_case_table_names RSWLRQV DUH VLPLODU WR
WKRVH WKDW DIIHFW FKDUDFWHU VHWV 7KHVH YDULDEOHV GHWHUPLQH KRZ WKH RSHUDWLQJ
V\VWHPKDQGOHVWKHFDVHRIGDWDEDVHREMHFWV
,WLVEHWWHUQRWWRWRXFKWKHVHYDOXHVHVSHFLDOO\LI\RXURSHUDWLQJV\VWHPLVFDVH
LQVHQVLWLYH&KDQJLQJWKHPFDQOHDGWRXQH[SHFWHGEHKDYLRUDVLQWKHIROORZLQJ
H[DPSOH
mysql> SELECT @@lower_case_table_names;
+--------------------------+
| @@lower_case_table_names |
+--------------------------+
mysql> \q
Bye
--
-- Dumping data for table `Table1`
--
--
-- Table structure for table `Table2`
--
%lt;skipped>
-- Dump completed on 2008-02-02 21:12:22
,KDYHSXWWKHLPSRUWDQWSDUWRIWKHRXWSXWLQEROG$IRUHLJQNH\GHILQLWLRQUHIHUV
WRDWDEOHQDPHG table1EXWQRWDEOHRIWKDWQDPHH[LVWV<RXFRXOGQRWUHVWRUH
WKLVGXPSWDNHQRQDFDVHLQVHQVLWLYHRSHUDWLQJV\VWHP HJ:LQGRZV RQDFDVH
VHQVLWLYHRSHUDWLQJV\VWHP HJ/LQX[
,WDOVRLVEHVWWRXVHFRQVLVWHQWQDPLQJIRUWDEOHVLQDOOVWDWHPHQWVDQGWRQRWPL[
ORZHUFDVHDQGXSSHUFDVHLQQDPHVRQFDVHLQVHQVLWLYHRSHUDWLQJV\VWHPV
,QLW64/
7KHVHRSWLRQVGHWHUPLQHZKHWKHUWKHVHUYHUVKRXOGH[HFXWHVRPH64/VWDWHPHQWV
DXWRPDWLFDOO\DWYDULRXVWLPHV
init_file
3RLQWVWRDILOHFRQWDLQLQJ64/VWDWHPHQWVWKDWVKRXOGEHH[HFXWHGDWVHUYHU
VWDUWXS
init_connect
&RQWDLQVDQ64/VWULQJWKDWVKRXOGUXQZKHQHDFKFOLHQWFRQQHFWV
init_slave
&RQWDLQVDQ64/VWULQJWKDWVKRXOGUXQZKHQWKHVHUYHUVWDUWVLWV64/WKUHDG
DVDVODYH
7KHUHDUHWZRW\SLFDOXVDJHHUURUVZLWKWKHVHRSWLRQV
7KH ILUVW SUREOHP LV WKDW LW¦V HDV\ WR IRUJHW DERXW ZKDW \RX SXW LQ WKH RSWLRQV
8VXDOO\WKHRSWLRQVDUHXVHGWRVHWVRPHGHIDXOWVIRUFRQQHFWLRQV6RLI\RXJHW
UHVXOWVGLIIHUHQWIURPWKRVHWKDWDUHUHWXUQHGZKHQWKHGHIDXOWRSWLRQVDUHLQXVH
FKHFNWRVHHZKHWKHU\RXKDYHVHWRQHRUPRUHRIWKHVHYDULDEOHV
<RX FDQ DOVR LVVXH SHOW [GLOBAL] VARIABLES WR ILQG RXW ZKLFK GHIDXOWV \RXU
FRQQHFWLRQXVHV,I\RXFRQQHFWXVLQJDSURJUDPPLQJ$3,FKHFNWKHYDULDEOHYDOXHV
XVLQJWKHVDPH$3,EHFDXVHRWKHUHQYLURQPHQWVVXFKDVWKH0\64/FRPPDQG
OLQHFOLHQWPLJKWXVHDGLIIHUHQWFRQILJXUDWLRQILOHDQGWKXVKDYHGLIIHUHQWGHIDXOW
YDOXHV
7KHFRQWHQWRIWKHinit_connectRSWLRQLVH[HFXWHGRQO\LIWKHFRQQHFWLQJXVHUGRHV
QRWKDYHWKH SUPERSULYLOHJH7KLVZDVGRQHWROHWDXVHUZLWKWKH SUPERSULYLOHJH
FRQQHFWHYHQLIinit_connectFRQWDLQVHUURUV7KLVLVDQRWKHUFRPPRQXVDJHPLV
WDNHZKHQDXVHUFRQQHFWVDVD SUPERXVHUDQGH[SHFWVWKHFRQWHQWRI init_con
nectWREHH[HFXWHG
open_files_limit
7KLVLPSRUWDQWRSWLRQOLPLWVWKHQXPEHURIILOHKDQGOHVWKH0\64/VHUYHUFDQRSHQ
VLPXOWDQHRXVO\7KHKLJKHUWKLVOLPLWWKHPRUHWDEOHILOHVDQGWHPSRUDU\WDEOHV
\RXFDQKDYHRSHQDQGWKHUHIRUHWKHJUHDWHUWKHQXPEHURIVLPXOWDQHRXVFRQQHF
WLRQV\RXFDQKDQGOH,IWKLVOLPLWLVWRRORZIRU\RXUHQYLURQPHQW\RXZLOOJHW
Replication options
7KHVHRSWLRQVGHWHUPLQHWKHUHODWLRQVKLSEHWZHHQWKHPDVWHUDQGVODYHV
binlog-*DQGreplicate-*ILOWHUV
0\64/KDVWKHDELOLW\WRILOWHUREMHFWVVXEMHFWWRUHSOLFDWLRQXVLQJWKHbinlog-do-*
replicate-do-* binlog-ignore-* DQG replicate-ignore-* RSWLRQV binlog-*
RSWLRQVUHGXFHWKHHYHQWVWKDWJRLQWRWKHELQDU\ORJILOHRQWKHPDVWHUZKHUHDV
replicate-*VSHFLI\WKRVHWKDWJRLQWRWKHUHOD\ORJILOHRQWKHVODYH6ODYHVDOVRKDYH
replicate-wild-do-*DQGreplicate-wild-ignore-*ZKLFKDOORZWKHPWRVSHFLI\
WKURXJKSDWWHUQVREMHFWVWKDWVKRXOGRUVKRXOGQRWEHUHSOLFDWHG
7KHPRVWFRPPRQSUREOHPVZLWKWKHVHRSWLRQVDUH
3HRSOHIRUJHWWKH\VSHFLILHGWKHRSWLRQV
)LOWHUV VSHFLILHG LQ binlog-do-* replicate-do-* binlog-ignore-* DQG
replicate-ignore-*ZRUNLIDQGRQO\LIUSEdbnameZDVFDOOHGH[SOLFLWO\
6\PSWRPVRIWKHSUREOHPVDUH
$SDUWLFXODUTXHU\ZDVQRWUHSOLFDWHG
$Q£XQNQRZQWDEOHxxxRQTXHU\¤HUURURQWKHVODYH
Engine options
7KLVVHFWLRQGHVFULEHVRSWLRQVVSHFLILFWRSDUWLFXODUVWRUDJHHQJLQHV,ZLOOGLVFXVVDIHZ
,QQR'%DQG0\,6$0RSWLRQVKHUH2SWLRQVUHODWHGWRSHUIRUPDQFHDUHFRYHUHGLQD
VXEVHTXHQW VHFWLRQ ,Q D WURXEOHVKRRWLQJ VLWXDWLRQ \RX VKRXOG ORRN WKURXJK DQG
DFTXDLQW\RXUVHOIZLWKDOORSWLRQVRIWKHVWRUDJHHQJLQH\RXXVH
InnoDB options. :HZLOOVWDUWZLWKRSWLRQVRI,QQR'%VWRUDJHHQJLQH
innodb_autoinc_lock_mode
7KLVRSWLRQGHILQHVZKLFKORFNLQJPRGH,QQR'%ZLOOXVHZKHQLQVHUWLQJLQWRDXWR
LQFUHPHQW ILHOGV 7KHUH DUH WKUHH PRGHV traditional ZKLFK ZDV XVHG EHIRUH
YHUVLRQ consecutive WKH GHIDXOW VWDUWLQJ ZLWK DQG interleaved 7KH
VDIHVW LV consecutive 7KH WZR RWKHUV FDQ EH XVHG IRU EHWWHU SHUIRUPDQFH DQG
traditionalFDQDOVREHXVHGIRUEDFNZDUGFRPSDWLELOLW\
,ZRQ¦WGHVFULEHWKHGLIIHUHQFHVEHWZHHQWKHVHORFNW\SHVKHUHEHFDXVHWKH0\64/
5HIHUHQFH0DQXDOFRQWDLQVGHWDLOHGLQIRUPDWLRQDERXWKRZHDFKRIWKHPZRUNV
mysql> \q
Bye
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> \q
Bye
table description:
Key Start Len Index Type Rec/key Root Blocksize
Recordlength: 774
table description:
Key Start Len Index Type Rec/key Root Blocksize
myisam_recover_options
7KLVRSWLRQWHOOVWKH0\64/VHUYHUWRFKHFNHDFKWLPHLWRSHQVD0\,6$0WDEOH
ZKHWKHUWKHWDEOHLVFRUUXSWHGRUZDVQRWFORVHGSURSHUO\,IWKHFKHFNIDLOV0\64/
Connection-related options
7KHPRVWLPSRUWDQWRIWKHVHRSWLRQVIURPDWURXEOHVKRRWLQJVWDQGSRLQWFRQFHUQWLPH
RXWV,¦OODOVRGLVFXVVVRPHRSWLRQVUHODWHGWRVHFXULW\WKDWFRPPRQO\FDXVH RUVROYH
SUREOHPV
Timeouts. <RXDUHDOUHDG\DFTXDLQWHGZLWKinnodb_lock_wait_timeoutZKLFKLQWHUUXSWV
DTXHU\WKDWLVZDLWLQJIRUDURZORFN
$VLPLODURSWLRQLVlock_wait_timeoutZKLFKDSSOLHVWRPHWDGDWDORFNV7KLVORFNLVVHW
IRUDOORSHUDWLRQVWKDWDFTXLUHWKHPHWDGDWDORFN DML 'DWD0DQLSXODWLRQ/DQJXDJH
VWDWHPHQWVVXFKDVINSERTUPDATEDQGDELETE DDLLOCK TABLESDQGVRRQ,WVGHIDXOW
YDOXHLVVHFRQGVZKLFKLV\HDU6RE\GHIDXOWMDLORFNVHIIHFWLYHO\QHYHUGLH
+RZHYHU\RXFDQFKDQJHWKLVYDOXHWRDQ\WKLQJVWDUWLQJIURPVHFRQG,WLVDG\QDPLF
YDULDEOHWKDWFDQEHFKDQJHGDWWKHVHVVLRQOHYHO
7KHUHLVDOVRDVHWRIWLPHRXWYDULDEOHVWKDWDUHLQGHSHQGHQWIURPTXHULHV\RXUXQDQG
WKDWOLPLWZDLWLQJWLPHVIRUUHVXOWVHWVFOLHQWGDWDRUDXWKRUL]DWLRQSDFNHWV7KHVHDUH
connect_timeout
7KH WLPHRXW XVHG ZKHQ WKH 0\64/ VHUYHU DQG FOLHQW H[FKDQJH DXWKRUL]DWLRQ
SDFNHWV6WDUWLQJZLWKYHUVLRQWKHGHIDXOWYDOXHLVVHFRQGV
interactive_timeout
+RZPXFKWLPHWRZDLWIRUDFWLYLW\IURPDQLQWHUDFWLYHFOLHQWEHIRUHNLOOLQJWKH
FRQQHFWLRQLHKRZORQJWKHVHUYHUZLOOZDLWWRUHDGWKHQH[WFRPPDQG7KHWHUP
£LQWHUDFWLYHFOLHQW¤LVXVHGIRUFOLHQWVWKDWGLUHFWO\UXQTXHULHVVHQWE\DKXPDQ
)RULQVWDQFHWKH0\64/FRPPDQGOLQHFOLHQWP\VTOLVLQWHUDFWLYHZKHUHDVDZHE
DSSOLFDWLRQLVQRWE\GHIDXOW:KHQZULWLQJDQDSSOLFDWLRQ\RXVKRXOGH[SOLFLWO\
VSHFLI\LI\RXZDQWLWWREHFRQVLGHUHGLQWHUDFWLYH
wait_timeout
+RZPXFKWLPHWRZDLWIRUDFWLYLW\IURPDQ\FOLHQWEHIRUHNLOOLQJWKHFRQQHFWLRQ
,I D FOLHQW LV LQWHUDFWLYH DQG WKH YDOXH RI interactive_timeout LV GLIIHUHQW IURP
wait_timeoutinteractive_timeoutDSSOLHV
Performance-Related Options
+HUH,¦OORIIHUDVKRUWRYHUYLHZRIRSWLRQVWKDWDIIHFWSHUIRUPDQFH$JDLQ,DPQRW
GHVFULELQJDOORIWKHPEXWMXVWWKRVHWKDWDUHXVHGPRVWIUHTXHQWO\,QFRQWUDVWZLWK
RSWLRQVIURPWKHSUHYLRXVVHFWLRQWKHVHRSWLRQVGRQ¦WOHDGWRGLIIHUHQWUHVXOWV
)LUVW,ZLOOGLVFXVVRSWLRQVWKDWDIIHFWVHUYHUEHKDYLRUDVDZKROHWKHQVRPHHQJLQH
VSHFLILFRSWLRQV
2QHH[FHSWLRQLVWKHRSWLPL]HUSDUDPHWHUVLQEXPLAINVWDWHPHQWV
7KHsort_buffer_sizeEXIIHULVDOORFDWHGWRRRIWHQVRKDYLQJDODUJH
JOREDO YDOXH FDQ GHFUHDVH SHUIRUPDQFH UDWKHU WKDQ LQFUHDVH LW
7KHUHIRUHLWLVEHWWHUQRWWRVHWWKLVRSWLRQDVDJOREDOYDULDEOHEXW
LQFUHDVHLWZKHQQHHGHGXVLQJSET SESSION
sql_buffer_result
:KHQWKLVYDULDEOHLVVHWWKHVHUYHUEXIIHUVWKHUHVXOWVRIHDFKSELECTLQWHPSRUDU\
WDEOHV7KLVFDQKHOSWRUHOHDVHWDEOHORFNVHDUOLHUZKHQDFOLHQWUHTXLUHVDORWRI
WLPHWRUHWULHYHUHVXOWV$IWHUUHVXOWVDUHVWRUHGLQWKHWHPSRUDU\WDEOHWKHVHUYHU
FDQUHOHDVHWKHORFNVRQWKHRULJLQDOWDEOHPDNLQJLWDFFHVVLEOHWRRWKHUWKUHDGV
ZKLOHWKHILUVWFOLHQWLVVWLOOUHWULHYLQJUHVXOWV
7RILQGRXWZKHWKHUDTXHU\LVVSHQGLQJDORWRIWLPHVHQGLQJLWVUHVXOWVHWUXQ
SHOW PROCESSLISTDQGFKHFNWKHDPRXQWRIWLPHWKHTXHU\LVLQWKHVWDWH£6HQGLQJ
GDWD¤
%HVWSUDFWLFHFDQEHWRVHWquery_cache_sizeWRDUHDVRQDEO\VPDOO
m
YDOXH DQG SHULRGLFDOO\ GHIUDJPHQW LW XVLQJ WKH TXHU\
UP, FLUSH QUERY CACHEUDWKHUWKDQLQFUHDVLQJWKLVYDOXH
7RGHWHUPLQHZKHWKHUWKHTXHU\FDFKHLVEHLQJXVHGHIIHFWLYHO\FKHFNWKHVWDWXV
YDULDEOHVQcache_free_blocksQcache_free_memory Qcache_hitsQcache_inserts
Qcache_lowmem_prunes Qcache_not_cached Qcache_queries_in_cache DQG
Qcache_total_blocks
(YHQ WKRXJK WKH key_col2 = 'foo' FRPSDULVRQ LQYROYHV D VLQJOH YDOXH WKH
RSWLPL]HUWUHDWVLWDVDUDQJHFRQGLWLRQDVH[SODLQHGLQWKH0\64/5HIHUHQFH
0DQXDOLQWKHVHFWLRQ£7KH5DQJH$FFHVV0HWKRGIRU6LQJOH3DUW,QGH[HV¤
KWWSGHYP\VTOFRPGRFUHIPDQHQUDQJHDFFHVVVLQJOHSDUWKWPO
index_merge_sort_union
(QDEOHV RU GLVDEOHV WKH LQGH[ PHUJH VRUW XQLRQ DFFHVV DOJRULWKP 7KLV
DOJRULWKPLVXVHGZKHQDWHEREFODXVHFRQWDLQVVHYHUDOUDQJHFRQGLWLRQVWKDW
XVHDNH\DQGDUHFRPELQHGZLWKWKHORNH\ZRUGEXWZKHUHWKHLQGH[PHUJH
XQLRQDFFHVVDOJRULWKPLVQRWDSSOLFDEOH$QH[DPSOHLV
(key_col1 > 10 OR key_col2 = 'bar') AND key_col3 = 'baz'
max_join_size
3UHYHQWV WKH RSWLPL]HU IURP H[HFXWLQJ SELECT VWDWHPHQWV WKDW LW HVWLPDWHV ZLOO
H[FHHGFHUWDLQOLPLWV IRULQVWDQFHH[DPLQLQJPRUHWKDQmax_join_sizeURZV 7KLV
RSWLRQLVXVHIXOZKLOHGHEXJJLQJZKHQ\RXZDQWWRILQGZKLFKTXHULHVGRQRWXVH
LQGH[HV
max_length_for_sort_data
:KHQGRLQJORDER BYRSWLPL]DWLRQRQFRQGLWLRQVZKHUHLQGH[HVFDQQRWEHXVHG
0\64/XVHVDILOHVRUWDOJRULWKP7KHUHDUHWZRYDULDWLRQVRIWKLVDOJRULWKP7KH
RULJLQDODOJRULWKPUHDGVDOOPDWFKHGURZVDQGVWRUHVSDLUVRINH\VDQGURZSRLQWHUV
LQDEXIIHUZKRVHVL]HLVOLPLWHGWRsort_buffer_size$IWHUWKHYDOXHVLQWKHEXIIHU
DUHVRUWHGWKHDOJRULWKPUHDGVURZVIURPWKHWDEOHDVHFRQGWLPHEXWLQVRUWHG
RUGHU7KHGLVDGYDQWDJHRIWKLVDOJRULWKPLVWKDWURZVPXVWEHUHDGWZLFH
7KHPRGLILHGDSSURDFKUHDGVWKHZKROHURZLQWRWKHEXIIHUWKHQVRUWVWKHNH\V
DQGUHWULHYHVURZVIURPWKHEXIIHU7KHSUREOHPZLWKWKLVDSSURDFKLVWKDWWKH
UHVXOWVHWLVXVXDOO\ODUJHUWKDQsort_buffer_sizeVRGLVN,2RSHUDWLRQVPDNHWKH
DOJRULWKPVORZHUIRUODUJHGDWDVHWV7KHmax_length_for_sort_dataYDULDEOHOLPLWV
WKHVL]HRIWKHSDLUVIRUWKLVDOJRULWKPVRWKHRULJLQDODOJRULWKPLVXVHGLIWKHWRWDO
VL]HRIWKHH[WUDFROXPQVLQWKHSDLUVH[FHHGVWKLVOLPLW
+LJKGLVNDFWLYLW\WRJHWKHUZLWKORZ&38DFWLYLW\LVDVLJQDOWKDW\RXQHHGWRORZHU
WKHYDOXHRIWKLVYDULDEOH
&KHFNWKH£25'(5%<2SWLPL]DWLRQ¤SDUWRIWKH0\64/5HIHUHQFH0DQXDOIRU
IXUWKHUGHWDLOV
max_seeks_for_key
6HWVWKHWKUHVKROGLQWHUPVRIWKHQXPEHURIURZVWKDWDWDEOHVFDQPXVWFKHFN
IRUZKHQWRXVHDNH\LQVWHDGRIDWDEOHVFDQ6HWWLQJWKLVRSWLRQWRDVPDOOYDOXH
VXFKDVFDQIRUFHWKHRSWLPL]HUWRSUHIHULQGH[ORRNXSVRYHUWDEOHVFDQV
max_sort_length
6HWVWKHQXPEHURILQLWLDOE\WHVWDNHQIURPDBLOBRUTEXTYDOXHZKHQGRLQJDVRUW
/DWWHUE\WHVDUHLJQRUHG
innodb_concurrency_tickets
:KHQDWKUHDGLVSHUPLWWHGWRHQWHU,QQR'%LWUHFHLYHVWKLVQXPEHURIFRQFXUUHQF\
WLFNHWVZKLFKSHUPLWLWWROHDYHDQGUHHQWHU,QQR'%XQWLOLWXVHVXSWKHVHWLFNHWV
7KLVLVQRWDKDUGOLPLWDQGVRPHWLPHVPRUHWKDQRQHWKUHDGSHUJURXSLVH[HFXWLQJ
:KHQVHWWKHYDULDEOHinnodb_doublewriteSUHYHQWV,QQR'%GDWD
FRUUXSWLRQ 7KHUHIRUH GR QRW VZLWFK LW RII XQWLO DEVROXWHO\
QHFHVVDU\
7KLVLVQRWWUXHDQ\PRUHEHFDXVHWKH,QQR'%3OXJLQLQWURGXFHGLPSURYHPHQWVWKDWVSHHG
XSFUDVKUHFRYHU\
7KHVHUYHUDOVRKDVRSWLRQVWKDWOLPLWWKHQXPEHURIILOHGHVFULSWRUVDQGKRZPDQ\
WKUHDGVFDQEHFDFKHG<RXFDQVNLSWKHPIRUWKLVFDOFXODWLRQEHFDXVHWKHDPRXQWRI
PHPRU\ WKH\ DOORFDWH LV MXVW WKH VL]H RI D SRLQWHU RQ WKH V\VWHP PXOWLSOLHG E\ WKH
TXDQWLW\RILWHPVDOORFDWHGDWRWDOWKDWLVVPDOOHQRXJKWREHLJQRUHGRQPRGHUQV\V
WHPV,MXVWOLVWWKHPKHUHIRUUHIHUHQFH
thread_cache_size
table_definition_cache
table_open_cache
Thread options
7KHVH RSWLRQV DUH DOORFDWHG RQ D SHUWKUHDG EDVLV 6R WKH VHUYHU FDQ DOORFDWH
max_connections*sum(thread options)6HWmax_connectionsDQGWKHVHRSWLRQVWRPDNH
VXUHWKDWWKHtotal amount of physical RAM - max_connections*sum(thread options)
- options for whole serverLVJUHDWHUWKDQ]HUR/HDYHVRPH5$0IRURSWLRQVLQWKH
WKLUGJURXSDQGDELWPRUHIRUEDFNJURXQGRSHUDWLRQVZKLFKFDQQRWEHFRQWUROOHGE\
YDULDEOHV
+HUHLVWKHOLVWRIWKUHDGRSWLRQV
net_buffer_length
thread_stack
query_prealloc_size
binlog_cache_size
binlog_stmt_cache_size
8VHWKHIROORZLQJIRUPXODWRFDOFXODWHKRZPXFK5$0LQPHJDE\WHV\RXQHHGLQRUGHU
WRDOORFDWHWKHP
SELECT @@max_connections * (@@global.net_buffer_length + @@thread_stack +
@@global.query_prealloc_size + @@binlog_cache_size + @@binlog_stmt_cache_size) /
(1024 * 1024)
2U LI \RX DUH RQ D YHUVLRQ ROGHU WKDQ WKH YHUVLRQ LQ ZKLFK WKH YDULDEOH bin
log_stmt_cache_sizeZDVLQWURGXFHG
SELECT @@max_connections * (@@global.net_buffer_length + @@thread_stack +
@@global.query_prealloc_size + @@binlog_cache_size) / (1024 * 1024)
'RWKLVIRUDOOYDULDEOHVDQGFDOFXODWHWKHVXPRIWKHUHVXOWV
,WLVJRRGSUDFWLFHWRNHHSWKHVHRSWLRQVVPDOOVRORQJDVWKH\DUHDGHTXDWHIRUPRVW
TXHULHV7KHQLIDSDUWLFXODUTXHU\QHHGVPRUHPHPRU\MXVWLQFUHDVHWKHYDULDEOH¦V
YDOXHIRUWKDWVHVVLRQ)RUH[DPSOHLI\RXQHHGWRVHW max_join_sizeUHDOO\KLJKIRUD
VWDWLVWLFVTXHU\WKDW\RXUXQRQFHSHUZHHNWKHUHLVQRVHQVHWRVHWLWJOREDOO\VHWLWMXVW
EHIRUHUXQQLQJWKHTXHU\(YHQZLWKWKLVSUHFDXWLRQGRQ¦WIRUJHWDERXWPHPRU\XVDJH
DVDZKROH
5HPRYHIURPWKLVIRUPXODWKRVHRSWLRQVWKDWDUHQRWVXLWDEOHIRU\RXUHQYLURQPHQW
7RZUDSXSWKLVFKDSWHUKHUHLVDFRPSUHKHQVLYHIRUPXODWKDWFDOFXODWHVWKHPD[LPXP
DPRXQWRI5$0LQPHJDE\WHVWKDW\RXU0\64/LQVWDOODWLRQFDQXVH
set @join_tables = YOUR_ESTIMATE_PER_THREAD;
set @scan_tables = YOUR_ESTIMATE_PER_THREAD;
set @tmp_tables = YOUR_ESTIMATE_PER_THREAD;
2UIRUYHUVLRQVROGHUWKDQ
set @join_tables = YOUR_ESTIMATE_PER_THREAD;
set @scan_tables = YOUR_ESTIMATE_PER_THREAD;
3OHDVHQRWHWKDWWKHIRUPXODVZRUNRQO\LIWKHYDOXHVDUHVPDOOHQRXJK,IWKH\DUHODUJH
\RX HLWKHU QHHG WR FRQYHUW HDFK YDULDEOH WR PHJDE\WHV RU FDVW WKHP DV
UNSIGNED INTEGER (YHQ FDVWLQJ WR UNSIGNED INTEGER ZRQ¦W KHOS LI DQ\ YDULDEOH FDQ
H[FHHG WKH PD[LPXP XQVLJQHG LQWHJHU YDOXH ZKLFK LV ,
GLGQ¦WWDNHWKHVHSRVVLEOHRYHUIORZVLQWRDFFRXQWEHFDXVH,ZDQWHGWKHIRUPXODVWREH
UHDGDEOHDQGFOHDU,WDOVRPDNHVVHQVHWRUHPRYHVRPHRIWKHYDULDEOHVIURPWKHFDO
FXODWLRQLI\RXGRQ¦WXVHWKRVHEXIIHUVRUIHDWXUHV)RUH[DPSOHLQVWHDGRIXVLQJWKH
GHIDXOWYDOXHRI myisam_mmap_sizeXVHWKHPD[LPXPVL]HRIWKH0\,6$0WDEOHVWKDW
RQHWKUHDGFDQXVHLQVWHDG
7KH0\64/VHUYHULVQRWDORQHLQWKHHQYLURQPHQWZKHUHLWUXQV(YHQLILWZRUNVLQD
GHGLFDWHGHQYLURQPHQW\RXVWLOOKDYHWRFRQVLGHUWKHKDUGZDUHUHVRXUFHVDQGRSHUDWLQJ
V\VWHP 26 OLPLWV,QVKDUHGHQYLURQPHQWVWKH0\64/VHUYHULVDOVRDIIHFWHGE\RWKHU
SURFHVVHV7XQLQJRSHUDWLQJV\VWHPVIRU0\64/LVDKXJHWRSLFDERXWZKLFKDVHSDUDWH
ERRNFRXOGEHZULWWHQ+HUH,ZRQ¦WJRGHHSEXWVKRZVRPHVWDUWLQJSRLQWVIURPD
WURXEOHVKRRWLQJSHUVSHFWLYH0\64/UXQVLQYDULRXVHQYLURQPHQWVZKLFKLVDJUHDW
DGYDQWDJHIRU0\64/EXWDOVRVRPHWKLQJWKDWPDNHVLWKDUGWRJHWVSHFLILFLQWKLV
FKDSWHU6R,GHFLGHGWRVKRZ\RXZKDW\RXQHHGWRFDUHDERXWDQGOHDYHLWXSWR\RX
WRFRQVXOWWKHPDQXDOIRU\RXU26WRGHWHUPLQHKRZWRKDQGOHWXQLQJ
RAM
0HPRU\LVDYHU\LPSRUWDQWUHVRXUFHIRU0\64/7KHVHUYHUZRUNVIDVWZKHQLWGRHV
QRWVZDS,GHDOO\LWVKRXOGILWLQ5$07KHUHIRUHLWLVLPSRUWDQWWRFRQILJXUHEXIIHUV
LQVXFKDZD\WKDWWKH\VWD\ZLWKLQWKHOLPLWVRISK\VLFDOPHPRU\,SURYLGHGJXLGHOLQHV
147
IRUWKLVLQ£(IIHFWVRI2SWLRQV¤RQSDJHDQGLQ&KDSWHUSDUWLFXODUO\LQ£&DOFXODWLQJ
6DIH9DOXHVIRU2SWLRQV¤RQSDJH
<RXFDQFKHFNZKHWKHUP\VTOGLVQRWVZDSSLQJE\FKHFNLQJYPVWDWRQ
/LQX[8QL[RUWKH:LQGRZV7DVN0DQDJHURQ:LQGRZV
a,:' +HUHLVDQH[DPSOHRIVZDSSLQJRQ/LQX[,PSRUWDQWSDUWVDUHLQEROG
)RUDVHUYHUWKDWLVQRWVZDSSLQJDOOWKHVHYDOXHVVKRXOGEHHTXDOWR]HUR
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
1 0 1936 296828 7524 5045340 4 11 860 0 470 440 4 2 75 18
0 1 1936 295928 7532 5046432 36 40 860 768 471 455 3 3 75 19
0 1 1936 294840 7532 5047564 4 12 868 0 466 441 3 3 75 19
0 1 1936 293752 7532 5048664 0 0 848 0 461 434 5 2 75 18
,QWKRVHVHFWLRQVZHGLVFXVVHGKRZFRQILJXUDWLRQYDULDEOHVFDQDIIHFWPHPRU\XVDJH
7KHEDVLFUXOHLVWRFDOFXODWHWKHPD[LPXPUHDOLVWLFDPRXQWRI5$0WKDWZLOOEHXVHG
E\WKH0\64/VHUYHUDQGWRPDNHVXUH\RXNHHSLWOHVVWKDQWKHSK\VLFDO5$0\RX
KDYH+DYLQJEXIIHUVODUJHUWKDQWKHDFWXDOPHPRU\VL]HLQFUHDVHVWKHULVNRIWKH0\64/
VHUYHUFUDVKLQJZLWKDQ£2XWRIPHPRU\¤HUURU
■ 7KHSUHYLRXVSRLQWFDQEHVWDWHGWKHRWKHUZD\DURXQGLI\RXQHHGODUJHUEXIIHUV
EX\PRUH5$07KLVLVDOZD\VDJRRGSUDFWLFHIRUJURZLQJDSSOLFDWLRQV
■ 8VH 5$0 PRGXOHV WKDW VXSSRUW H[WHQGHG HUURU FRUUHFWLRQ ((& VR LI D ELW RI
PHPRU\LVFRUUXSWHGWKHZKROH0\64/VHUYHUGRHVQRWFUDVK
$IHZRWKHUDVSHFWVRIPHPRU\XVHWKDW\RXVKRXOGFRQVLGHUDUHOLVWHGLQDFKDSWHU
QDPHG£+RZ0\64/8VHV0HPRU\¤LQWKH0\64/5HIHUHQFH0DQXDO,ZRQ¦WUHSHDW
LWVFRQWHQWVKHUHEHFDXVHLWGRHVQ¦WLQYROYHDQ\QHZWURXEOHVKRRWLQJWHFKQLTXHV
2QHLPSRUWDQWSRLQWLVWKDWZKHQ\RXVHOHFWDURZFRQWDLQLQJD%/2%FROXPQDQ
LQWHUQDOEXIIHUJURZVWRWKHSRLQWZKHUHLWFDQVWRUHWKLVYDOXHDQGWKHVWRUDJHHQJLQH
GRHVQRWUHWXUQWKHPHPRU\WR5$0DIWHUWKHTXHU\ILQLVKHV<RXQHHGWRUXQ FLUSH
TABLEWRIUHHWKHPHPRU\
$QRWKHUSRLQWFRQFHUQVGLIIHUHQFHVEHWZHHQELWDQGELWDUFKLWHFWXUHV$OWKRXJK
WKHELWRQHVXVHDVPDOOHUSRLQWHUVL]HDQGWKXVFDQVDYHPHPRU\WKHVHV\VWHPVDOVR
FRQWDLQ LQKHUHQW UHVWULFWLRQV RQ WKH VL]H RI EXIIHUV GXH WR DGGUHVVLQJ OLPLWV LQ WKH
RSHUDWLQJV\VWHP7KHRUHWLFDOO\WKHPD[LPXPPHPRU\DYDLODEOHLQDELWV\VWHPLV
*%SHUSURFHVVDQGLW¦VDFWXDOO\OHVVRQPDQ\V\VWHPV7KHUHIRUHLIWKHEXIIHUV\RX
ZDQW WR XVH H[FHHG WKH VL]H RI \RXU ELW V\VWHP FRQVLGHU VZLWFKLQJ WR D ELW
DUFKLWHFWXUH
$V\RXFDQVHHWKHWHVWUXQVIDVWHUXSXQWLO,VWDUWHLJKWWKUHDGVDQGVWRSVLPSURYLQJ
DWKLJKHUYDOXHV
Disk I/O
)DVWGLVNVDUHYHU\LPSRUWDQWIRU0\64/SHUIRUPDQFH7KHIDVWHUWKHGLVNWKHIDVWHU
WKH,2RSHUDWLRQV
5HJDUGLQJGLVNV\RXVKRXOGSD\DWWHQWLRQWRGLVNUHDGODWHQF\¢KRZPXFKWLPHHDFK
UHDGDFFHVVWDNHV¢DQGIV\QFODWHQF\¢KRZORQJHDFKIV\QFWDNHV
5HFHQWVROLGVWDWHGLVNV 66'V ZRUNZHOOEXWGRQ¦WH[SHFWPLUDFOHVIURPWKHP\HW
EHFDXVHPRVWVWRUDJHHQJLQHVDUHRSWLPL]HGWRGRUHDGDQGZULWHVIRUKDUGGLVNV
7KHVDPHLVVXHDSSOLHVWRQHWZRUNVWRUDJH,WLVSRVVLEOHWRVWRUHGDWDDQGORJILOHVLQ
QHWZRUNILOHV\VWHPVDQGVWRUDJHEXWWKHVHLQVWDOODWLRQVPD\EHVORZHUWKDQORFDOGLVNV
<RXQHHGWRFKHFNLVKRZIDVWDQGUHOLDEOH\RXUVWRUDJHLV2WKHUZLVHGRQ¦WEHVXUSULVHG
LI\RXH[SHULHQFHGDWDFRUUXSWLRQEHFDXVHRIQHWZRUNIDLOXUH
<RXFDQGHWHUPLQHZKHWKHU\RXUGLVN,2LVRYHUORDGHGXVLQJLRVWDWRQ/LQX[8QL[
7KHDYHUDJHTXHXHOHQJWKRIWKHUHTXHVWVLVVXHGWRWKHGHYLFHVKRXOGQRWEHKLJKLQ
,GLVFXVVsysbenchLQ£6\V%HQFK¤RQSDJH
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await
cciss/c0d0 0.02 7.25 0.50 6.34 14.35 108.73 17.98 0.48 69.58
dm-0 0.00 0.00 0.52 13.59 14.27 108.70 8.72 0.09 6.59
svctm %util
2.22 1.52
1.08 1.52
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await
cciss/c0d0 0.00 5362.40 0.20 713.80 1.60 51547.20 72.20 138.40 193.08
dm-0 0.00 0.00 0.00 6086.00 0.00 48688.00 8.00 1294.74 227.04
svctm %util
1.40 99.88
0.16 99.88
<skipped>
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await
cciss/c0d0 0.00 10781.80 0.00 570.20 0.00 84648.00 148.45 143.58 248.72
dm-0 0.00 0.00 0.00 11358.00 0.00 90864.00 8.00 3153.82 267.57
svctm %util
1.75 100.02
0.09 100.02
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await
cciss/c0d0 0.00 11722.40 0.00 461.60 0.00 98736.00 213.90 127.78 277.04
dm-0 0.00 0.00 0.00 12179.20 0.00 97433.60 8.00 3616.90 297.54
svctm %util
2.14 98.80
0.08 98.80
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await
cciss/c0d0 0.00 4836.80 1.00 713.60 8.00 49070.40 68.68 144.28 204.08
dm-0 0.00 0.00 1.00 5554.60 8.00 44436.80 8.00 1321.82 257.28
7KLVRXWSXWZDVWDNHQZKHQP\VTOGZDVLGOHDQGWKHQVWDUWHGDQDFWLYH,2MRE<RX
FDQVHHKRZ avgqu-szLVJURZLQJ$OWKRXJKWKLVLVIDUIURPSUREOHPDWLF,GHFLGHGWR
SXWWKLVH[DPSOHKHUHWRVKRZKRZGLVN,2DFWLYLW\FKDQJHVZKLOHP\VTOGLVGRLQJLWV
MRE
$QGDVLGHIURPVSHHGUHPHPEHUWKDWWKHVWRUDJHFDQORVHGDWDSDUWLDOSDJHZULWHVDUH
VWLOOSRVVLEOH,I\RXXVH,QQR'%XVHWKHGRXEOHZULWHEXIIHUE\VHWWLQJ innodb_double
writeWRVHFXUH\RXUGDWD$OVRLVYHU\LPSRUWDQWWRSODQEDWWHU\EDFNXSVIRU\RXUGLVNV
EHFDXVHWKHVHFDQSUHYHQWGDWDORVVLQFDVHRISRZHUIDLOXUH
Network Bandwidth
&OLHQWVDOPRVWDOZD\VFRQQHFWWRWKH0\64/VHUYHURYHUDQHWZRUNVRLWLVLPSRUWDQW
WRUXQ\RXU0\64/VHUYHULQDIDVWQHWZRUN
,QDGGLWLRQWRQHWZRUNEDQGZLGWKURXQGWULSWLPH 577 DQGWKHQXPEHURIURXQG
WULSVDUHLPSRUWDQW577LVDWLPHQHHGHGIRUDFOLHQWWRVHQGDQHWZRUNSDFNHWWKHQ
UHFHLYH DQ DQVZHU IURP WKH VHUYHU 7KH ORQJHU GLVWDQFH EHWZHHQ WKH PDFKLQHV WKH
KLJKHUWKH577LV
1HWZRUN EDQGZLGWK DQG 577 DUH WKH UHDVRQV ZK\ LW LV UHFRPPHQGHG WR SODFH WKH
0\64/FOLHQWDQGWKHVHUYHULQWKHVDPHORFDOQHWZRUNZKHQSRVVLEOH
/RFDOQHWZRUNVDUHUHFRPPHQGHGIRUUHSOLFDWLRQDVZHOO<RXFDQFRQQHFWWRVODYHV
RYHUWKH,QWHUQHWLQVWHDGRIDORFDOLQWUDQHWEXWH[SHFWGHOD\VDQGHYHQHUURUVGXHWR
FRUUXSWLRQLQWKHUHOD\ORJGDWD6XFKHUURUVVKRXOGEHIL[HGDXWRPDWLFDOO\DIWHUEXJ
LVIL[HGDQGLI\RXXVHWKHrelay-log-recoveryRSWLRQVWDUWLQJZLWKYHUVLRQ
DQGELQDU\ORJFKHFNVXPVVWDUWLQJZLWKYHUVLRQ%XWWKHPDVWHUDQGVODYHZLOOVWLOO
VSHQGWLPHUHVHQGLQJSDFNHWVGXHWRQHWZRUNIDLOXUHV
7KLVVLPSOHTXHU\FRXOGH[SHULHQFHODWHQFLHVZKHQ
7KHFOLHQWVHQGVDFRPPDQGWRWKHVHUYHUWKDWWDNHVDKDOIRI577
7KHWHEREFODXVHRIWKHUPDATELVH[HFXWHGDQGP\VTOGUHDGVWKHGLVN
P\VTOGGRHVDQfsyncFDOOWRSUHSDUHIRUWKHWUDQVDFWLRQEHFDXVHautocommitLVRQ
P\VTOGGRHVDQfsyncFDOOWRZULWHLQWRDELQDU\ORJILOH
7KLVRSWLRQLVYHU\LPSRUWDQWLI\RXKDYHPDQ\WDEOHVDQGDYDOXHWKDW¦VWRRVPDOOFDQ
OHDGWRDVORZGRZQEHFDXVHWKH0\64/VHUYHUKDVWRVSHQGWLPHRSHQLQJDQGFORVLQJ
WDEOHVRULWPD\HYHQUHMHFWFRQQHFWLRQDWWHPSWVLIWKHVHUYHUFDQ¦WRSHQQHZWDEOHVGXH
WRODFNRIUHVRXUFHV
$OWKRXJKWKHSURSHUZD\WRVHWRSHUDWLQJV\VWHPUHVRXUFHOLPLWVLVWRXVH\RXUVSHFLILFSODWIRUPWRROVLW
LVVWLOOZRUWKPHQWLRQLQJWKHEXLOWLQVKHOOFRPPDQGulimitGXHWRLWVHDVHRIXVHDQGDYDLODELOLW\IRUHYHU\
XVHU,WFDQHLWKHUVKRZDOOFXUUHQWUHVWULFWLRQVLIUXQDVulimit -aRUVHWVRIWOLPLWVIRUWKHFXUUHQWXVHU
WEEE
MEW
WEEW
03
)LJXUH7ZRVHUYHUVWKDWUHSOLFDWHHDFKRWKHU
+HUHVHUYHUALVDPDVWHURILWVVODYHBDQGDWWKHYHU\VDPHWLPHVHUYHUBLVDPDVWHURI
VODYHA
<RXFDQDGGDVPDQ\VHUYHUVDV\RXZLVKWRVXFKFKDLQV )LJXUH
155
\
t
t
t
T
T
IIII/
/ ////
/////
/////
/////
/////
CO
<E
Q
kU
)LJXUH&LUFXODUUHSOLFDWLRQZLWKPXOWLSOHVHUYHUV
7RWURXEOHVKRRWVXFKVHWXSV\RXQHHGWRWDNHDVLQJOHPDVWHUVODYHSDLU )LJXUH
/ ////
/ ////
CO
)LJXUH)RFXVLQJRQRQHGLUHFWLRQLQPXOWLPDVWHUUHSOLFDWLRQ
7KHQZRUNLWRXWOLNHDQ\VLPSOHUHSOLFDWLRQVHWXS7KHQWDNHDQRWKHUSDLUDQGVRRQ
, ZRQ¦W GHVFULEH WKLV VSHFLILF FDVH LQ GHWDLO EXW MXVW WRXFK RQ LW ODWHU LQ WKH VHFWLRQ
£&LUFXODU5HSOLFDWLRQDQG1RQUHSOLFDWLRQ:ULWHVRQWKH6ODYH¤RQSDJH
7KH0\64/VODYHUXQVWZRWKUHDGVUHODWHGWRUHSOLFDWLRQWKH,2WKUHDGZKLFKKDQGOHV
DOOWKHWUDIILFZLWKWKHPDVWHUDQGWKH64/WKUHDGZKLFKUHUXQVWKHHYHQWVWKHPVHOYHV
WR UHSOLFDWH UHVXOWV RQ WKH VODYH 7KHVH WKUHDGV H[SHULHQFH GLIIHUHQW SUREOHPV WKDW
7KLVLVWKHVWDWXVRIWKH,2WKUHDG)RUDUXQQLQJVODYHLWXVXDOO\FRQWDLQVWaiting for
master to send event
Slave_IO_State: Waiting for master to send event
Master_Host: 127.0.0.1
Master_User: root
Master_Port: 4041
Connect_Retry: 60
Master_Log_File: mysqld511-bin.000007
7KHMaster_Log_FileILHOGVKRZVWKHQDPHRIWKHPDVWHUELQDU\ORJILOH,IWKHVODYHKDG
DQ,2HUURUWKHILHOGZRXOGEHHPSW\
Read_Master_Log_Pos: 106
106LVWKHSRVLWLRQLQWKHPDVWHU¦VELQDU\ORJWKDWZDVUHDG
Relay_Log_File: mysqld512-relay.000097
Relay_Log_File LV WKH QDPH RI WKH UHOD\ ORJILOH D ILOH RQ WKH VODYH WKDW FRQWDLQV WKH
LQIRUPDWLRQWUDQVIHUUHGIURPWKHPDVWHU¦VELQDU\ORJ
Relay_Log_Pos: 255
255LVWKHFXUUHQWSRVLWLRQLQWKHUHOD\ORJILOH
Relay_Master_Log_File: mysqld511-bin.000007
Slave_IO_Running: Yes
Slave_IO_RunningLQGLFDWHVWKHEDVLFVWDWHRIWKH,2WKUHDGLHZKHWKHULWLVUXQQLQJ
7KLVFDQEHHLWKHUYesRUNo
Slave_SQL_Running: Yes
7KLVWLPHZHVHHWKHUXQQLQJVWDWXVRIWKH64/WKUHDG$JDLQLWFDQEHHLWKHUYesRUNo
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Seconds_Behind_MasterVKRZVKRZIDUWKHVODYHODJVEHKLQGWKHPDVWHU,WFRQWDLQVWKH
QXPEHURIVHFRQGVEHWZHHQWKHODVWH[HFXWHGHYHQWRQWKHVODYHDQGWKHODVWHYHQWIURP
WKHPDVWHUELQDU\ORJWKDWZDVUHSOLFDWHGLQWRWKHUHOD\ORJILOH,GHDOO\WKLVYDOXHVKRXOG
EH]HUR,IWKHVODYHLVQRWFRQQHFWHGWRDPDVWHUWKLVILHOGFRQWDLQVNULL
Master_SSL_Verify_Server_Cert: No
+HUHLVRXWSXWIURPWKHVWRSSHGVODYHDJDLQ
Last_IO_Errno: 2013
Last_IO_ErrnoLVHLWKHUWKHQXPEHURIWKHPRVWUHFHQWHUURURQWKH,2WKUHDGRU]HUR
LIWKHUHKDVEHHQQRHUURUVLQFHWKHVODYHVWDUWHG
Last_IO_Error: error connecting to master '[email protected]:4041'
- retry-time: 60 retries: 86400
7KHVHWZRURZVFRQWDLQWKHWH[WRIWKHPRVWUHFHQW,2HUURU,QWKLVFDVHWKH\FRQWDLQ
LQIRUPDWLRQDERXWZK\WKH,2WKUHDGIDLOHG
Last_SQL_Errno: 0
Last_SQL_ErrnoLVHLWKHUWKHQXPEHURIWKHPRVWUHFHQWHUURURQWKH64/WKUHDGRU]HUR
LIWKHUHKDVEHHQQRHUURUVLQFHWKHVODYHVWDUWHG
Last_SQL_Error:
$JDLQWKHWH[WRIODVW64/HUURU$OWKRXJKWKHUHLVQRHUURULQWKLVH[DPSOHWKHVHWZR
URZVFDQFRQWDLQLQIRUPDWLRQDERXWZK\WKH64/WKUHDGIDLOHG
1RZ WKDW \RX DUH IDPLOLDU ZLWK WKH RXWSXW RI SHOW SLAVE STATUS ZH FDQ JR RQ WR
WURXEOHVKRRWLQJ
,ISLQJIDLOVWRFRQQHFWWRWKHPDVWHUKRVWWKLVFOHDUO\ORFDWHVWKHSUREOHPLQWKHQHWZRUN
DQG\RXQHHGWRIL[LW<RXFDQDOVRXVHWHOQHWWRFKHFNZKHWKHUWKH0\64/VHUYHULWVHOI
LV UHDFKDEOH 6SHFLI\ WKH KRVW DQG SRUW RI WKH PDVWHU DV DUJXPHQWV IRU WKH telnet
FRPPDQG
$telnet 192.168.0.4 33511
Trying 192.168.0.4...
Connected to apple.
Escape character is '^]'.
>
5.1.59-debug-log}O&i`(D^,#!\o8h%zY0$`;D^]
telnet> quit
Connection closed.
,QWKLVH[DPSOHWKH0\64/VHUYHUZDVUHDFKDEOH 5.1.59-debug-log}O&i`(D^,#!\o8h
%zY0$`;D^]LVLWVZHOFRPHVWULQJ,ISLQJZRUNVEXWWHOQHWFDQQRWFRQQHFWWRWKHVHUYHU
\RXQHHGWRILQGRXWZKHWKHUWKH0\64/VHUYHULVUXQQLQJDQGZKHWKHUWKHSRUWLV
DFFHVVLEOHWKDWLVZKHWKHUWKHVODYHKRVWFDQRSHQWKHPDVWHUSRUWDQGZKHWKHUWKH
PDVWHUKRVWDOORZVWKHVODYHKRVWWRFRQQHFWWRWKLVSRUW
Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
SHOW GRANTSKHUHVKRZVWKHSDUDPHWHUVWKURXJKZKLFKWKHVODYH¦VUHSOLFDWLRQXVHUFDQ
UHSOLFDWHGDWDIURPWKHPDVWHU
:KHQ WKH VODYH FDQ FRQQHFW WR WKH PDVWHU EXW UHSHDWHGO\ GLVFRQQHFWV XVH \RXU
RSHUDWLQJV\VWHPWRROVWRFKHFNWKHQHWZRUN<RXFDQXVHtcpdumpRUnetstatWRZDWFK
WUDIILFRUHYHQVHQGDODUJHILOHWKURXJKWKHQHWZRUNDQGZDWFKSURJUHVVWREHVXUHWKH
QHWZRUNLVVWDEOH7KHJRDOLVWRGHWHUPLQHZKHWKHUWKHFRQQHFWLRQEHWZHHQWKHPDVWHU
DQGVODYHLVEHLQJLQWHUUXSWHG
,IDFRQQHFWLRQWRWKHPDVWHULVHVWDEOLVKHGnetstatVKRXOGSULQWVRPHWKLQJOLNH
$netstat -a
Active Internet connections (including servers)
Proto Recv-Q Send-Q Local Address Foreign Address (state)
tcp4 0 0 apple.60344 master.mysql.com.33051 ESTABLISHED
tcpdumpZRXOGSULQWSDFNHWV
$tcpdump -i en1 host master.mysql.com and port 33051
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on en1, link-type EN10MB (Ethernet), capture size 96 bytes
22:28:12.195270 IP master.mysql.com.33051 > apple.60344: P
7KLVH[DPSOHZDVWDNHQZKHQ,LVVXHGDTXHU\RQWKHPDVWHUDQGLWZDVVXFFHVVIXOO\
UHSOLFDWHG
:KHQWKHVODYHLVIDUEHKLQGWKHPDVWHUWKLVFDQEHDV\PSWRPRIDVORZQHWZRUNRU
DORDGWKDW¦VWRRKHDY\RQWKHVODYH:HZLOOUHWXUQWRRYHUORDGHGVODYHVODWHULQWKLV
FKDSWHUZKHQGLVFXVVLQJWKH64/WKUHDG
7RFKHFNZKHWKHUWKHQHWZRUNLVVORZXVH tcpdumpRUVHQGODUJHILOHVDQGZDWFKWKH
WLPHVLQZKLFKSDFNHWVDUHWUDQVIHUUHG$OVRFKHFNZKHWKHU0\64/LVXVLQJDOORIWKH
EDQGZLGWKDYDLODEOHWRWKHV\VWHPRQHDFKVLGH,IEDQGZLGWKXVDJHLVDERYH\RX
PD\QHHGWREX\IDVWHUQHWZRUNKDUGZDUH,ILWLVQ¦WXVLQJDOORIWKHDYDLODEOHEDQGZLGWK
FKHFNZKHWKHURWKHUVRIWZDUHLVXVLQJWKHVDPHQHWZRUNLQWHUIDFHDQGDIIHFWLQJWKH
0\64/VHUYHU,IRWKHUVRIWZDUHLVJHWWLQJLQWKHZD\PRYHLWWRDGLIIHUHQWKRVWRUDW
OHDVWDGLIIHUHQWKDUGZDUHQHWZRUNLQWHUIDFH
$QRWKHUHUURUUHODWHGWRWKH,2WKUHDGLVUHOD\ORJFRUUXSWLRQ<RXZRXOGPRVWOLNHO\
VHHLWDVDQ64/WKUHDGHUURU
Last_SQL_Errno: 1594
Last_SQL_Error: Relay log read failure: Could not parse relay log event
entry. The possible reasons are: the master's binary log is corrupted (you can
check this by running 'mysqlbinlog' on the binary log), the slave's relay log is
corrupted (you can check this by running 'mysqlbinlog' on the relay log), a
network problem, or a bug in the master's or slave's MySQL code. If you want to
check the master's binary log or slave's relay log, you will be able to know
their names by issuing 'SHOW SLAVE STATUS' on this slave.
,¦PGLVFXVVLQJWKLVSUREOHPLQWKLVVHFWLRQLQVWHDGRIWKH64/WKUHDGVHFWLRQEHFDXVH
WKHUHDOFDXVHRIWKHHUURUFRXOGEHDIDLOXUHLQWKH,2WKUHDGWKDWFRUUXSWHGWKHUHOD\
ORJHDUOLHU:KDWFRXOGEHKDSSHQLQJLVWKDWWKH64/WKUHDGKDVHQFRXQWHUHGWKHFRU
UXSWLRQZKLOHWU\LQJWRH[HFXWHHYHQWVLQWKHUHOD\ORJ
,QFDVHRIVXFKDQHUURUWKHILUVWWKLQJWRGRLVIROORZWKHGLUHFWLRQVLQWKHHUURUPHVVDJH
FKHFN WKH PDVWHU¦V ELQDU\ ORJ DQG WKH VODYH¦V UHOD\ ORJ IRU FRUUXSWLRQ XVLQJ WKH
P\VTOELQORJXWLOLW\P\VTOELQORJFRQYHUWVELQDU\ORJILOHVLQWRDKXPDQUHDGDEOHIRUPDW
6LPSO\FDOOLWOLNHWKLV
$mysqlbinlog /Users/apple/Applications/mysql-5.1/data511/mysqld511-bin.005071
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#110904 16:50:00 server id 511 end_log_pos 106 Start: binlog v 4,
server v 5.1.59-debug-log created 110904 16:50:00
BINLOG '
HIJjThP/AQAAKQAAAC0BAAAAABUAAAAAAAEABHRlc3QAAnQxAAEDAAE=
HIJjThf/AQAAIgAAAE8BAAAAABUAAAAAAAEAAf/+AQAAAA==
'/*!*/;
# at 335
#110904 16:50:20 server id 511 end_log_pos 404 Query thread_id=7251
exec_time=0 error_code=0
SET TIMESTAMP=1315144220/*!*/;
COMMIT
/*!*/;
# at 404
#110904 16:50:36 server id 511 end_log_pos 451 Rotate to
mysqld511-bin.005072 pos: 4
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
,QWKLVH[DPSOH,XVHGDYDOLGELQDU\ORJILOH,IWKHILOHZDVFRUUXSWHGP\VTOELQORJZLOO
PHQWLRQLWH[SOLFLWO\
,XVHGWKHURZELQDU\ORJIRUPDWKHUHWRVKRZKRZURZHYHQWVORRNZKHQSULQWHG,I
binlog_format='statement'LVXVHGDOOHYHQWVDUHSULQWHGDV64/VWDWHPHQWV<RXFDQ
VHHWKH64/UHSUHVHQWDWLRQRIURZHYHQWVE\XVLQJWKH--verboseRSWLRQ
$mysqlbinlog --verbose --start-position=260 --stop-position=335 \
/Users/apple/Applications/mysql-5.1/data511/mysqld511-bin.005071
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#110904 16:50:00 server id 511 end_log_pos 106 Start: binlog v 4,
server v 5.1.59-debug-log created 110904 16:50:00
BINLOG '
CIJjTg//AQAAZgAAAGoAAAAAAAQANS4xLjU5LWRlYnVnLWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAEzgNAAgAEgAEBAQEEgAAUwAEGggAAAAICAgC
'/*!*/;
# at 260
# at 301
#110904 16:50:20 server id 511 end_log_pos 301 Table_map: `test`.`t1`
mapped to number 21
#110904 16:50:20 server id 511 end_log_pos 335 Write_rows: table id 21
flags: STMT_END_F
BINLOG '
HIJjThP/AQAAKQAAAC0BAAAAABUAAAAAAAEABHRlc3QAAnQxAAEDAAE=
HIJjThf/AQAAIgAAAE8BAAAAABUAAAAAAAEAAf/+AQAAAA==
'/*!*/;
### INSERT INTO test.t1
### SET
### @1=1
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
ZKHUHlog_posLVWKHSRVLWLRQRIWKHODVWFRUUHFWFKDQJHRIWKDWWDEOHLQHLWKHUWKHPDVWHU
ELQDU\ILOHRUUHOD\ORJILOH$IWHUWKHVODYHUHDFKHVWKLVSRVLWLRQDQGVWRSVUHPRYHWKH
RSWLRQreplicate-wild-ignore-tableDQGUHVWDUWWKHVHUYHU
:KHQ\RXZDQWWRFKHFNZKHWKHUWKHWDEOHVRQWKHPDVWHUDQGVODYHKDYHWKHVDPH
GDWD UXQ WKH TXHU\ RQ ERWK VHUYHUV DQG FRPSDUH UHVXOWV 0DNH VXUH WKDW
Seconds_Behind_MasterLV]HURDQGWKDWWKHUHLVQRZULWHDFWLYLW\RQWKHVDPHWDEOH
RQWKHPDVWHUZKLOHCHECKSUM TABLELVUXQQLQJ
P\VTOGLII
7KLVLVDWRROIURPWKH0\64/:%8WLOLWLHVEXQGOHWKDWFRPHVZLWKWKH0\64/
:RUNEHQFK LQVWDOODWLRQ 7KH WRRO UHDGV WKH GHILQLWLRQ RI GDWDEDVH REMHFWV DQG
FRPSDUHV WKHLU GHILQLWLRQV XVLQJ D diffOLNH PHWKRG WR GHWHUPLQH ZKHWKHU WZR
REMHFWVDUHVDPH+HUHLVDQH[DPSOHRILWVXVHIRUWURXEOHVKRRWLQJUHSOLFDWLRQ
$mysqldiff [email protected]:33511 [email protected]:33512 \
test.t1:test.t1
# server1 on 127.0.0.1: ... connected.
# server2 on 127.0.0.1: ... connected.
# Comparing test.t1 to test.t1 [PASS]
Success. All objects are the same.
7KLVFRPPDQGFDOFXODWHVDQGVDYHVFKHFNVXPVIRUHDFKWDEOHLQWKHbookGDWDEDVH
2QFHWKHVODYHLVXSZHFDQFKHFNZKHWKHUWKHWDEOHVDUHWKHVDPH
$pt-table-checksum --replicate=test.checksum --replicate-check=2
h=127.0.0.1,P=33511,u=root --databases book
Differences on P=33512,h=127.0.0.1
DB TBL CHUNK CNT_DIFF CRC_DIFF BOUNDARIES
book ts 0 -5 1 1=1
7KHWRROSULQWVWKHGLIIHUHQFHVLWILQGVLIDQ\+HUHZHFDQVHHWKDWGDWDLQWKHts
WDEOHLVGLIIHUHQWRQWKHPDVWHUDQGVODYHZKHUHDVGDWDLQt1LVVDPH
:KDWHYHUWRRO\RXXVH\RXQHHGWREHVXUHWKDWQRFKDQJHZDVUHSOLFDWHGVLQFHWKHODVW
FKHFNZDVWDNHQRQWKHPDVWHU7KHHDVLHVWZD\WRGRWKLVLVWRZULWHORFNWKHWDEOHV
\RXDUHFXUUHQWO\H[DPLQLQJ
P\VTOGLIIDQGSWWDEOHFKHFNVXPFDQGRPRUHWKDQZKDW,GHVFULEHGKHUHEXWWKHXVHV
,VKRZHGDUHWKHPRVWLPSRUWDQWWRKHOSGLDJQRVHUHSOLFDWLRQIDLOXUHV
,I \RX KDYHQ¦W IRXQG DQ\ SUREOHP ZLWK WKH PDVWHU ELQDU\ ORJ RU ILQG WKDW WKH
UHOD\ ORJ LV FRUUXSW LW FDQ EH D V\PSWRP RI HLWKHU D QHWZRUN LVVXH RU GLVN
FRUUXSWLRQ ,Q ERWK FDVHV \RX FDQ UHSRVLWLRQ WKH UHOD\ ORJ RQ WKH VODYH WR WKH
Exec_Master_Log_Pos SRVLWLRQ DQG UHVWDUW LW XVLQJ VHTXHQFH RI TXHULHV STOP
SLAVE; CHANGE MASTER master_log_pos=Exec_Master_Log_Pos_Value, master_log_file
='Relay_Master_Log_File_Value'; START SLAVEDQGWKHUHOD\ORJZLOOEHUHFUHDWHG,I
WKHFRUUXSWLRQZDVDVLQJXODURFFXUUHQFHUHSOLFDWLRQZLOOEHXSDQGUXQQLQJDJDLQ
%XWGRQ¦WMXVWFOHDQXSDQGLJQRUHZKDWHYHUFRXOGKDYHFDXVHGWKHSUREOHP&KHFN
\RXUORJVIRUGLVNDQGQHWZRUNSUREOHPV
7RILQGRXWZKHWKHUWKHFDXVHZDVDGLVNSUREOHPH[DPLQHWKHRSHUDWLQJV\VWHP¦V
ORJILOHVDQGXVHWRROVWRFKHFNWKHGLVNIRUEDGVHJPHQWV,I\RXILQGDQ\IL[WKHGLVN
2WKHUZLVH\RXFDQH[SHFWVLPLODUIDLOXUHVDJDLQ
1HWZRUNSUREOHPVFDQFDXVHFRUUXSWLRQLQROGHUYHUVLRQVRI0\64/%HIRUHYHUVLRQV
DQGUHOD\ORJVFRXOGRIWHQEHFRUUXSWHGE\XQVWDEOHQHWZRUNV,QYHUVLRQV
DQGEXJZDVIL[HGDQGQRZWKLVSUREOHPLVTXLWHUDUH6LQFH
7KHHUURUPHVVDJHXVXDOO\FRQWDLQVWKHWH[WRIWKH64/TXHU\DQGWKHUHDVRQZK\LW
IDLOHG,QWKLVFDVHWKHHUURUPHVVDJHH[SODLQVHYHU\WKLQJ ,GURSSHGWKHt1WDEOHRQWKH
VODYHWRFUHDWHWKLVH[DPSOH EXWLQFDVHRIGRXEW\RXFDQWU\WRUXQVDPHTXHU\LQWKH
0\64/FRPPDQGOLQHFOLHQWDQGVHHWKHUHVXOWV
mysql> INSERT INTO t1 VALUES(1);
ERROR 1146 (42S02): Table 'test.t1' doesn't exist
7KHHUURULQWKLVH[DPSOHPDNHVLWFOHDUZKDW\RXQHHGWRGRWRVROYHWKHSUREOHP
FUHDWHWKHWDEOH
mysql> CREATE TABLE t1(f1 INT);
Query OK, 0 rows affected (0.17 sec)
1RZWKHSUREOHPLVVROYHGDQGWKHVODYHUXQVVXFFHVVIXOO\DJDLQ
0\64/UHSOLFDWLRQDOORZV\RXWRKDYHGLIIHUHQWGHILQLWLRQVIRUDWDEOH
m
RQWKHPDVWHUDQGVODYH,I\RXUXQVXFKDVHWXSDQDO\]HKRZWKHVDPH
UP, TXHU\UXQVRQWKHVHGLIIHUHQWWDEOHV$OVRFKHFNZKHWKHUXVLQJGLIIHUHQW
VWRUDJHHQJLQHVDQGLQGH[HVFDQDIIHFWWKHILQDOUHVXOW
:KHQWKH64/WKUHDGVWRSVDYHU\FRPPRQUHDVRQLVWKDWWKHVODYH¦VWDEOHVGLIIHUIURP
WKHPDVWHU,ZRQ¦WGHVFULEHDOOWKHUHDVRQVIRUWKHVHHUURUVKHUHEXWWKHPRVWFRPPRQ
DUH
7KHSUREOHPVZHVDZLQ([DPSOHDQGHOVHZKHUHZLWKFRQFXUUHQWWUDQVDFWLRQDO
XSGDWHVWKDWGRQ¦WSUHVHUYHWKHFRQVLVWHQF\RIGDWD
$ GHWHUPLQLVWLF IXQFWLRQ LV RQH WKDW UHWXUQV WKH VDPH UHVXOW HDFK WLPH LW UXQV ZLWK WKH VDPH LQSXW
SDUDPHWHUVCONCAT('Hello, ', 'world!')LVGHWHUPLQLVWLFZKHUHDVNOW()LVQRW
6XFKUHSOLFDWLRQFDQEHDOVRFDOOHG£PXOWLPDVWHUUHSOLFDWLRQ¤RU£ELGLUHFWLRQDOUHSOLFDWLRQ¤
A
IP B
1/
A
)LJXUH7ZRVHUYHUVWKDWUHSOLFDWHHDFKRWKHU
A
•0 B
)LJXUH)RFXVLQJRQRQHGLUHFWLRQLQPXOWLPDVWHUUHSOLFDWLRQ
$IWHUWKHSUREOHPLVVROYHGWHPSRUDULO\VWRSXSGDWHVRQADQGWXUQWKHPRQRQBVR
\RXKDYHDVLPSOHVHWXSOLNHWKHRQHVKRZQLQ)LJXUH
o-$ B A
)LJXUH5HYHUVLQJGLUHFWLRQLQPXOWLPDVWHUUHSOLFDWLRQ
,IWKLVVHWXSLVVWLOOH[SHULHQFLQJSUREOHPVVROYHWKHPKHUHWRRDQGWKHQVWDUWXSGDWHV
RQADJDLQVR\RXKDYHVDPHFLUFXODUPXOWLPDVWHUVHWXS
$WWKLVSRLQWLWLVJRRGWRDQDO\]HZK\WKHSUREOHPRFFXUUHGLQWKHILUVWSODFHDQGIL[
LWEHIRUHUHVWDUWLQJXSGDWHVRQERWKVHUYHUV
7KHVDPHPHWKRGZRXOGZRUNIRUDQ\QXPEHURIVHUYHUVLQWKHFLUFOH
:KHQVHWWLQJXSFLUFXODUUHSOLFDWLRQ\RXQHHGWRFOHDUO\VSOLWTXHULHVVRWKDWFKDQJHV
IURPRQHPDVWHUGRQ¦WLQWHUIHUHZLWKDQRWKHU(UURUVFDQEUHDNUHSOLFDWLRQRUFDXVHGDWD
LQFRQVLVWHQF\,ZRQ¦WGHVFULEHEHVWSUDFWLFHVKHUHEXW\RXFDQILQGDGHWDLOHGRYHUYLHZ
,KDYHGLVFXVVHGPDQ\WURXEOHVKRRWLQJWHFKQLTXHVDQGWRROVHDUOLHULQWKLVERRN6RPH
RIWKHPZHUHH[SODLQHGWKRURXJKO\DQGLQRWKHUFDVHV,RQO\WRXFKHGRQDVSHFWVRI
WKHLUXVH7KLVFKDSWHUDGGVGHWDLOVOHIWRXWRISUHYLRXVFKDSWHUV,KDYHWULHGWRDYRLG
UHSHWLWLRQ0DQ\WHFKQLTXHVDQGWRROVGHSHQGRQHDFKRWKHUVRWKH\DUHFRPELQHGLQ
WKLVFKDSWHU
7KHUH DUH WRR PDQ\ WRROV WR GHVFULEH WKHP DOO VR KHUH , VWLFN WR WKRVH WKDW , ILQG
DEVROXWHO\QHFHVVDU\7KH\DUHPRVWO\FRPPDQGOLQHWRROVWKDWHLWKHUFRPHZLWKWKH
0\64/GLVWULEXWLRQRUDUHSURYLGHGDVVHSDUDWHSDFNDJHV,LQFOXGHDIHZGHVFULSWLRQV
RIWKLUGSDUW\WRROVDJDLQFRPPDQGOLQHXWLOLWLHV,GLGWKLVQRWEHFDXVH,GRQ¦WOLNH
WKLUGSDUW\WRROVEXWWROHW\RXNQRZDERXWWKHJUHDWWRROVWKDWFRPHZLWK0\64/DQG
WKDW\RXWKHUHIRUHDOZD\VKDYH2QHRIWKHDGYDQWDJHVRI0\64/WRROVLVWKDWWKH\DUH
DOZD\VDYDLODEOHZKLFKLVYHU\LPSRUWDQWIRURXUFXVWRPHUV6RPHFRPSDQLHVKDYH
UXOHV WKDW SUHYHQW WKHLU HPSOR\HHV IURP GRZQORDGLQJ D WKLUGSDUW\ WRRO 7KHUHIRUH
ZKHQ GRLQJ FXVWRPHU VXSSRUW ZH DOZD\V SUHIHU WRROV WKDW FRPH ZLWK WKH 0\64/
GLVWULEXWLRQ
)RUVLPLODUUHDVRQV,GRQ¦WGHVFULEHJUDSKLFDOWRROVKHUH7KHFRPPDQGOLQHWRROVSRVH
QRVSHFLDOUHTXLUHPHQWVVXFKDVWKH;:LQGRZ6\VWHPRUDSDUWLFXODURSHUDWLQJV\VWHP
ZKHUHDVJUDSKLFDOWRROVDUHPRUHGHPDQGLQJ
)LQDOO\,NQRZ0\64/¦VWRROVPXFKEHWWHUWKDQWKHLUDQDORJVLQRWKHUSDFNDJHV,I\RX
ILQGPRUHSRZHUIXOWKLUGSDUW\WRROVXVHWKHP%XWNQRZLQJZKDWFDQEHGRQHZLWK
VLPSOHWRROVLVDOZD\VXVHIXO
The Query
,Q&KDSWHUZHOHDUQHGKRZDVLQJOHTXHU\FDQDIIHFWSHUIRUPDQFHDFURVVWKHZKROH
VHUYHUDQGKRZWRILQGZKLFKRQHLVPLVEHKDYLQJ+HUH,¦OODGGDIHZZRUGVDERXWWKLV
W\SHRISUREOHP
173
$SUREOHPDWLFTXHU\ILUHGE\DQDSSOLFDWLRQFDQEHIRXQGE\FKHFNLQJWKHHUURUORJV
WKURXJKWKHXVHRIRXWSXWIXQFWLRQVLQWKHDSSOLFDWLRQWKDWDXWRPDWLFDOO\ORJVTXHULHV
VHQWWRWKH0\64/VHUYHUXVLQJDOLEUDU\ZULWWHQIRUVXFKDSXUSRVHLQWKHDSSOLFDWLRQ
DQGLQWKHJHQHUDOTXHU\ORJILOH+HUH,ZDQWWRGLVFXVVKRZVXFKORJJLQJFDQEHWXQHG
7KHJHQHUDOTXHU\ORJLVPLVVLQJVRPHXVHIXOLQIRUPDWLRQWKDWFDQKHOS\RXGHEXJ\RXU
TXHU\VXFKDVTXHU\H[HFXWLRQWLPHLQIRUPDWLRQDERXWHUURUVDQGZDUQLQJVDQGWKH
UHVXOWVHW,QIRUPDWLRQDERXWTXHU\H[HFXWLRQWLPHFDQEHXVHGWRILQGVORZTXHULHV
2IFRXUVH\RXFDQORJDOOWKLVVSHFLDOGDWDXVLQJDFXVWRPOLEUDU\RUE\VLPSO\DGGLQJ
RXWSXW IXQFWLRQV HYHU\ZKHUH LQ \RXU DSSOLFDWLRQ %XW EHIRUH \RX VWDUW WXQLQJ WKH
DSSOLFDWLRQ\RXFDQVWLOOXVHDEXLOWLQUHVRXUFHWKHVORZTXHU\ORJ
mysqldumpslow
7KHmysqldumpslowXWLOLW\SULQWVWKHFRQWHQWVRIWKHVORZTXHU\ORJLQDNLQGRIVXPPDU\
IRUPDW ,W JURXSV TXHULHV VR LI WZR TXHULHV DUH OLWHUDOO\ WKH VDPH EXW XVH GLIIHUHQW
SDUDPHWHUVWKH\DUHSULQWHGRQFHWRJHWKHUZLWKWKHQXPEHURIH[HFXWLRQWLPHV7KLV
PHDQVWKHXWLOLW\WUHDWVTXHULHVVXFKDVSELECT * FROM t2 WHERE f1=1DQGSELECT * FROM
t2 WHERE f1=2DVWKHVDPHEHFDXVHWKHDFWXDOYDOXHRIWKHSDUDPHWHU f1XVXDOO\GRHV
QRWDIIHFWTXHU\H[HFXWLRQWLPH7KLVLVHVSHFLDOO\FRQYHQLHQWLI\RXZDQWWRILQGVORZ
TXHULHVWKDWXVHDVLPLODUSDWWHUQLQDQDSSOLFDWLRQWKDWUXQVWKRXVDQGVRIWKHP
$mysqldumpslow /Users/apple/Applications/mysql-5.1/data512/mysqld512-apple-slow.log
1RWHWKDWDOWKRXJKWKHXWLOLW\LVVPDUWHQRXJKWRJURXSVLPLODUTXHULHVXVLQJGLIIHUHQW
SDUDPHWHUVLWWUHDWVTXHULHVWKDWGLIIHUV\QWDFWLFDOO\RQO\LQLQVLJQLILFDQWZD\V¢VXFK
DVXVLQJDGLIIHUHQWOHWWHUFDVHRUKDYLQJGLIIHUHQWZKLWHVSDFH¢DVGLIIHUHQWTXHULHV
MySQL Proxy
0\64/ 3UR[\ LV D VFULSWDEOH GDHPRQ WKDW VXSSRUWV WKH 0\64/ SURWRFRO DQG VLWV
EHWZHHQWKH0\64/VHUYHUDQGWKHDSSOLFDWLRQ7KHDSSOLFDWLRQVKRXOGEHFRQILJXUHG
LQVXFKDZD\WKDWDOOTXHULHVJRWKURXJKWKHSUR[\7KLVJHQHUDOO\MXVWPHDQVVHWWLQJ
WKHSURSHUKRVWQDPHDQGSRUW
0\64/ 3UR[\ VXSSRUWV WKH /XD VFULSWLQJ ODQJXDJH ,W DOORZV TXHU\ DQG UHVXOW VHW
UHZULWLQJ ORJJLQJ ORDG EDODQFLQJ DQG PXFK PRUH +HUH ,¦OO GLVFXVV RQO\ ORJJLQJ
EHFDXVHWKDW¦VZKDWZLOOKHOS\RXGHEXJVORZTXHULHV
)RUDXGLWLQJSXUSRVHV\RXQHHGWRZULWHD/XDVFULSWWKDWVDYHVWKHQHFHVVDU\LQIRU
PDWLRQ$VDPSOHVFULSWWKDWFDQLPLWDWHJHQHUDOTXHU\ORJEHKDYLRUDQGLQDGGLWLRQ
VDYHTXHU\H[HFXWLRQWLPHFDQORRNOLNH
function read_query( packet )
if packet:byte() == proxy.COM_QUERY then
print(os.date("%d%m%y %H:%M:%S") .. "\t"
.. proxy.connection.server.thread_id
.."\tQuery\t" .. packet:sub(2))
proxy.queries:append(1, packet )
return proxy.PROXY_SEND_QUERY
end
end
function read_query_result(inj)
print("Query execution time: " .. (inj.query_time / 1000) .. "ms,\t"
.. "Response time: " .. (inj.response_time / 1000) .. "ms,\t"
.. "Total time: " .. ((inj.query_time + inj.response_time) / 1000) .. "ms")
end
&DOOWKHVFULSWDVIROORZV
$mysql-proxy --admin-username=admin --admin-password=foo \
--admin-lua-script=./lib/mysql-proxy/lua/admin.lua \
--proxy-address=127.0.0.1:4040 --proxy-backend-addresses=127.0.0.1:3355 \
--proxy-lua-script=`pwd`/general_log.lua
7KHUHVXOWVZLOOORRNOLNH
$mysql-proxy --admin-username=admin --admin-password=foo \
--admin-lua-script=./lib/mysql-proxy/lua/admin.lua \
--proxy-address=127.0.0.1:4040 --proxy-backend-addresses=127.0.0.1:3355 \
--proxy-lua-script=`pwd`/general_log.lua
031111 01:51:11 20 Query show tables
Query execution time: 376.57ms, Response time: 376.612ms, Total time: 753.182ms
031111 01:51:19 20 Query select * from t1
Query execution time: 246.849ms, Response time: 246.875ms, Total time: 493.724ms
031111 01:51:27 20 Query select * from t3
Query execution time: 689.772ms, Response time: 689.801ms, Total time: 1379.573ms
031111 01:51:39 20 Query select count(*) from t4
Query execution time: 280.751ms, Response time: 280.777ms, Total time: 561.528ms
%HVLGHV WKH UHJXODU FOLHQW RSWLRQV ZKLFK DIIHFW HYHU\ 0\64/ FOLHQW
DSSOLFDWLRQ&RQQHFWRU-DQG&RQQHFWRU2'%&KDYHWKHLURZQ$3,V
a,:' DQG FRQILJXUDWLRQV 4XHULHV FDQ DOVR EH DIIHFWHG E\ FRQYHUVLRQ UXOHV
FDUULHG RXW E\ WKHVH LQWHUIDFHV 7KHUHIRUH LI \RX XVH RQH RI WKHP LW
EHFRPHVFULWLFDOWRWHVWDSUREOHPDWLFTXHU\LQWKH0\64/&/,
7RWHVWDQDSSOLFDWLRQWKDWJHWVUHVXOWVWKDWDUHGLIIHUHQWIURPZKDW\RXH[SHFWVWDUW
WKH0\64/&/,ZLWKWKH--column-type-infoRSWLRQZKLFKSULQWVLQIRUPDWLRQDERXW
GDWDW\SHV
$mysql --column-type-info test
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
Field 2: `f2`
Catalog: `def`
Database: `test`
Table: `t1`
Org_table: `t1`
Type: BLOB
Collation: latin1_swedish_ci (8)
Length: 65535
Max_length: 32
Decimals: 0
Flags: BLOB
+----+----------------------------------+
| f1 | f2 |
+----+----------------------------------+
| 1 | f9f760a2dc91dfaf1cbc95046b249a3b |
| 2 | e81077a403cc27525fdbb587451e7935 |
| 3 | a003a1256c0178e0c4d37a063ad1786b |
| 4 | 2447565c49917f2daeaac192614eabe8 |
| 6 | 6bfb21c57cc3a8de22dc4dbf635fdc77 |
| 7 | 2d9f5350ba5b914a8f4abf31b5ae975c |
| 8 | 57e87a3c55d053b5ab428f5da7f6ba28 |
| 9 | ad2ede5e02ce1da95dcd8f71426d5e7b |
| 13 | 65400ab09cdc725ec5bafe2ac4f5045d |
| 14 | 48f1b1e99041365a74444f75a6689d64 |
| 15 | 1f6c558fe2c492f1da2ebfb42d9f53dc |
| 16 | ff931f7ac8c8035a929dc35fee444332 |
| 17 | f26f6b6e8d16ae5603cf8c02409f4bb5 |
| 18 | 239ca93bf7b5fd82a53e731004cba761 |
| 19 | 1f985d1fe9efa14453a964e2c4657ab5 |
| 20 | 1d599460b91f2d892c024fe5a64f7d6d |
+----+----------------------------------+
16 rows in set (0.09 sec)
7KLVRXWSXWWHOOV\RXEDVLFPHWDLQIRUPDWLRQDERXWWKHILHOGVXFKDVLWVGDWDW\SHDQG
FROODWLRQ¢LQIRUPDWLRQWKDWPD\EHFKDQJHGE\FRQILJXUDWLRQRSWLRQVRUDSSOLFDWLRQ
VHWWLQJV%\UXQQLQJLWLQWKH0\64/&/,\RXFDQVHHZKDWWKHTXHU\ZRXOGQRUPDOO\
GRRQWKHVHUYHUDQG\RXFDQJXHVVWKHUH¦VDSUREOHPLIWKHLQIRUPDWLRQUHFHLYHGE\
WKHVHUYHUIURPWKHDSSOLFDWLRQLVGLIIHUHQW/HW¦VH[DPLQHWKLVRXWSXWOLQHE\OLQH
7KHSUHFHGLQJRXWSXWVKRZVWKHQDPHRIDILHOG
Catalog: `def`
7KHFDWDORJQDPHZKLFKLVDOZD\Vdef
Database: `test`
7KHGDWDEDVHFXUUHQWO\EHLQJXVHG
Table: `t1`
7KHWDEOHQDPHEXWWKHRXWSXWVKRZVWKHDOLDVRIWKHWDEOHZKHQ\RXXVHDV\QWD[VXFK
DVselect field_name from table_name as alias_name
Org_table: `t1`
7KHRULJLQDOWDEOHQDPHZKLFKLVXVHIXOWRNQRZLIWKHSUHYLRXVOLQHVKRZHGDQDOLDV
Type: VAR_STRING
7KHSUHFHGLQJOLQHVKRZVWKHILHOGW\SH
Collation: latin1_swedish_ci (8)
7KHFROODWLRQ
Length: 255
7KHILHOGOHQJWKDVGHILQHGLQWKHWDEOH¦VGHILQLWLRQ
Max_length: 5
7KHOHQJWKRIWKHODUJHVWYDOXHLQWKHILHOGLQWKHUHVXOWVHWWKDWZDVUHWXUQHG
Decimals: 0
7KHQXPEHURIGHFLPDOVLQWKHILHOGLILWLVDQLQWHJHUW\SH
Flags:
)LHOG IODJV LI DQ\ )RU LQVWDQFH D SULPDU\ NH\ ILHOG ZLOO KDYH WKH IODJV PRI_KEY DQG
AUTO_INCREMENT
+-------+
| name |
+-------+
| sveta |
+-------+
1 row in set (0.00 sec)
7KHUHVXOWVHWRIWKHTXHU\
:KDWLI\RXUIDYRULWH0\64/FOLHQWLVVRPHWKLQJRWKHUWKDQWKH0\64/&/,"<RXFDQ
WHVWWKHUHEXWUHPHPEHUWKDWLWPD\LQWURGXFHVLGHHIIHFWV7KLVLVSDUWLFXODUO\WUXHRI
*8,FOLHQWV)RUH[DPSOHLIWKHFOLHQWXVHV-'%&LWLVDIIHFWHGE\LWVFRQILJXUDWLRQ
ZKLFKZRXOGQ¦WDIIHFWWKH0\64/&/,2WKHUFOLHQWVKDYHSUHFRQILJXUHGFKDUDFWHUVHWV
nrÿ- $OORIWKHFRQQHFWRUVLQWKHLUXQFRQILJXUHGVWDWHZLWKWKHH[FHSWLRQRI
■ ,I\RXWKLQNDTXHU\VKRXOGUXQILQHEXWLWLVJLYLQJ\RXXQH[SHFWHGUHVXOWVEHIRUH
\RXFRQVLGHUWKHSRVVLELOLW\RIDEXJLQWKH0\64/VHUYHUFRGHWU\WKHTXHU\LQ
WKH0\64/&/,
Sandboxes
$VDQGER[LVDQLVRODWHGHQYLURQPHQWIRUUXQQLQJDQDSSOLFDWLRQZKHUHLWFDQQRWDIIHFW
DQ\WKLQJRXWVLGHRIWKDWHQYLURQPHQW7KURXJKRXWWKLVERRN,¦YHEHHQHQFRXUDJLQJ
\RXWR£WU\¤YDULRXVFRQILJXUDWLRQRSWLRQVDQGFKDQJHVWRGDWDEDVHV%XWVRPHVXFK
£WULHV¤FDQVORZGRZQWKHDSSOLFDWLRQRUHYHQFUDVKWKHDSSOLFDWLRQRUWKHGDWDEDVH
7KLVLVQRWZKDWPRVWXVHUVZDQW,QVWHDG\RXFDQXVHDVDQGER[WRLVRODWHWKHV\VWHP
\RX¦UHWHVWLQJLQLWVRZQHQYLURQPHQWZKHUHDQ\WKLQJ\RXGRZURQJGRHVQ¦WPDWWHU
,QWKH0\64/ZRUOG*LXVHSSH0D[LDLQWURGXFHGWKLVWHUPE\FUHDWLQJDWRROQDPHG
WKH0\64/6DQGER[,ZLOOGHVFULEHWKH0\64/6DQGER[DQGKRZLWFDQEHKHOSIXOD
ELWODWHUEXWKHUH,ZDQWWREULHIO\VKRZVRPHYDULDQWVRIVDQGER[HV
Sandboxes | 181
7KHVLPSOHVWZD\WRVDIHO\WHVWTXHULHVRQDWDEOHLVWRPDNHDFRS\VRWKDWWKHRULJLQDO
WDEOHLVVHFXUHGDQGFDQEHXVHGE\WKHDSSOLFDWLRQDVXVXDOZKLOH\RXDUHEHH[SHUL
PHQWLQJZLWKWKHFRS\<RXDOVRZRQ¦WKDYHWRZRUU\DERXWUHYHUWLQJFKDQJHVWKDW\RX
LQDGYHUWHQWO\PDNH
CREATE TABLE test_problem LIKE problem;
INSERT INTO test_problem SELECT * FROM problem;
2QH JRRG WKLQJ ZLWK WKLV VROXWLRQ LV WKDW \RX FDQ FRS\ MXVW SDUW RI WKH GDWD XVLQJ
WHEREWROLPLWWKHQXPEHURIURZV)RUH[DPSOHVXSSRVH\RXDUHWHVWLQJDFRPSOH[
TXHU\DQGDUHVXUHWKDWLWLVFRUUHFWO\H[HFXWLQJRQHRILWVWHEREFODXVHV<RXFDQOLPLW
\RXUWHVWWDEOHWRLWHPVPHHWLQJWKDWFRQGLWLRQZKHQ\RXFUHDWHLWDQGWKHQKDYHD
VPDOOHUWDEOHRQZKLFKWRWHVWWKHTXHU\
INSERT INTO test_problem SELECT FROM problem WHERE condition]
<RXFDQWKHQVLPSOLI\WKHTXHU\DVZHOOE\UHPRYLQJWKDWFRQGLWLRQ7KLVFDQVDYHDORW
RIWLPHZKHQWKHRULJLQDOWDEOHLVKXJH7KLVWHFKQLTXHLVDOVRXVHIXOZKHQWKH WHERE
FODXVHZRUNHGSURSHUO\EXWDGROUP BYJURXSLQJRUORDER BYVRUWLVZURQJ
,IDTXHU\DFFHVVHVPRUHWKDQRQHWDEOHRU\RXMXVWZDQWWRWHVWTXHULHVRQGLIIHUHQW
WDEOHVLWPDNHVVHQVHWRFUHDWHDZKROHVHSDUDWHGDWDEDVH
CREATE DATABASE sandbox;
USE sandbox;
CREATE TABLE problem LIKE production.problem;
INSERT INTO problem SELECT * FROM production.problem [WHERE ...]
,QWKLVFDVH\RXZLOOKDYHDQHQYLURQPHQWDEVROXWHO\UHSURGXFLQJ\RXUSURGXFWLRQ
GDWDEDVHEXW\RXZRQ¦WKDUPDQ\WKLQJHYHQLI\RXGDPDJHURZVLQWKHFRS\
7KHVHWZRPHWKRGVDUHJRRGIRUTXHU\UHZULWLQJDQGVLPLODUSUREOHPV%XWLIWKHVHUYHU
FUDVKHVRUXVHVDORWRIUHVRXUFHVLW¦VEHVWQRWWRWHVWDQ\WKLQJRQLW,QVWHDGVHWXSD
GHYHORSPHQWVHUYHUMXVWIRUWHVWLQJSXUSRVHVDQGFRS\WKHGDWDIURPWKHSURGXFWLRQ
VHUYHU7KLVDOVRFDQKHOSLI\RXDUHSODQQLQJDQXSJUDGHRUZDQWWRFKHFNZKHWKHUD
SDUWLFXODUEXJLVIL[HGLQDQHZHUYHUVLRQRI0\64/
:KHQ\RXFUHDWHDQDSSOLFDWLRQLQWKHILUVWSODFH\RXFDQMXVWXSJUDGHWKH0\64/
VHUYHURQ\RXUGHYHORSPHQWPDFKLQH%XWLIWKHDSSOLFDWLRQKDVEHHQUXQQLQJIRUDORQJ
WLPHDQG\RXQHHGWRWHVWKRZDSDUWLFXODU0\64/YHUVLRQDIIHFWVDFWXDOGDWDVXFKDQ
XSJUDGHLQDVDQGER[FDQEHKDUGWRFUHDWHPDQXDOO\,QWKLVFDVHWKH0\64/6DQGER[
LVWKHEHVWFKRLFH
7RFUHDWHWKHLQVWDOODWLRQLQWKHILUVWSODFH\RXQHHGWRKDYHD0\64/SDFNDJHZLWKRXW
DQLQVWDOOHU VXFKDVWKRVHWKDWHQGZLWKWDUJ]IRU/LQX[ RIWKHGHVLUHGYHUVLRQDQGD
FRS\ RI 0\64/ 6DQGER[ DYDLODEOH IRU GRZQORDG IURP KWWSVODXQFKSDGQHWP\VTO
VDQGER[&UHDWHWKHVDQGER[IURPWKH0\64/SDFNDJHZLWKDFRPPDQGVXFKDVWKH
IROORZLQJ
$make_sandbox mysql-5.4.2-beta-linux-x86_64-glibc23.tar.gz
unpacking /mysql-5.4.2-beta-linux-x86_64-glibc23.tar.gz
...
2QFH LQVWDOOHG \RX VKRXOG VWRS WKH VHUYHU DQG FKDQJH WKH FRQILJXUDWLRQ ILOH VR LW
FRUUHVSRQGVWR\RXUSURGXFWLRQFRQILJXUDWLRQWKHQUHVWDUWLWDQGORDGDEDFNXSRI\RXU
SURGXFWLRQGDWDEDVHV1RZ\RXDUHUHDG\WRWHVWVDIHO\7KLVPHWKRGLVYHU\XVHIXO
ZKHQ \RX QHHG WR TXLFNO\ FKHFN DQ DSSOLFDWLRQ RQ VHYHUDO YHUVLRQV RI 0\64/ IRU
H[DPSOHWRGHWHUPLQHZKHWKHUDEXJLVIL[HG
<RXFDQKDYHDVPDQ\VDQGER[HVDV\RXZDQWDQGWHVWGLIIHUHQWDVSHFWVRI0\64/DQG
\RXU GDWDEDVHV ZLWKRXW DGGLWLRQDO HIIRUW <RX FDQ HYHQ FUHDWH D UHSOLFDWLRQ
VDQGER[¢DVDQGER[WKDWFRQWDLQVDPDVWHUVHUYHUDORQJZLWKDVPDQ\VODYHVHUYHUVDV
\RXFKRRVH
$make_replication_sandbox mysql-5.1.51-osx10.4-i686.tar.gz
$cd $HOME/sandboxes/rsandbox_5_1_51
$./m
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.1.51-log MySQL Community Server (GPL)
Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL v2 license
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
$./s1
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.1.51-log MySQL Community Server (GPL)
Sandboxes | 183
Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL v2 license
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
$./stop_all
executing "stop" on slave 1
executing "stop" on slave 2
executing "stop" on master
7RROVIURP:RUNEHQFK8WLOLWLHVVHWFDQKHOSWRFUHDWHDVDQGER[FRS\
RI\RXUSURGXFWLRQGDWDEDVH
a,:' mysqldbcopy
&RSLHV D GDWDEDVH HLWKHU FUHDWLQJ D QHZ GDWDEDVH RQ WKH VDPH
VHUYHUXQGHUDGLIIHUHQWQDPHRUSODFLQJWKHGDWDEDVHRQDGLIIHUHQW
VHUYHUZLWKWKHVDPHQDPHRUDGLIIHUHQWRQH
mysqlreplicate
&RQILJXUHVDQGVWDUWVUHSOLFDWLRQDPRQJWZRVHUYHUV
mysqlserverclone
6WDUWVDQHZLQVWDQFHRIDUXQQLQJVHUYHU
Core file
&RUH ILOHV FRQWDLQ WKH PHPRU\ LPDJH RI D SURFHVV DQG DUH FUHDWHG LI WKH RSHUDWLQJ
V\VWHPLVFRQILJXUHGWRGRVR ZKHQDSURFHVVWHUPLQDWHVDEQRUPDOO\<RXFDQREWDLQ
DFRUHILOHE\VWDUWLQJWKH0\64/VHUYHUZLWKWKHcoreRSWLRQEXWILUVW\RXVKRXOGPDNH
VXUHWKHRSHUDWLQJV\VWHPDOORZVWKHILOHWREHFUHDWHG
7RGHEXJXVLQJDFRUHILOH\RXQHHGWREHDFTXDLQWHGZLWKWKH0\64/VRXUFHFRGH
7KH£0\64/,QWHUQDOV¤SDJHRQ0\64/)RUJHLVJRRGVWDUW,DOVRUHFRPPHQGWKH
, KDYH VHHQ VHWXSV ZKHUH WKH FXVWRPHUV PDQXDOO\ VWULSSHG WKH P\VTOG ELQDU\ WR DFKLHYH EHWWHU
SHUIRUPDQFHVR,FRQVLGHUHGLWLPSRUWDQWWRLQFOXGHWKLVLQWKHERRN
7KHFRPPDQGOLQHFRQWDLQVWKHQDPHRIWKHgdbFRPPDQGIROORZHGE\WKHSDWKWRWKH
P\VTOGH[HFXWDEOHILOHDQGWKHSDWKWRFRUHILOHLWVHOI
GNU gdb (GDB) 7.3.1
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
<http://gnu.org/licenses/gpl.html7gt;
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "i686-pc-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/7gt;...
Reading symbols from /users/ssmirnova/build/mysql-5.1/libexec/mysqld...done.
[New LWP 21984]
[New LWP 21970]
[New LWP 21972]
[New LWP 21974]
[New LWP 21965]
[New LWP 21973]
[New LWP 21967]
[New LWP 21971]
[New LWP 21968]
[New LWP 21969]
7KHEDFNWUDFHLVWKHILUVWWKLQJZHQHHG
(gdb) bt
#0 0x00832416 in __kernel_vsyscall ()
#1 0x008ce023 in pthread_kill () from /lib/libpthread.so.0
#2 0x085aa6ad in my_write_core (sig=11) at stacktrace.c:310
#3 0x0824f412 in handle_segfault (sig=11) at mysqld.cc:2537
#4 7lt;signal handler called>
#5 0x084bce68 in mach_read_from_2 (b=0xfffffffe 7lt;Address 0xfffffffe out of
bounds>) at ../../storage/innobase/include/mach0data.ic:68
#6 0x084cfdd6 in rec_get_next_offs (rec=0x0, comp=1) at
../../storage/innobase/include/rem0rec.ic:278
#7 0x084e32c9 in row_search_for_mysql (buf=0xb281d7b0 "\371\001", mode=2,
prebuilt=0xb732de68, match_mode=1, direction=0) at row/row0sel.c:3727
#8 0x08476177 in ha_innobase::index_read (this=0xb281d660, buf=0xb281d7b0
"\371\001", key_ptr=0xb2822198 "", key_len=0, find_flag=HA_READ_KEY_EXACT) at
handler/ha_innodb.cc:4443
#9 0x0838f13c in handler::index_read_map (this=0xb281d660, buf=0xb281d7b0
"\371\001", key=0xb2822198 "", keypart_map=0, find_flag=HA_READ_KEY_EXACT) at
handler.h:1390
#10 0x082dd38f in join_read_always_key (tab=0xb28219e8) at sql_select.cc:11691
#11 0x082da39f in sub_select (join=0xb2822468, join_tab=0xb28219e8,
end_of_records=false) at sql_select.cc:11141
#12 0x082da79f in do_select (join=0xb2822468, fields=0xb2834954, table=0x0,
procedure=0x0) at sql_select.cc:10898
#13 0x082f1bef in JOIN::exec (this=0xb2822468) at sql_select.cc:2199
#14 0x082090db in subselect_single_select_engine::exec (this=0xb28358a0) at
item_subselect.cc:1958
<skipped>
)URPWKLVRXWSXW\RXDOUHDG\KDYHDELWRILQIRUPDWLRQ,I\RXZDQWWROHDUQPRUHDERXW
XVLQJ FRUH ILOHV WXUQ WR man core GHEXJJHU GRFXPHQWDWLRQ WKH 0\64/ LQWHUQDOV
PDQXDOWKHERRNV,PHQWLRQHGDQGWKHVRXUFHFRGH
7KLVEXLOGGRHVQRWSULQWEDFNWUDFHLQIRUPDWLRQ,I,¦PLQDVLWXDWLRQZKHUH,FDQ¦WXVH
WKHGHEXJYHUVLRQRI0\64/VHUYHUKRZFDQ,NQRZZKDWLVJRLQJRQ"
+HUHLVWKHSODFHZKHUHWKHJHQHUDOTXHU\ORJFDQKHOSDJDLQ0\64/ZULWHVHDFKTXHU\
WRWKLVORJEHIRUHH[HFXWLQJLW7KHUHIRUHZHFDQILQGLQIRUPDWLRQDERXWDFUDVKLQWKLV
ORJ)LUVWVHWXSORJJLQJ
mysql> SET GLOBAL general_log=1;
Query OK, 0 rows affected (0.00 sec)
mysql> SET GLOBAL log_output='table';
Query OK, 0 rows affected (0.00 sec)
:DLWXQWLOWKHFUDVKKDSSHQVDJDLQDQGWKHQFKHFNWKHFRQWHQWVRIWKHJHQHUDOORJ
mysql> SELECT argument FROM mysql.general_log ORDER BY event_time
desc \G
*************************** 1. row ***************************
argument: Access denied for user 'MySQL_Instance_Manager'@'localhost'
(using password: YES)
*************************** 2. row ***************************
argument: select 1 from `t1` where `c0` <> (SELECT geometrycollectionfromwkb(`c3`)
FROM `t1`)
7KHVHFRQGURZLQWKLVRXWSXWLVWKHTXHU\WKDWFUDVKHGWKHVHUYHU
■ 8VHWKHJHQHUDOTXHU\ORJLIWKHHUURUORJGRHVQRWFRQWDLQHQRXJKLQIRUPDWLRQ
DERXWWKHVHUYHUFUDVK
7KHRQO\VLWXDWLRQLQZKLFKWKLVWHFKQLTXHZRXOGQRWKHOSLVZKHQWKHFUDVKKDSSHQV
ZKLOHWKH0\64/VHUYHULVZULWLQJLQWRWKHJHQHUDOTXHU\ORJRUHYHQEHIRUHLW<RXFDQ
WU\ ORJJLQJ WR D ILOH LQVWHDG RI D WDEOH LI WKLV KDSSHQV 3UR[\ DQG DSSOLFDWLRQVLGH
VROXWLRQVDUHQRWDIIHFWHGE\WKLVLVVXH
Information-Gathering Tools
,QIRUPDWLRQGLUHFWVDOOWURXEOHVKRRWLQJ,WLVYHU\LPSRUWDQWWRNQRZZKDWLVKDSSHQLQJ
LQWKHVHUYHUSURFHVV,KDYHGLVFXVVHGZD\VWRJHWWKLVLQIRUPDWLRQWKURXJKRXWWKLV
ERRNEXWKHUH,ZLOODGGVRPHPLVVLQJGHWDLOVDERXWWKHWRROVGLVFXVVHG
Information Schema
INFORMATION_SCHEMALVDVFKHPDWKDWSURYLGHVLQIRUPDWLRQDERXWGDWDEDVHPHWDGDWD
$OOSHOWTXHULHVDUHQRZPDSSHGWRSELECTVWDWHPHQWVIURPINFORMATION_SCHEMAWDEOHV
7KLVLQIRUPDWLRQFDQEHXVHIXOLIIRUH[DPSOH\RXZDQWWRFKRRVHDVWUDWHJ\IRUDGDLO\
EDFNXS
$QRWKHUH[DPSOHLVWRJHWDOLVWRIWKHIRUHLJQNH\VWKDWUHIHUHQFHDSDUWLFXODUWDEOH7KLV
FDQEHXVHIXOLI\RXJHWHUURU Foreign key constraint is incorrectly formed
ZKHQDFFHVVLQJWKHSDUHQWWDEOHDQGKDYHDEVROXWHO\QRLGHDZKLFKFKLOGUHQLWLVOLQNHG
WR
mysql> SELECT KU.CONSTRAINT_SCHEMA, KU.CONSTRAINT_NAME,
KU.TABLE_SCHEMA, KU.TABLE_NAME FROM TABLE_CONSTRAINTS AS TC JOIN
KEY_COLUMN_USAGE AS KU ON(TC.CONSTRAINT_NAME=KU.CONSTRAINT_NAME AND
TC.CONSTRAINT_SCHEMA=KU.CONSTRAINT_SCHEMA) WHERE CONSTRAINT_TYPE='FOREIGN KEY'
AND REFERENCED_TABLE_SCHEMA='collaborate2011' AND REFERENCED_TABLE_NAME='items'
and REFERENCED_COLUMN_NAME='id'\G
*************************** 1. row ***************************
CONSTRAINT_SCHEMA: collaborate2011
CONSTRAINT_NAME: community_bugs_ibfk_1
TABLE_SCHEMA: collaborate2011
TABLE_NAME: community_bugs
0\64/VXSSRUWVGLIIHUHQWNLQGVRIEDFNXSVDQGZD\VWRGRWKHP:KHQSODQQLQJEDFNXSV\RXQHHGWR
WDNHLQWRDFFRXQWWKHLUHIIHFWRQWDEOHVVXFKDVORFNLQJZKLFKGHSHQGVRQWKHVWRUDJHHQJLQH\RXXVH,
ZLOOWRXFKRQEDFNXSVLQ£%DFNXSV¤RQSDJH
,QWKLVRXWSXW\RXFDQVHHWKDWILYHWDEOHVUHIHUHQFHWKHWDEOHitemsDVDSDUHQW6RLID
TXHU\ WKDW UXQV RQ WKH items WDEOH IDLOV ZLWK HUURU \RX FDQ TXLFNO\ ILQG DOO LWV
FKLOGUHQDQGIL[WKHGDWDFDXVLQJWKHTXHU\WRH[HFXWHZLWKRXWWKDWSUREOHP
1RZWKDW\RXKDYHDQLGHDRIZKDW INFORMATION_SCHEMAWDEOHVDUHZHFDQVZLWFKWR
VSHFLILFV
<RXFDQILQGRXWZKLFKWKUHDGVDUHZDLWLQJRQORFNV
SELECT TRX_ID, TRX_MYSQL_THREAD_ID, TRX_REQUESTED_LOCK_ID, TRX_WAIT_STARTED
FROM INNODB_TRX
WHERE TRX_STATE = 'LOCK WAIT';
RUDUHZDLWLQJRQDORFNORQJHUWKDQDVSHFLILFWLPH
SELECT TRX_ID, TRX_MYSQL_THREAD_ID, TRX_REQUESTED_LOCK_ID, TRX_WAIT_STARTED
FROM INNODB_TRX
WHERE TIMEDIFF(NOW(),TRX_WAIT_STARTED) > '00:30:00';
<RX FDQ DOVR FKHFN WKH WUDQVDFWLRQ LVRODWLRQ OHYHO ZKHWKHU IRUHLJQ NH\ FKHFNV DUH
WXUQHGRQDQGRWKHULQIRUPDWLRQ
7DEOHVZKRVHQDPHVEHJLQZLWKINNODB_CMPVKRZKRZZHOO,QQR'%XVHVFRPSUHVVLRQ
7KXVINNODB_CMPDQGINNODB_CMP_RESETFRQWDLQVWDWXVLQIRUPDWLRQDERXWFRPSUHVVHG
WDEOHV ZKHUHDV INNODB_CMPMEM DQG INNODB_CMPMEM_RESET FRQWDLQ VWDWXV LQIRUPDWLRQ
DERXWFRPSUHVVHGSDJHVLQWKH,QQR'%EXIIHUSRRO
7KHRQO\H[WUDIHDWXUHDGGHGE\WKH _RESETYHUVLRQVRIWKHVHFDOOVLVWKDWWKH\UHVHW
VWDWLVWLFVLQDOO INNODB_CMPWDEOHVWR]HURDIWHUEHLQJTXHULHG7KHUHIRUHLI\RXZDQW
UHSHDWDEOHVWDWLVWLFVTXHU\WKH _RESETWDEOHVDQGLI\RXZDQWVWDWLVWLFVVLQFHVWDUWXS
TXHU\RQO\INNODB_CMPDQGINNODB_CMPMEM
6LQFHYHUVLRQWDEOHVEHJLQQLQJZLWKINNODB_SYSDQGDQINNODB_METRICSWDEOHDOVR
H[LVW7KHINNODB_SYSWDEOHVFRQWDLQLQIRUPDWLRQDERXWKRZ,QQR'%WDEOHVDUHVWRUHG
LQWKHLQWHUQDOGLFWLRQDU\DQGUHSODFHWKH,QQR'%7DEOH0RQLWRU$JUHDWH[SODQDWLRQ
DQGVRPHH[DPSOHVRIWKHLUXVHFDQEHIRXQGDWWKH,QQR'%7HDPEORJ7KHINNODB_MET
RICSWDEOHFRQWDLQVDOOWKHGDWDUHODWHGWRSHUIRUPDQFHDQGUHVRXUFHXVDJHFRXQWHUVLQ
DVLQJOHSODFH7RJHWWKHVHVWDWLVWLFV\RXQHHGWRHQDEOHDPRGXOH,W¦VZRUWKVWXG\LQJ
WKHVHFRXQWHUVEHFDXVHWKH\FDQKHOS\RXDQDO\]HZKDWKDSSHQVLQVLGHWKH,QQR'%
VWRUDJHHQJLQH$JDLQDQH[SODQDWLRQDQGH[DPSOHVDUHDWWKH,QQR'%7HDPEORJ
InnoDB Monitors
:HDOUHDG\GLVFXVVHG,QQR'%0RQLWRUVLQ£6+2:(1*,1(,112'%67$786DQG
,QQR'%0RQLWRUV¤RQSDJH+HUHLVDVXPPDU\RIWKDWVHFWLRQDQGDIHZH[WUDXVHIXO
GHWDLOV
7R HQDEOH ,QQR'% PRQLWRUV FUHDWH ,QQR'% WDEOHV QDPHG innodb_monitor
innodb_lock_monitor innodb_table_monitor DQG innodb_tablespace_monitor 7KHVH
HQDEOHSHULRGLFDOZULWHVWR STDERRRXWSXWIURPVWDQGDUGORFNWDEOHDQGWDEOHVSDFH
PRQLWRUVUHVSHFWLYHO\
$VWKHODVWWH[WLQWKHSUHFHGLQJRXWSXWVKRZVWKLVRXWSXWFRQFHUQVZRUNGRQHE\WKH
PDLQEDFNJURXQGWKUHDG
srv_master_thread loops: 95 1_second, 89 sleeps, 7 10_second, 36 background, 36 flush
7KHQXPEHUVFRXQWDFWLYLW\IURP,QQR'%VWDUWXS7KHILYHQXPEHUVLQWKHSUHFHGLQJ
RXWSXWVKRZUHVSHFWLYHO\WKHQXPEHURILWHUDWLRQVRIWKH£RQFHSHUVHFRQG¤ORRSFDOOV
WRVOHHSE\WKH£RQFHSHUVHFRQG¤ORRSLWHUDWLRQVE\WKH£RQFHSHUVHFRQGV¤ORRS
LWHUDWLRQV RI WKH ORRS QDPHG £EDFNJURXQGBORRS¤ WKDW UXQV EDFNJURXQG RSHUDWLRQV
ZKHQ WKHUH LV FXUUHQWO\ QR XVHU DFWLYLW\ DQG LWHUDWLRQV RI WKH ORRS ERXQFHG E\ WKH
£IOXVKBORRS¤ODEHO$OOWKHVHORRSVDUHUXQE\WKHPDVWHUWKUHDGZKLFKGRHVSXUJHDQG
RWKHUEDFNJURXQGRSHUDWLRQV
srv_master_thread log flush and writes: 116
7KLVVKRZVKRZPDQ\WLPHVWKHORJZDVZULWWHQDQGIOXVKHG
----------
SEMAPHORES
----------
+HUH EHJLQV LQIRUPDWLRQ DERXW LQWHUQDO VHPDSKRUHV :H WRXFKHG RQ WKHVH D ELW LQ
&KDSWHU+LJKQXPEHUVKHUHFDQVKRZVORZGLVN,2RUKLJK,QQR'%FRQWHQWLRQ,Q
WKHODWWHUFDVH\RXFRXOGWU\GHFUHDVLQJ innodb_thread_concurrencyWRVHHZKHWKHULW
FDXVHV DQ LPSURYHPHQW 1RWH WKDW WKHVH QXPEHUV DUH WDNHQ VLQFH WKH PRVW UHFHQW
7KLVEHJLQVDVHFWLRQVKRZLQJJOREDOZDLWDUUD\LQIRUPDWLRQ7KHILUVWQXPEHULVDFRXQW
RIFHOOUHVHUYDWLRQVVLQFHWKHDUUD\ZDVFUHDWHGDQGWKHVHFRQGVKRZVKRZPDQ\WLPHV
DQREMHFWKDVEHHQVLJQDOHG
Mutex spin waits 212, rounds 6360, OS waits 169
7KH SUHFHGLQJ OLQH VKRZV WKH QXPEHU RI VSLQ ZDLWV RQ PXWH[ FDOOV WKH QXPEHU RI
LWHUDWLRQVRIDVSLQORRSDQGWKHQXPEHURIZDLWVIRU26V\VWHPFDOOV
RW-shared spins 171, rounds 5130, OS waits 171
7KLVOLQHVKRZVWKHQXPEHURIVSLQZDLWVRQUZODWFKHVWKDWUHVXOWHGGXULQJVKDUHG
UHDG ORFNV WKH QXPEHU RI LWHUDWLRQV RI D VSLQ ORRS DQG WKH QXPEHU RI ZDLWV IRU
26V\VWHPFDOOV
RW-excl spins 55, rounds 5370, OS waits 151
7KLVOLQHVKRZVWKHQXPEHURIVSLQZDLWVRQUZODWFKHVWKDWUHVXOWHGGXULQJH[FOXVLYH
ZULWH ORFNV WKH QXPEHU RI LWHUDWLRQV RI D VSLQ ORRS DQG WKH QXPEHU RI ZDLWV IRU
26V\VWHPFDOOV
Spin rounds per wait: 30.00 mutex, 30.00 RW-shared, 97.64 RW-excl
7KLV VKRZV IRU HDFK PXWH[ WKH QXPEHU RI LWHUDWLRQV RI D VSLQ ORRS SHU ZDLW IRU
26V\VWHPFDOOV
7KHIROORZLQJLVDQH[DPSOHRIKRZYDOXHVLQWKLVVHFWLRQFKDQJHGXULQJWKHH[HFXWLRQ
RIDQUPDATETXHU\
SEMAPHORES
----------
OS WAIT ARRAY INFO: reservation count 1197, signal count 1145
--Thread 6932 has waited at trx0rec.c line 1253 for 0.00 seconds the semaphore:
X-lock (wait_ex) on RW-latch at 03CD2028 created in file buf0buf.c line 898
a writer (thread id 6932) has reserved it in mode wait exclusive
number of readers 1, waiters flag 0, lock_word: ffffffff
Last time read locked in file buf0flu.c line 1292
Last time write locked in file ..\..\..\mysqlcom-pro-5.5.13\storage\innobase\trx\
trx0rec.c line 1253
Mutex spin waits 1163, rounds 33607, OS waits 659
RW-shared spins 248, rounds 7440, OS waits 248
RW-excl spins 47, rounds 8640, OS waits 280
Spin rounds per wait: 28.90 mutex, 30.00 RW-shared, 183.83 RW-excl
7KHSUHFHGLQJRXWSXWZDVWDNHQZKHQWKHTXHU\VWDUWHGH[HFXWLQJDQGWULHGWRUHVHUYH
DPXWH[
----------
SEMAPHORES
----------
7KLVZDVWDNHQDELWODWHUZKHQWKHPXWH[GHILQHGLQWKHILOHEXIEXIFDWOLQHZDV
FUHDWHG
,QWKHVHPDSKRUHVVHFWLRQ\RXVKRXOGH[DPLQHZKHWKHUYDOXHVEHFRPHODUJHDQGLI
PDQ\RSHUDWLRQVDUHZDLWLQJIRUPXWH[HVIRUDORQJWLPH
------------
TRANSACTIONS
------------
:HWKRURXJKO\GLVFXVVHGWKHWUDQVDFWLRQVVHFWLRQLQ£7UDQVDFWLRQV¤RQSDJHVR
KHUH,¦OORQO\WRXFKRQDIHZWKLQJV
Trx id counter 4602
7KHSUHFHGLQJOLQHLVWKHQXPEHURIWKHQH[WWUDQVDFWLRQ
Purge done for trx's n:o < 4249 undo n:o < 0
7KLVVKRZVWKDWDOOWUDQVDFWLRQVZLWKQXPEHUVOHVVWKDQZHUHSXUJHGIURPWKH
KLVWRU\OLVWZKLFKFRQWDLQVHQWULHVXVHGWRSURYLGHFRQVLVWHQWUHDGVIRUUXQQLQJWUDQV
DFWLRQVWKDWDFFHVVHGWKHVDPHWDEOHVDVWKHWUDQVDFWLRQVLQWKHOLVWEXWEHIRUHWKHLU
PRGLILFDWLRQDWFRPPLWWLPH7KHVHFRQGQXPEHUVKRZVKRZPDQ\UHFRUGVZLWKDQ
XQGRQXPEHUOHVVWKDQZHUHSXUJHGIURPWKHKLVWRU\
History list length 123
7KLVLVWKHOHQJWKRIWKHKLVWRU\OLVW XQGRORJUHFRUGVIRUFRPPLWWHGWUDQVDFWLRQVWKDW
DUHQRWSXUJHG ,IWKLVYDOXHJURZVODUJH\RXFDQH[SHFWDSHUIRUPDQFHGHFUHDVH7KHUH
LVQROLQHDUUHODWLRQEHFDXVHSXUJHSHUIRUPDQFHDOVRGHSHQGVRQWKHWRWDOVL]HRIWKH
WUDQVDFWLRQGDWDWKLVOLVWNHHSVVRLW¦VGLIILFXOWWRJLYHDSUHFLVHH[DPSOHRIDODUJHYDOXH
WKDWZLOOFDXVHDSHUIRUPDQFHGHFUHDVH$ODUJHYDOXHLQWKLVOLVWFDQDOVRPHDQ\RXKDYH
ORQJUXQQLQJWUDQVDFWLRQVWKDWDUHQ¦WFORVHGEHFDXVHHQWULHVIURPKHUHDUHUHPRYHG
RQO\ZKHQQRWUDQVDFWLRQUHIHUVWRDQHQWU\
LIST OF TRANSACTIONS FOR EACH SESSION:
---TRANSACTION 4601, not started, OS thread id 33716224
MySQL thread id 6906, query id 123 localhost root
show engine innodb status
7KHSUHFHGLQJOLQHVVWDUWDOLVWRIDOOFXUUHQWO\UXQQLQJWUDQVDFWLRQV,GHVFULEHGWKLVLQ
GHWDLOLQ£7UDQVDFWLRQV¤RQSDJHVR,ZRQ¦WUHSHDWWKHH[SODQDWLRQKHUH
--------
FILE I/O
--------
7KHVH VKRZ WKH FXUUHQW VWDWXV RI LQWHUQDO ,QQR'% WKUHDGV 7KH WKUHDG QDPH LV LQ
SDUHQWKHVHVRQHDFKOLQH
Pending normal aio reads: 1 [1, 0, 0, 0] , aio writes: 9 [6, 0, 3, 0] ,
ibuf aio reads: 0, log i/o's: 0, sync i/o's: 1
Pending flushes (fsync) log: 0; buffer pool: 0
7KLVLVLQIRUPDWLRQDERXWSHQGLQJRSHUDWLRQVaioLVDQDEEUHYLDWLRQIRUDV\QFKURQRXV
LQSXWRXWSXW
7204 OS file reads, 10112 OS file writes, 711 OS fsyncs
7KHVHVKRZWRWDOVWDWLVWLFVVLQFH,QQR'%VWDUWXS
21.71 reads/s, 16384 avg bytes/read, 78.13 writes/s, 3.00 fsyncs/s
7KHVHVKRZWRWDOVWDWLVWLFVVLQFHWKHPRVWUHFHQWGLVSOD\
-------------------------------------
INSERT BUFFER AND ADAPTIVE HASH INDEX
-------------------------------------
$V WKH QDPH VD\V WKLV VWDUWV D VHFWLRQ DERXW WKH LQVHUW EXIIHU DQG DGDSWLYH KDVK
VWDWLVWLFV8VHWKLVLQIRUPDWLRQWRILQGRXWKRZHIIHFWLYHWKH\DUH
Ibuf: size 1, free list len 0, seg size 2, 1724 merges
7KHVHDUHUHVSHFWLYHO\WKHFXUUHQWVL]HRIWKHLQVHUWEXIIHULQGH[WUHHLQSDJHVWKH
OHQJWKRIWKHIUHHOLVWWKHQXPEHURIDOORFDWHGSDJHVLQWKHILOHVHJPHQWFRQWDLQLQJ
WKHLQVHUWEXIIHUWUHHDQGKHDGHUDQGWKHQXPEHURISDJHVWKDWZHUHPHUJHG
merged operations:
insert 15, delete mark 1709, delete 0
7KLVVKRZVWKHQXPEHURIRSHUDWLRQVPHUJHGIRULQGH[SDJHVGLYLGHGXSE\W\SH
discarded operations:
insert 0, delete mark 0, delete 0
7KLV VKRZV WKH QXPEHU RI RSHUDWLRQV GLVFDUGHG ZLWKRXW PHUJLQJ EHFDXVH WKH
WDEOHVSDFHRULQGH[ZDVGHOHWHG
Hash table size 195193, node heap has 1 buffer(s)
7KLVVKRZVWKHQXPEHURIVXFFHVVIXODGDSWLYHKDVKLQGH[ORRNXSVDQGWKHQXPEHURI
VHDUFKHV GRZQ WKH %WUHH ZKHQ WKH DGDSWLYH KDVK LQGH[ FRXOG QRW EH XVHG 7KHVH
VWDWLVWLFVDUHUHVHWHDFKWLPHWKH\DUHTXHULHG
---
LOG
---
7KLVVWDUWVDVHFWLRQRILQIRUPDWLRQDERXWDFWLYLW\LQWKH,QQR'%ORJ
Log sequence number 2055193301
Log flushed up to 2055180837
Last checkpoint at 2054187263
7KHVH VKRZ WKH FXUUHQW ORJ VHTXHQFH QXPEHU /61 WKH QXPEHU XS WR ZKLFK
WKH /61 ORJILOH ZDV IOXVKHG DQG WKH /61 RI WKH PRVW UHFHQW FKHFNSRLQW 7KLV
LQIRUPDWLRQDOORZV\RXWRFDOFXODWHWKHDJHRIWKHFKHFNSRLQWWKURXJKWKHVXEWUDFWLRQ
Log flushed up to - Last checkpoint atRULQWKLVH[DPSOH<RXQHHGWRPDNH
VXUH WKH FKHFNSRLQW DJHV GR QRW DSSURDFK RI WKH YDOXH innodb_log_file_size
* innodb_log_files_in_groupEHFDXVHDWWKDWUDWLR,QQR'%FRQVLGHUVWKHGLIIHUHQFH
EHWZHHQWKHFXUUHQWORJ/61DQGWKH/61RIWKHROGHUSDJHLQWKHEXIIHUSRROWREHWRR
JUHDWDQGVWDUWVDJJUHVVLYHIOXVKLQJ7KLVFDQOHDGWRDGDWDEDVHIUHH]H
0 pending log writes, 0 pending chkp writes
357 log i/o's done, 1.29 log i/o's/second
7KHVHVKRZWKHQXPEHURISHQGLQJORJZULWHVSHQGLQJFKHFNSRLQWZULWHV,2RSHUD
WLRQV VLQFH ,QQR'% VWDUWHG DQG ,2 RSHUDWLRQV SHU VHFRQG VLQFH WKH PRVW UHFHQW
GLVSOD\
----------------------
BUFFER POOL AND MEMORY
----------------------
7KLVLQGLFDWHVWKHVWDUWRILQIRUPDWLRQDERXW,QQR'%EXIIHUSRRODQGPHPRU\XVDJH
8VHWKLVWRHYDOXDWHKRZHIIHFWLYHO\WKH,QQR'%EXIIHUSRROLVXVHG
Total memory allocated 49938432; in additional pool allocated 0
7KH SUHFHGLQJ OLQH VKRZV WKH WRWDO DPRXQW RI PHPRU\ DOORFDWHG DQG KRZ PXFK LV
DOORFDWHGLQWKHDGGLWLRQDOSRRO
Dictionary memory allocated 23269
7KLVVKRZVWKHVSDFHLQE\WHVRFFXSLHGE\WKHGDWDGLFWLRQDU\WDEOHDQGLQGH[REMHFWV
Buffer pool size 3008
Free buffers 0
7KH,QQR'%EXIIHUSRROVWRUHVREMHFWVLQDOLVWWKDWXVHVWKHOHDVWUHFHQWO\XVHG /58
DOJRULWKPZLWKDPLGSRLQWLQVHUWLRQVWUDWHJ\:KHQDQHZEORFNQHHGVWREHDGGHG
,QQR'%SXWVLWLQWRWKHPLGGOHRIWKHOLVW7KHOHDVWUHFHQWO\XVHGEORFNLVUHPRYHGIURP
WKHOLVWWRIUHHURRPIRUWKHQHZRQH7KHVHVWDWLVWLFVVKRZWKHOHQJWKRIWKHFXUUHQW
,QQR'%EXIIHU/58TXHXHWKHOHQJWKRIWKHROG/58TXHXHDQGWKHQXPEHURISDJHV
WKDWQHHGWREHIOXVKHG
nrÿ- 7KH,QQR'%PLGSRLQWLQVHUWLRQVWUDWHJ\DFWXDOO\PDQDJHVWZROLVWVD
VXEOLVWRIQHZ \RXQJ EORFNVWKDWZHUHDFFHVVHGUHFHQWO\DQGDVXEOLVW
RIROGEORFNVWKDWZHUHQRWDFFHVVHGUHFHQWO\%ORFNVIURPWKHROGEORFNV
VXEOLVWDUHFDQGLGDWHVIRUHYLFWLRQ
Pending reads 2
Pending writes: LRU 0, flush list 10, single page 0
7KHILUVWOLQHVKRZVWKHQXPEHURISHQGLQJUHDGRSHUDWLRQV7KHVHFRQGVKRZVWKH
QXPEHURISDJHVZDLWLQJWREHIOXVKHGWKURXJKWKH/58DOJRULWKPWKHQXPEHURISDJHV
ZDLWLQJWREHIOXVKHGLQWKH BUF_FLUSH_LISTDQGWKHQXPEHURISDJHVZDLWLQJWREH
IOXVKHGLQWKHBUF_FLUSH_SINGLE_PAGEOLVW
Pages made young 3508, not young 0
16.71 youngs/s, 0.00 non-youngs/s
7KHILUVWOLQHVKRZVWKHQXPEHURISDJHVPDGH\RXQJIROORZHGE\WKHQXPEHURIWKRVH
WKDWZHUHQRWPDGH\RXQJEHFDXVHWKH\ZHUHILUVWDFFHVVHGUHFHQWO\7KHVHFRQGOLQH
VKRZVUDWHVSHUVHFRQGVLQFHWKHPRVWUHFHQWGLVSOD\RIWKHVHYDOXHV
Pages read 7191, created 1871, written 9384
21.43 reads/s, 5.57 creates/s, 74.13 writes/s
7KHILUVWOLQHVKRZVWKHQXPEHURIUHDGRSHUDWLRQVWKHQXPEHURISDJHVFUHDWHGLQWKH
SRROEXWQRW\HWUHDGDQGWKHQXPEHURIZULWHRSHUDWLRQV7KHVHFRQGOLQHVKRZVUDWHV
SHUVHFRQGRIWKHVHYDOXHV
No buffer pool page gets since the last printout
,QRQHRIP\WHVWRXWSXWV,KDGQRWDFFHVVHGWKHEXIIHUSRROVLQFHWKHPRVWUHFHQW
GLVSOD\,I,KDGPRUHLQIRUPDWLRQZRXOGEHSULQWHGLQWKHSUHFHGLQJRXWSXW
Buffer pool hit rate 937 / 1000, young-making rate 49 / 1000 not 0 / 1000
7KHUHDUHWZRIOXVKW\SHVIRUWKLVEXIIHUBUF_FLUSH_LISTIOXVKHVYLDWKHIOXVKOLVWRIGLUW\EORFNVZKHUHDV
BUF_FLUSH_SINGLE_PAGEIOXVKHVVLQJOHSDJHV
7KLVLVWKHUHDGDKHDGUDWHDQGWKHQXPEHURIUHDGDKHDGSDJHVHYLFWHGZLWKRXWDFFHVV
7KHPHDVXUHPHQWVDUHDYHUDJHSHUVHFRQGYDOXHVVLQFHWKHPRVWUHFHQWGLVSOD\
LRU len: 3007, unzip_LRU len: 0
I/O sum[3937]:cur[1], unzip sum[0]:cur[0]
7KHILUVWOLQHVKRZVWKHOHQJWKRIWKH/58OLVWDQGWKHXQ]LSB/58OLVW7KHODWWHULVD
VXEVHWRIWKHFRPPRQ/58OLVWKROGLQJDFRPSUHVVHGILOHSDJHDQGWKHFRUUHVSRQGLQJ
XQFRPSUHVVHGSDJHIUDPH7KHVHFRQGOLQHVKRZVWKHQXPEHURI,2RSHUDWLRQVDQG
,2IRUFXUUHQWLQWHUYDOVIRUERWKFRPPRQ/58DQGXQ]LSB/58OLVWV
--------------
ROW OPERATIONS
--------------
7KHURZRSHUDWLRQVVHFWLRQEHJLQVLQIRUPDWLRQDERXWWKHPDLQWKUHDG
1 queries inside InnoDB, 0 queries in queue
1 read views open inside InnoDB
7KHILUVWOLQHVKRZVKRZPDQ\TXHULHVDUHFXUUHQWO\H[HFXWLQJDQGKRZPDQ\DUHLQ
WKH innodb_thread_concurrency TXHXH 7KH VHFRQG OLQH VKRZV WKH QXPEHU RI UHDG
YLHZV
Main thread id 4192, state: flushing buffer pool pages
7KHSUHFHGLQJOLQHVKRZVWKH,'RIWKHPDLQWKUHDGDQGLWVVWDWH,WRRNWKLVH[DPSOH
RQ:LQGRZV2Q/LQX[LWDOVRSULQWVWKHWKUHDGSURFHVVQXPEHU
Number of rows inserted 0, updated 1759, deleted 0, read 1765
0.00 inserts/s, 5.86 updates/s, 0.00 deletes/s, 5.86 reads/s
7KH ILUVW OLQH VKRZV WKH QXPEHU RI URZV LQVHUWHG XSGDWHG GHOHWHG DQG UHDG VLQFH
,QQR'%VWDUWXS7KHVHFRQGOLQHVKRZVUDWHVSHUVHFRQGVLQFHWKHPRVWUHFHQWGLVSOD\
.QRZLQJZKLFKNLQGRITXHULHV\RXSHUIRUPPRVWRIWHQFDQKHOS\RXVHWRSWLRQVIRU
,QQR'%HIIHFWLYHO\
----------------------------
END OF INNODB MONITOR OUTPUT
============================
,GLVFXVVHGWKH,QQR'%/RFN0RQLWRULQ£6+2:(1*,1(,112'%67$786DQG
,QQR'%0RQLWRUV¤RQSDJHLQGHWDLOVR,ZRQ¦WVD\DQ\PRUHDERXWLWKHUH
7ZRPRQLWRUVDUHOHIWWRGLVFXVVWKH,QQR'%7DEOHVSDFH0RQLWRUDQGWKH,QQR'%
7DEOH0RQLWRU
7KLVRXWSXWVKRZVLQIRUPDWLRQDERXWWKHWDEOHIURP([DPSOHDQGDQRWKHUIURP
WKHVDPHGDWDEDVH7KHRXWSXWLVUHDVRQDEO\VHOIH[SODQDWRU\DQGH[SODLQHGLQGHWDLO
LQWKH0\64/5HIHUHQFH0DQXDOVR,ZRQ¦WGHVFULEHWKHILHOGV,MXVWZDQWHGWRSXWLW
KHUHVR\RXDUHDFTXDLQWHGZLWKZKDWLWORRNVOLNH
7KH PHDQLQJ RI WKLV RXWSXW LV FOHDUO\ H[SODLQHG LQ WKH £InnoDB 7DEOHVSDFH 0RQLWRU
2XWSXW¤VHFWLRQRI WKH0\64/5HIHUHQFH0DQXDOVRRQFHDJDLQ,ZRQ¦WERWKHUWR
UHSHDWLW
Performance Schema
,DOUHDG\GLVFXVVHGKRZWRXVH3HUIRUPDQFH6FKHPDWRLQYHVWLJDWHORFNLQJSUREOHPVLQ
£3(5)250$1&(B6&+(0$ 7DEOHV¤ RQ SDJH EXW LW KDV PDQ\ RWKHU
SHUIRUPDQFHUHODWHGXVHV+HUH,¦OOGHVFULEHDVHWRIWDEOHVZKRVHQDPHVEHJLQZLWK
SETUP_DQGWKDWOHW\RXFRQWUROZKLFKHYHQWVDUHPRQLWRUHG+HUHDUHVRPHH[DPSOHV
RIWKHLUFRQWHQWV
mysql> SELECT * FROM setup_consumers LIMIT 2;
+----------------------+---------+
| NAME | ENABLED |
+----------------------+---------+
| events_waits_current | YES |
| events_waits_history | YES |
+----------------------+---------+
2 rows in set (0.00 sec)
6\VWHPYDULDEOHVFRQWUROKRZPDQ\HYHQWVZLOOEHVWRUHGLQKLVWRU\WDEOHV
7DEOHVZKRVHQDPHVHQGZLWK _INSTANCESGRFXPHQWZKLFKREMHFWVDUHEHLQJLQVWUX
PHQWHG7KHW\SHRIWKHREMHFWLVSDUWRIWKHQDPHRIHDFKWDEOH
mysql> SELECT * FROM FILE_INSTANCES WHERE FILE_NAME LIKE '%ITEMS%'
LIMIT 2\G
*************************** 1. row ***************************
FILE_NAME: /users/apple/Applications/mysql-trunk/data/collaborate2011/items_links.ibd
EVENT_NAME: wait/io/file/innodb/innodb_data_file
OPEN_COUNT: 1
*************************** 2. row ***************************
FILE_NAME: /users/apple/Applications/mysql-trunk/data/collaborate2011/items.ibd
EVENT_NAME: wait/io/file/innodb/innodb_data_file
OPEN_COUNT: 1
2 rows in set (0.08 sec)
,XVHGCOUNTKHUHEHFDXVHNQRZLQJKRZPDQ\HYHQWVZHUHH[HFXWHGFDQKHOS\RXILQG
KRZWKH\FRQWULEXWHWR\RXU0\64/ORDG
7DEOHVZKRVHQDPHVHQGLQ_HISTORYVWRUHLQIRUPDWLRQDERXWZKLFKHYHQWVKDSSHQHG
DQGWDEOHVZKRVHQDPHVHQGLQ_SUMMARYFRQWDLQVXPPDULHVRIWKHVHHYHQWVEDVHGRQ
YDULRXVSDUDPHWHUV
1RZ,¦OOJLYHH[DPSOHVRIZD\VWRXVHWKHVHWDEOHV)RULQVWDQFH\RXFDQILQGRXWZKLFK
LQVWDQFHLVXVHGIRUWKHPRVWWLPHRUORFNHGIRUWKHORQJHVWWLPH7KLVFDQVKHGVRPH
OLJKWRQDVSHFWVRISHUIRUPDQFHWKDWFDQEHLPSURYHG
mysql> SELECT COUNT(*), (TIMER_END-TIMER_START) AS TIME,
EVENT_NAME FROM EVENTS_WAITS_HISTORY_LONG GROUP BY EVENT_NAME ORDER BY TIME
DESC;
+----------+---------+-----------------------------------------+
| count(*) | time | EVENT_NAME |
+----------+---------+-----------------------------------------+
| 9967 | 3289104 | wait/io/table/sql/handler |
| 10 | 2530080 | wait/synch/mutex/innodb/log_sys_mutex |
| 5 | 2439720 | wait/synch/mutex/innodb/kernel_mutex |
| 2 | 1481904 | wait/synch/mutex/mysys/THR_LOCK::mutex |
| 2 | 1102392 | wait/synch/rwlock/sql/MDL_lock::rwlock |
| 1 | 1036128 | wait/synch/rwlock/sql/LOCK_grant |
| 2 | 789144 | wait/synch/mutex/mysys/THR_LOCK_lock |
| 2 | 457824 | wait/synch/mutex/sql/LOCK_plugin |
| 5 | 415656 | wait/synch/mutex/sql/THD::LOCK_thd_data |
| 2 | 343368 | wait/synch/mutex/sql/MDL_map::mutex |
| 2 | 325296 | wait/synch/mutex/sql/LOCK_open |
+----------+---------+-----------------------------------------+
11 rows in set (0.26 sec)
IF(TABLE1.FIELD1 = 'R' AND TABLE1.FIELD2 IS NOT NULL AND TABLE1.FIELD3 = '1' AND
TABLE2.FIELD4 = TABLE2.FIELD5 AND TABLE3.FIELD6 = TABLE4.FIELD6, TABLE3.FIELD8,
TABLE4.FIELD8) AS ALIAS2,
SUM(
IF (
(SELECT TABLE5.FIELD7 FROM TABLE4 ALIAS3, TABLE2 ALIAS4, TABLE4 ALIAS5 WHERE
TABLE5.FIELD5 = ALIAS4.FIELD4 AND ALIAS4.FIELD5 = ALIAS5.FIELD5 AND
ALIAS5.FIELD7 = FIELD9 AND TABLE5.FIELD6 = TABLE6.FIELD7 LIMIT 1 ) IS NULL, 0,
TABLE7.FIELD10/TABLE7.FIELD11)
) AS ALIAS11
FROM TABLE4 ,TABLE4 ALIAS6, TABLE8 , TABLE4 ALIAS7, TABLE9 , TABLE7 , TABLE2 ,
TABLE1 FORCE INDEX(FIELD12)
LEFT JOIN TABLE1 ALIAS8 ON TABLE1.FIELD13 = TABLE10.FIELD13
LEFT JOIN TABLE1 ALIAS9 ON ALIAS9.FIELD13 = TABLE10.FIELD2
LEFT JOIN TABLE4 ALIAS10 ON ALIAS10.DFIELD5 = TABLE3.FIELD5
7KLVH[DPSOHLVEDVHGRQ&RPPXQLW\EXJ
GROUP BY A4;
:LWKWKLVHTXLYDOHQWLWLVYHU\HDV\WRWHVWDSUREOHP,QWKHIROORZLQJVHFWLRQ,GHVFULEH
KRZ,FUHDWHVXFKVPDOOWHVWFDVHVWKHQUHWXUQWRXVHFDVHV
Testing Methods
&UHDWLQJDPLQLPDOWHVWFDVHFDQFRQILUPWKHSUREOHPEXW\RXFDQGRHYHQPRUHZLWK
LW7KHPLQLPDOWHVWFDVHPDNHVLWHDV\WRSLQSRLQWWKHUHDVRQIRUWKHSUREOHP:KHQ
\RXORRNDWDJOINWKDWFRQQHFWVVHYHUDOWDEOHVZLWKFRPSOLFDWHGWHEREFRQGLWLRQVLW¦V
KDUGWRVD\ZKDWH[DFWO\LVZURQJ%XWUHGXFLQJWKHTXHU\WRDFRXSOHRIWDEOHVQDUURZV
:K\ GR ZH KDYH HLJKW URZV ZKHUH t1_id=1" 2QO\ WKUHH URZV ZLWK t1_id = 1 ZHUH
LQVHUWHG
mysql> INSERT INTO `t2` VALUES (1,1),(2,1),(3,1),
(4,2),(5,2),(6,2),(7,3),(8,3);
Query OK, 8 rows affected (0.01 sec)
Records: 8 Duplicates: 0 Warnings: 0
7KHSUREOHPFDQEHFOHDUO\VHHQLIZHUHPRYHWKHGROUP BYFODXVH
mysql> SELECT t1.id AS t1_id, t2.id FROM t1 LEFT JOIN t2 ON t1.id =
t2.t1_id WHERE t1.id = 1;
7KLVOLVWLQJVKRZVWKDWWKHGDWDLVFRUUHFWDQGWKDWGROUP BYFDXVHVWKHSUREOHP
$WILUVWJODQFHWKHRQO\ZD\WRVROYHWKHSUREOHPLVWREUHDNWKHTXHU\XSLQWRVHYHUDO
TXHULHV%XWWKHUHPD\EHDQRWKHUZRUNDURXQGWKDWZHFDQWU\NQRZLQJVRPHWKLQJ
DERXWWKHRSWLPL]HU7KHTXHU\H[HFXWLRQSODQFDQFKDQJHLI GROUP BYXVHVDQLQGH[
VROHW¦VWU\DGGLQJRQH
mysql> ALTER TABLE t2 ADD INDEX(t1_id);
Query OK, 8 rows affected (0.05 sec)
Records: 8 Duplicates: 0 Warnings: 0
1RZWKHSUREOHPLVVROYHG
mysql> SELECT t1.id AS t1_id, COUNT(DISTINCT t2.id) AS cnt FROM t1 LEFT JOIN t2
ON t1.id = t2.t1_id WHERE t1.id = 1 GROUP BY t1.id WITH ROLLUP LIMIT 100;
+-------+-----+
| t1_id | cnt |
+-------+-----+
| 1 | 3 |
| NULL | 3 |
+-------+-----+
2 rows in set (0.02 sec)
6RSOD\DURXQGZLWKWKH64/WRVHHZKHWKHU\RXFDQDYRLGWKHEXJ7KHH[DPSOH,
VKRZHGGRHVQ¦WKDYHDQ\JHQHUDODSSOLFDWLRQEXWLWVKRZVWKDWKHOSFDQFRPHIURP
VXEWOHFKDQJHV,WDOVRVKRZVDJDLQWKHDGYDQWDJHVRIXVLQJDVDQGER[
Benchmarking Tools
%HQFKPDUNLQJWRROVWHVWDQDSSOLFDWLRQ¦VVSHHG0\64/EHQFKPDUNLQJWRROVXVXDOO\
WHVW0\64/LQVWDOODWLRQVZKLFKLVQRWWKHVDPHDVWHVWLQJDQDSSOLFDWLRQEXWWKH\FDQ
VWLOOEHXVHIXOIRUWHVWLQJDSDUWLFXODUVHWRIRSWLRQV,IDEHQFKPDUNLQJWRRODOORZV\RX
WRXVHFXVWRPTXHULHVZULWWHQVSHFLDOO\IRU\RXUDSSOLFDWLRQ\RXDOVRFDQUXQWHVWVRQ
\RXURZQGDWDVHW
mysqlslap
P\VTOVODSLVDORDGHPXODWLRQFOLHQWWKDWFRPHVZLWKWKH0\64/GLVWULEXWLRQ,WPDNHV
LWHDV\WRWHVWFRQFXUUHQWORDGVRQVLPLODUTXHULHV5XQLWZLWKDQ64/VFULSWHLWKHU
IURPDILOHRUVSHFLILHGDVDQDUJXPHQW
$ mysqlslap --socket=/tmp/mysql51.sock --user=root --delimiter=";" \
--create-schema=mstest --create="CREATE TABLE mstest(id INT NOT NULL \
AUTO_INCREMENT PRIMARY KEY, f1 VARCHAR(255)) ENGINE=InnoDB" --query="INSERT INTO \
mstest(f1) VALUES(MD5(RAND())); SELECT f1 FROM mstest;" --concurrency=10 \
--iterations=1000
Benchmark
Average number of seconds to run all queries: 0.039 seconds
Minimum number of seconds to run all queries: 0.025 seconds
Maximum number of seconds to run all queries: 0.173 seconds
Number of clients running queries: 10
Average number of queries per client: 2
SysBench
7KLV EHQFKPDUN XWLOLW\ DYDLODEOH IURP /DXQFKSDG PHDVXUHV WKH SHUIRUPDQFH RI D
ZKROHV\VWHPWHVWLQJWKH&38ILOH,226VFKHGXOHU326,;WKUHDGVSHUIRUPDQFH
PHPRU\DOORFDWLRQWUDQVIHUVSHHGDQGGDWDEDVHVHUYHUSHUIRUPDQFH:HDUHLQWHUHVWHG
LQWKHODVWIHDWXUHLQWKHOLVW
,QHDUO\YHUVLRQV\RXFDQWHVWGDWDEDVHVHUYHURSWLRQVXVLQJRQO\WKHSUHGHILQHGRQOLQH
WUDQVDFWLRQSURFHVVLQJ 2/73 WHVWZKLFKFUHDWHVDWDEOHDQGUXQVDFRQFXUUHQF\WHVW
RQLW
$sysbench --test=./sysbench/tests/db/oltp.lua
--mysql-table-engine=innodb --oltp-table-size=1000000
--mysql-socket=/tmp/mysql60.sock --mysql-user=root prepare
sysbench 0.5: multi-threaded system evaluation benchmark
$sysbench --test=./sysbench/tests/db/oltp.lua
--mysql-table-engine=innodb --oltp-table-size=1000000
--mysql-socket=/tmp/mysql60.sock --mysql-user=root --num-threads=16
--max-requests=100000 run
sysbench 0.5: multi-threaded system evaluation benchmark
Threads started!
General statistics:
total time: 1967.0882s
total number of events: 100011
total time taken by event execution: 31304.4927s
response time:
min: 18.10ms
avg: 313.01ms
max: 13852.37ms
approx. 95 percentile: 595.43ms
Threads fairness:
events (avg/stddev): 6250.6875/22.15
execution time (avg/stddev): 1956.5308/0.65
7KHSUHFHGLQJRXWSXWZDVWDNHQXVLQJWKHODWHVWYHUVLRQRI0\64/ZKLFKDOORZV\RX
WRSRLQWV\VEHQFKWRDFXVWRPWHVWEXWWKLVSUHGHILQHGWHVWEHKDYHVVLPLODUO\WRWKH
SUHGHILQHGWHVWXVHGLQHDUOLHUYHUVLRQV
6LQFHYHUVLRQ\RXFDQZULWH\RXURZQWHVWVXVLQJWKH/XDSURJUDPPLQJODQJXDJH
7KHHDVLHVWZD\WRVWDUWLVWRWDNHROWSOXDDVDWHPSODWH7KHIROORZLQJVLPSOHVFULSW
VKRZVZKLFKIXQFWLRQV\RXPXVWGHILQH
$cat sysbench.lua
function prepare()
local i
db_connect()
function cleanup()
print("Dropping table 'test'")
db_query("DROP TABLE test")
end
function event(thread_id)
db_query("SELECT * FROM test WHERE f1 = " .. sb_rand(1, 1000))
end
,QUHDOEHQFKPDUNV\RXFDQFRGHPRUHFRPSOLFDWHGVFHQDULRV
7KHUHVXOWRIWKHSUHFHGLQJWHVWORRNVVLPLODUWRWKHGHIDXOW2/73WHVW
$sysbench
--test=/Users/apple/Documents/web_project/MySQL/examples/sysbench.lua
--mysql-table-engine=innodb
--mysql-socket=/tmp/mysql60.sock --mysql-user=root --num-threads=16
--max-requests=100000 prepare
sysbench 0.5: multi-threaded system evaluation benchmark
$sysbench
--test=/Users/apple/Documents/web_project/MySQL/examples/sysbench.lua
--mysql-table-engine=innodb
--mysql-socket=/tmp/mysql60.sock --mysql-user=root --num-threads=16
--max-requests=100000 run
sysbench 0.5: multi-threaded system evaluation benchmark
Threads started!
General statistics:
total time: 2697.2491s
total number of events: 100001
total time taken by event execution: 43139.9169s
response time:
min: 7.54ms
Threads fairness:
events (avg/stddev): 6250.0625/27.35
execution time (avg/stddev): 2696.2448/0.57
Gypsy
*\SV\DOVRDYDLODEOHIURP/DXQFKSDGLVDWRROZULWWHQIRUORDGWHVWLQJE\0\64/
6XSSRUW(QJLQHHU6KDQH%HVWHU:HDFWLYHO\XVHWKLVWRROZKHQWHVWLQJFRQFXUUHQWORDGV
,W¦VQRWDEHQFKPDUNLQJWRROEXWDQDLGWRILQGLQJORFNLQJLVVXHVRURWKHUSUREOHPV
ZLWKFRQFXUUHQF\
*\SV\LVVFULSWDEOH,WVV\QWD[IRUTXHU\ILOHVLVHDV\
i|1|DROP TABLE IF EXISTS t1|
i|1|CREATE TABLE t1( id INT, f1 INT, PRIMARY KEY(id)) ENGINE=InnoDB|
i|1|SET GLOBAL SQL_MODE='strict_trans_tables'|
n|100|INSERT INTO t1 SET id = ?, f1 = 1 ON DUPLICATE KEY UPDATE f1 = f1 + 1|tinyint
5RZVPDUNHGZLWKiDUHSDUWRIWKHLQLWLDOVHWXSDQGDUHUXQRQO\RQFH5RZVPDUNHG
ZLWKnGHQRWHTXHULHVWKDWHPXODWHWKHORDG<RXFDQUXQ*\SV\DVIROORZV
$gypsy --host=127.0.0.1:3351 --user=root --password= --database=test
--queryfile=bug42644.query --threads=2 --duration=100
[INFO] 04:08:15 [0290] 2684407808 - 32-bit version of Gypsy
[INFO] 04:08:15 [0291] 2684407808 - sizeof(long long int) = 8
[INFO] 04:08:15 [0300] 2684407808 - using 1 hosts
[WARN] 04:08:15 [2950] 2684407808 - setting statement on line 1 to non-prepared by
default
[WARN] 04:08:15 [2950] 2684407808 - setting statement on line 2 to non-prepared by
default
[WARN] 04:08:15 [2950] 2684407808 - setting statement on line 3 to non-prepared by
default
[INFO] 04:08:15 [0362] 2684407808 - client library version: 5.0.92
[ALWAYS] 04:08:15 [0376] 2684407808 - server 00: '5.1.60-debug', host:
'127.0.0.1 via TCP/IP', SSL: 'NULL', protocol: 10, charset: latin1
[ALWAYS] 04:08:15 [0414] 2684407808 - thrd = 2
[INFO] 04:08:15 [0459] 2684407808 - read 4 valid queries from query file
[INFO] 04:08:15 [0556] 2684407808 - spawning data generation thread
[INFO] 04:08:15 [0693] 25182208 - creating new char data for the first time
[INFO] 04:08:15 [0711] 25182208 - refreshing char data
[INFO] 04:08:15 [0718] 25182208 - char data has been generated, char_increment=2
[INFO] 04:08:15 [0603] 2684407808 - now running for 100 seconds.
[INFO] 04:08:15 [0609] 2684407808 - running initialization queries
[INFO] 04:08:15 [1443] 25183232 - thread 0 connecting to host 0
[INFO] 04:08:15 [1456] 25183232 - thread 0 has 1 alive hosts connected
[WARN] 04:08:16 [2182] 25183232 - thread[00] didn't complete entire query
file. Might need longer --duration=
[INFO] 04:08:16 [0636] 2684407808 - about to create all 'populate' scripts from I_S
[INFO] 04:08:16 [0691] 2684407808 - spawning database stats thread
[ALWAYS] 04:08:16 [0708] 2684407808 - spawning 2 new thread(s)
CREATE TABLE t1(f1 int NOT NULL AUTO_INCREMENT PRIMARY KEY, f2 VARCHAR(255))
ENGINE=InnoDB;
INSERT INTO t1 (f2) VALUES('test');
SELECT f1, f2 FROM t1;
DROP TABLE t1;
==============================================================================
7KHFRQWHQWVRIWKHUHVXOWILOHDUHQRZ
$cat r/book.result
CREATE TABLE t1(f1 INT NOT NULL AUTO_INCREMENT PRIMARY KEY, f2 VARCHAR(255))
ENGINE=InnoDB;
INSERT INTO t1 (f2) VALUES('test');
SELECT f1, f2 FROM t1;
f1 f2
1 test
DROP TABLE t1;
:KHQ\RXUXQWKHVDPHWHVWZLWKRXWWKH --recordRSWLRQ075FRPSDUHVWKHDFWXDO
UHVXOWZLWKWKHFRQWHQWVRIWKHUHVXOWILOHDQGIDLOVLIWKH\DUHGLIIHUHQW<RXFDQPRYH
WKHWHVWDQGUHVXOWILOHVWRDQRWKHUVHUYHUWRWHVWZKHWKHUH[HFXWLRQKDVFKDQJHG
075DOORZV\RXWRFUHDWHVXLWHVIRUVHSDUDWHSURGXFWVVWDUWLQJZLWKYHUVLRQZKLFK
FRPHVZLWK0\64/VHUYHUDQGKLJKHU6R\RXFDQFUHDWH\RXURZQWHVWLQJVXLWHV
OLNHWKHIROORZLQJ
==============================================================================
2XWVLGHRI0\64/GHYHORSPHQWWKLVWRROFDQEHXVHIXOWRDXWRPDWLFDOO\FKHFNKRZ
LQVWDOODWLRQVZLWKGLIIHUHQWRSWLRQVRU0\64/YHUVLRQVUXQDFXVWRPTXHU\
<RXFDQILQGPRUHLQIRUPDWLRQLQWKHWKH075XVHUJXLGH
Maintenance Tools
7KHWRROVLQWKLVVHFWLRQDUHXVHIXOLQDGD\WRGD\'%$MREQRWMXVWZKHQWURXEOH
RFFXUV,I\RXXVHWKHPUHJXODUO\\RXFDQDYRLGPRVWWURXEOHVRPHVLWXDWLRQV7KDW¦V
ZK\,¦PGHVFULELQJWKHPKHUHRQHRIP\UHDVRQVIRUZULWLQJWKLVERRNZDVWRKHOS\RX
KDYHWURXEOHIUHH0\64/LQVWDOODWLRQV
7KHVHWRROVKDYHJUHDWXVHUJXLGHVDVZHOODVUHIHUHQFHPDQXDOVVR,¦OOMXVWLQWURGXFH
WKHPZLWKRXWGHWDLOV
7RROVIURPWKH0\64/GLVWULEXWLRQ
0\64/FRPHVZLWKVHWRIWRROVWKDW\RXFDQILQGLQWKHELQGLUHFWRU\RIWKH0\64/
LQVWDOODWLRQ%HFRPHDFTXDLQWHGZLWKWKHP7KH\DUHGHVFULEHGLQWKHVHFWLRQRI
WKH0\64/5HIHUHQFH0DQXDODERXW0\64/SURJUDPV
7KLVFKDSWHUVXPPDUL]HVVRPHEHVWSUDFWLFHVWKDWFDQKHOS\RXWURXEOHVKRRW0\64/
HIIHFWLYHO\DQGVDIHO\7KH\DUHQ¦WWURXEOHVKRRWLQJPHWKRGVRUWRROVLQWKHPVHOYHVEXW
WKH\FDQGUDPDWLFDOO\DIIHFWWURXEOHVKRRWLQJ7KHVHSUDFWLFHVZHUHGLVFXVVHGWKURXJK
RXWWKHERRNEXWDUHFRPELQHGKHUHWRHPSKDVL]HWKHLUYDOXH
Backups
0DQ\RIWKHSURFHGXUHVLQWKLVERRNFDQPDNHFKDQJHVWRGDWDEDVHVZKLFKLVZK\,¦YH
HQFRXUDJHG\RXWRUXQWHVWVLQDVDQGER[<RXFDQFUHDWH\RXURZQGLVDVWHUKRZHYHU
E\PDNLQJVXFKFKDQJHVLQDSURGXFWLRQGDWDEDVH%DFNXSVFDQVDYH\RXLQVXFKFDVHV
$EDFNXSLVDVWDWHWRZKLFK\RXFDQUHWXUQDWDQ\VWHS,IVRPHWKLQJLVGDPDJHGGXULQJ
WHVWVRUDQDSSOLFDWLRQIDLOXUH\RXFDQUHVWRUHDOOEXWWKHPRVWUHFHQWFKDQJHVWRGDWD
%DFNXSVDUHDOVRXVHIXOEHFDXVH\RXFDQORDGGDWDIURPWKHPLQWRDVDQGER[IRUWHVWLQJ
,I\RXPDNHDEDFNXSDWDFRQYHQLHQWWLPH\RXGRQ¦WKDYHWRZDLWXQWLOORDGLVORZRQ
WKH PDLQ VHUYHU DQG \RX FDQ WDNH D QHZ VQDSVKRW RI D UXQQLQJ LQVWDQFH :LWKRXW
LQWHUUXSWLQJQRUPDORSHUDWLRQ\RXFDQMXVWFRS\WKHEDFNXSWRWKHVDQGER[DQGVWDUW
WHVWLQJ
2IFRXUVHDEDFNXSLVXVHIXORQO\LILW¦VUHFHQW$EDFNXSPDGHDPRQWKDJRRIDQ
DSSOLFDWLRQZLWKH[WHQVLYHZULWHRSHUDWLRQVZRQ¦WKHOSPXFK6RLW¦VDJRRGLGHDWR
PDNHSHULRGLFDOIXOOEDFNXSVDQGIUHTXHQWLQFUHPHQWDOEDFNXSV,W¦VDOVRJRRGWRKDYH
WKHELQDU\ORJWXUQHGRQVRWKDW\RXKDYHDOOWKHFKDQJHVPDGHDWWKHWLPHDSUREOHP
RFFXUUHG
7KHERRNV+LJK3HUIRUPDQFH0\64/E\%DURQ6FKZDUW]HWDODQG0\64/+LJK$YDLO
DELOLW\E\&KDUOHV%HOOHWDO ERWKSXEOLVKHGE\2¦5HLOO\ GHVFULEHKRZWRPDNHEDFNXSV
LQFOXGLQJGHVFULSWLRQVRIZKHQZK\DQGKRZDQGWKHDYDLODEOHWRROVWRGRWKHEDFN
XSV7KHIROORZLQJVXEVHFWLRQVMXVWJLYH\RXVRPHFRQVLGHUDWLRQVWRNHHSLQPLQGZKHQ
SODQQLQJEDFNXSV
221
Planning Backups
:KHQSODQQLQJEDFNXSVWKLQNDERXWKRZWRGRLWVRWKDW\RX¦OOEHDEOHWRGRDIXOO
UHVWRUHDWDQ\WLPH)RULQVWDQFH\RXVKRXOGQ¦WUHO\RQMXVWDUHSOLFDWLRQVODYHDV\RXU
EDFNXS7KHVODYHFDQIDOOIDUEHKLQGLWVPDVWHUDQGWKXVKDYHRXWGDWHGGDWD7KHVODYH
FDQ DOVR FRQWDLQ GLIIHUHQW GDWD IURP WKH PDVWHU SDUWLFXODUO\ ZLWK VWDWHPHQWEDVHG
UHSOLFDWLRQ:HGHVFULEHGUHDVRQVZK\WKLVKDSSHQVDW&KDSWHU7KHUHIRUHGRQ¦WUHO\
RQDVODYHDV\RXURQO\EDFNXSVROXWLRQ
,SUHIHUWRGRZHHNO\IXOOEDFNXSVDORQJZLWKGDLO\LQFUHPHQWDOEDFNXSVDQGWRNHHS
DOOELQDU\ORJV2IFRXUVH\RXFDQFKDQJHWKHVFKHGXOHEDVHGRQWKHDFWXDOZULWHORDG
,MXVWGRQ¦WUHFRPPHQGOHDYLQJDUHDOO\ODUJHLQWHUYDOEHWZHHQEDFNXSVEHFDXVHLQVXFK
D FDVH \RX ZRXOG EH DW ULVN RI ORVLQJ D ORW RI GDWD GXH WR D KDUGZDUH IDLOXUH 3ODQ
UHDVRQDEO\
:KHQHYHU\RXUHVWRUHGDWDUHVWRUHIURPWKHODWHVWIXOOEDFNXSILUVWWKHQDSSO\WKH
LQFUHPHQWDOEDFNXSVPDGHDIWHUWKHIXOOEDFNXSLQRUGHULIWKH\H[LVWDQGILQDOO\ORDG
DQ\UHPDLQLQJFKDQJHVIURPWKHELQDU\ORJV
Types of Backups
7KLVVHFWLRQGLVFXVVHVIXOODQGLQFUHPHQWDOEDFNXSV7KHWKLUGHOHPHQWRIEDFNLQJXS
VDYLQJELQDU\ORJVLVVLPSO\WKLVGRQ¦WGHOHWHWKHORJVWKDWZHUHFUHDWHGDIWHUWKHPRVW
UHFHQW EDFNXS DQG FRS\ WKHP WR D VDIH SODFH SHULRGLFDOO\ LI WKH WLPH ODJ EHWZHHQ
EDFNXSVLVODUJH
%DFNXSVFDQEHJURXSHGDORQJVHYHUDOGLIIHUHQWGLPHQVLRQV
%\IRUPDW
/RJLFDO
6DYHVDGXPSRIVWUXFWXUHDQGGDWD$OWKRXJKWKLVNLQGRIEDFNXSLVVORZLW
FDQEHYHU\XVHIXOEHFDXVHLWVILOHVFDQEHUHDGE\KXPDQVDQGHGLWHGPDQXDOO\
3K\VLFDO
6DYHV WKH ELQDU\ ILOHV ZKLFK LV XVXDOO\ IDVW 7KLV NLQG RI EDFNXS LV YHU\
LPSRUWDQWLI\RXFDQQRWUHSHDWDSUREOHPEHFDXVHWKHWDEOHLVVRPHKRZFRU
UXSWHG,QVXFKFDVHVLWFDQPDNHVHQVHWRPDNHELQDU\FRS\RIDVLQJOHWDEOH
DQGPRYHLWWRWKHWHVWVHUYHU
%\LQWHUDFWLRQZLWKWKH0\64/VHUYHU
2QOLQH
7DNHQZKHQWKH0\64/VHUYHULVUXQQLQJ
2IIOLQH
7DNHQZKHQWKH0\64/VHUYHULVVWRSSHG
Tools
,ZRQ¦WGHVFULEHDOOWKHEDFNXSWRROVDYDLODEOHIRU0\64/EXWLQVWHDGGHVFULEHMXVWD
IHZWKDWLOOXVWUDWHWKHW\SHVRIEDFNXSVVKRZQLQWKHSUHYLRXVVHFWLRQ<RXDUHIUHHWR
XVH\RXUIDYRULWHUHJDUGOHVVRIZKHWKHULW¦VRQWKLVOLVW
P\VTOGXPS
&RPHVZLWK0\64/GLVWULEXWLRQVDQGPDNHVORJLFDOEDFNXSV
0\64/(QWHUSULVH%DFNXS 0(%
$VHSDUDWHSURGXFWDYDLODEOHIRU(QWHUSULVHFXVWRPHUV,WFDQFUHDWHKRWEDFNXSV
RI,QQR'%WDEOHVZDUPEDFNXSVRIRWKHUVWRUDJHHQJLQHVDQGFROGEDFNXSV
3HUFRQD;WUD%DFNXS
$Q RSHQ VRXUFH SURGXFW ZLWK IXQFWLRQDOLW\ VLPLODU WR 0(% ,W FDQ FUHDWH KRW
EDFNXSVRI;WUD'%DQG,QQR'%WDEOHVDQGZDUPEDFNXSVRIRWKHUVWRUDJHHQJLQHV
Backups | 223
cp
7KHEDVLF8QL[VKHOOFRPPDQGWKDWFRSLHVILOHV<RXFDQXVHLWWRFUHDWHFROGRIIOLQH
EDFNXSV
)LOHV\VWHPVQDSVKRWWRROVVXFKDV/90
&UHDWHVDVQDSVKRWRIILOHV\VWHP6KRXOGEHXVHGZKHQWKH0\64/VHUYHULVHLWKHU
VWRSSHGRUSUHYHQWHGIURPZULWLQJWRLWVRZQILOHV
7DEOHPDWFKHVYDULRXVW\SHVRIEDFNXSVZLWKWKHWRROVWKDWSURYLGHWKHP
7DEOH%DFNXSW\SHVVXSSRUWHGE\WKHWRROVGLVFXVVHGLQWKLVVHFWLRQ
Backup type/tool mysqldump MEB XtraBackup cp LVM
LOGICAL YES NO NO NO NO
PHYSICAL NO YES YES YES YES
ONLINE YES YES YES NO NO
OFFLINE NO YES NO YES YES
COLD NO YES NO YES YES
WARM YES YES YES NO NO
HOT NO YES YES NO NO
FULL YES YES YES YES YES
INCREMENTAL NO YES YES NO NO
PARTIAL YES YES YES YES NO
8VLQJWKLVWDEOH\RXFDQGHWHUPLQHZKLFKWRROLVPRVWVXLWHGWR\RXUQHHGV,I\RX
GHFLGHWRUXQDVROXWLRQWKDWGRHVQRWLQFOXGHLQFUHPHQWDOEDFNXSVGRLQFUHPHQWDO
EDFNXSVWKURXJKELQDU\ORJV)RUPRUHGHWDLODQGEHVWSUDFWLFHVUHODWHGWREDFNXSV
FRQVXOWWKHERRNVPHQWLRQHGHDUOLHULQ£%DFNXSV¤RQSDJH
Testing
$IWHU\RXGHYHORSDK\SRWKHVLVDERXWZKDWLVJRLQJRQDQGKRZWRVROYH\RXUSUREOHP
WHVWWKHK\SRWKHVLVDQGFRQVLGHU\RXUUHVXOWV
,QP\MRE,PHHWXVHUVZKRDUHDIUDLGRIWHVWLQJ7KHUHDUHWZRPDLQUHDVRQVWKDWSHRSOH
UHMHFWLWRYHUFRQILGHQFH WKHXVHUWKLQNVWKDWDFRUUHFWJXHVVGRHVQRWUHTXLUHWHVWLQJ
DQGGLIILGHQFH WKHXVHULVDIUDLGRIEUHDNLQJVRPHWKLQJHOVH
%XWHYHQYHU\H[SHULHQFHGXVHUVPDNHPLVWDNHVVRLWLVULVN\WRMXVWUHO\RQDJXHVV
$OZD\VFKHFNWKHUHVXOWRIDQ\FKDQJH\RXPDNH:KDWLVTXLFNO\QRWLFHGFDQEHTXLFNO\
IL[HG
'RQ¦WEHVK\-XVWFRQVLGHUWKLVLI\RXQHHGWRWURXEOHVKRRWVRPHWKLQJ\RXDUHDOUHDG\
H[SHULHQFLQJDSUREOHP,IRQHRUDQRWKHUWHVWPDNHVWKHSUREOHPZRUVHDWOHDVWWKH
WHVW VSDUHV \RX IURP PDNLQJ D PDMRU FKDQJH WKDW ZRXOG WDNH HYHQ ORQJHU WR IL[ $
PLVWDNHPDGHGXULQJDWHVWFDQEHUROOHGEDFNLQDIHZVHFRQGV
)XUWKHUGLVFRYHULQJWKDWDJXHVVLVZURQJLVYDOXDEOHEHFDXVH\RXQDUURZWKHVHDUFK
DUHD)HZHURSWLRQVDUHOHIWVRWKHUH¦VPRUHFKDQFHWKDW\RXUQH[WWHVWZLOOSURYHFRUUHFW
,I\RXGRQ¦WZDQWWRWDNHDQ\ULVNRIKDUPLQJ\RXUSURGXFWLRQVHWXSWHVWLQDVDQGER[
,UHFRPPHQGWKLVHVSHFLDOO\ZKHQDWHVWFDQFKDQJHGDWDEXWLW¦VDOVRXVHIXOZKHQ\RX
VLPSO\QHHGWRPRGLI\VRPHFRQILJXUDWLRQRSWLRQ-XVWFUHDWHDUHSHDWDEOHWHVWFDVHDQG
UXQLWLQWKHVDQGER[
$QGGRQ¦WEHOD]\/D]LQHVVFDQEHDJRRGWKLQJZKHQ\RXDUHILQGLQJWKHEHVWDQG
VKRUWHVWZD\WRVROYHDSUREOHPEXWLWFDQSOD\DEDGMRNHRQ\RXZKHQWHVWLQJ
%HLQJWRROD]\WRFRS\WKHRULJLQDOWDEOHVWRDVDQGER[FDQOHDGWRPDQ\LQHIIHFWLYH
DWWHPSWVWRUHSURGXFH\RXUSUREOHPZKHQLWFDQQRWEHUHSURGXFHGZLWKWKHLQDGHTXDWH
Testing | 225
WHVWGDWD(YHQZRUVH\RXPD\HQGXSLPSOHPHQWLQJWKHZURQJVROXWLRQ6RLIWKH
SUREOHPLVQRWUHSURGXFLEOHZLWKDVPDOOWHVWGDWDVHWMXVWFRS\WKHIXOOWDEOHVWRWKH
VDQGER[DQGH[SHULPHQWRQWKHPWKHUH
Prevention
7KHEHVWDSSURDFKWRWURXEOHVKRRWLQJLVWRSUHYHQWWKHVLWXDWLRQLQWKHILUVWSODFH7KH
RQO\ZD\WRHOLPLQDWHDOOSRVVLEOHSUREOHPVLVWRFRPSOHWHO\EORFNDFFHVVWRWKH0\64/
VHUYHU ZKLFK PHDQV LW ZRXOGQ¦W GR DQ\ XVHIXO ZRUN 6R ZH FDQ VSHDN RQO\ DERXW
FRPSURPLVHV
Privileges
2QHLPSRUWDQWDVSHFWRISUHYHQWLRQLVSULYLOHJHV$OWKRXJKPDQ\WHVWFDVHVLQWKLVERRN
KDYHXVHGWKHURRWXVHUWKLVLVDFFHSWDEOHRQO\LQWHVWHQYLURQPHQWVZKHUH\RXFDQ¦W
KDUPDQ\WKLQJ:KHQUXQQLQJRQDSURGXFWLRQVHUYHUHDFKSHUVRQVKRXOGKDYHDVIHZ
SULYLOHJHVDVSRVVLEOH,GHDOO\DXVHUZRXOGKDYHRQO\WKHSULYLOHJHVIRUWKRVHREMHFWV
VKH LV JRLQJ WR XVH )RU H[DPSOH LI D ZHE DSSOLFDWLRQ RQO\ VHOHFWV GDWD IURP D IHZ
GDWDEDVHVGRQ¦WJLYHZULWHDFFHVVDQGUHDGDFFHVVWRWKH mysqlGDWDEDVHWRWKHZHE
DSSOLFDWLRQ¦V XVHU DFFRXQW ,I \RX QHHG WR GR D PDLQWHQDQFH WDVN RQ WKDW GDWDEDVH
FUHDWHDVHSDUDWHXVHUIRULW
6XFKSUHFDXWLRQVZLOOSURWHFW\RXIURPEDGLQWHUYHQWLRQVDQGFDQHYHQPLWLJDWHDJDLQVW
64/LQMHFWLRQDWWDFNV$VXFFHVVIXODWWDFNZLOOEHOLPLWHGLQWKHGDPDJHLWFDQFDXVH
Environment
$QRWKHULPSRUWDQWDVSHFWLVWKHHQYLURQPHQWIRUUXQQLQJWKHVHUYHUWKH0\64/VHUYHU
RSWLRQVDQGWKHH[WHUQDOHQYLURQPHQWLQZKLFKLWUXQV
:KHQDGMXVWLQJRSWLRQVDQDO\]HWKHLUHIIHFWV6WDUWZLWKRQO\WKHRSWLRQVZKRVHHIIHFWV
\RXDUHVXUHRIWKHQDGGRWKHUVRQHE\RQHDQGDQDO\]HKRZWKH\FKDQJHWKLQJV,Q
VXFKDVFHQDULRLIVRPHWKLQJJRHVZURQJ\RXZLOOEHDEOHWRUHVWRUHDQDFFHSWDEOHZRUN
HQYLURQPHQWLQDIHZVHFRQGV
:KHQSODQQLQJD0\64/LQVWDOODWLRQDQDO\]HKRZWKHHQYLURQPHQWZLOODIIHFWLW'RQ¦W
H[SHFWWKH0\64/VHUYHUWRUXQIDVWZLWKRXWLVVXHVZKHQWKHKDUGZDUHDQGRSHUDWLQJ
V\VWHP DUH RYHUORDGHG E\ RWKHU SURFHVVHV RU VXIIHU IURP D FRUUXSWHG GLVN 3ODQ
FRUUHVSRQGLQJO\DQGFKHFNWKHKDUGZDUHDWWKHILUVWVLJQRISUREOHPV
:KHQSODQQLQJUHSOLFDWLRQRUVRPHRWKHUFRPSOLFDWHGHQYLURQPHQWWU\WRGLDJQRVHLQ
DGYDQFHKRZWKHVHWXSFDQDIIHFWGDWDEDVHDFWLYLWLHV$VLPSOHH[DPSOHLVWKHGLIIHUHQFHV
LQTXHU\EHKDYLRUZKHQURZYHUVXVVWDWHPHQWELQDU\ORJJLQJLVXVHG$OZD\VDQDO\]H
DQGSODQFRUUHVSRQGLQJO\
7KURXJKRXWWKLVERRN,KDYHSRLQWHGWRJRRGVRXUFHVRILQIRUPDWLRQWKDWFDQKHOS
GXULQJWURXEOHVKRRWLQJ+HUHLVVKRUWOLVWRIWKHPJURXSHGE\XVDJHW\SH$VDOZD\V
,SUHIHUWKRVH,SHUVRQDOO\XVHGDLO\
229
2UDFOH¦V.QRZOHGJH0DQDJHPHQWGDWDEDVH
2UDFOHPDNHVDUHJXODUO\XSGDWHGNQRZOHGJHGDWDEDVHDFFHVVLEOHWRLWVFXVWRPHUV
,W FRQWDLQV SURGXFW DQG SUREOHP GHVFULSWLRQV LQ PRUH GHWDLO WKDQ WKH 0\64/
5HIHUHQFH0DQXDO0DQ\DUWLFOHVDUHFUHDWHGIURPFXVWRPHUV¦XVHFDVHVVR\RX
PD\ZHOOILQGWKHH[DFWSUREOHP\RXKDYH6RPHRIWKHDUWLFOHVDUHSXEOLVKHGWKHUH
RQWKHVDPHGD\WKDWDIHDWXUHLVUHOHDVHGVRWKLVLVDUHDOO\JRRGVRXUFHIRUDFWXDO
LQIRUPDWLRQ
Books
7KHUH DUH DOVR YDOXDEOH ERRNV ZULWWHQ DERXW 0\64/ , ZRXOG VWDUW ZLWK 2¦5HLOO\
ERRNVEHFDXVH2¦5HLOO\DOZD\VZRUNVZLWKH[SHUWV$PRQJWKHDXWKRUVIURPWKLVOLVW
\RXFDQILQGDXWKRUVRI0\64/VRXUFHFRGHDQGWRS0\64/H[SHUWV
,DOVRUHFRPPHQG([SHUW0\64/E\'U&KDUOHV$%HOO $SUHVV ZKLFKSURYLGHVLQ
IRUPDWLRQDERXWKRZWRGHEXJDQGPRGLI\0\64/FRGH,WRXFKHGRQWKHVHWRSLFVLQ
£:KHQWKH6HUYHU'RHV1RW$QVZHU¤RQSDJHDQG£&RUHILOH¤RQSDJHEXW
FRQVXOW'U%HOO¦VERRNLI\RXZDQWPRUHGHWDLOV
Books | 231
Index
Symbols ELQORJBGLUHFWBQRQBWUDQVDFWLRQDOBXSGDWHV
YDULDEOH
ELWDUFKLWHFWXUH5$0XVDJHZLWK ELQORJBVWPWBFDFKHBVL]HYDULDEOH
ELWDUFKLWHFWXUH5$0XVDJHZLWK %/2%FROXPQV
HIIHFWVRQ5$0
A HIIHFWVRQVWDWHPHQWEDVHGORJJLQJ
DIIHFWHGURZVQXPEHURI QXPEHURIE\WHVXVHGIRUVRUWLQJ
$,2LQWHUIDFH EORJV
DQDO\]LQJSUREOHPVGHYHORSLQJVNLOOVIRU ,QQR'%7HDPEORJ
$1'NH\ZRUGLQ6(7VWDWHPHQW 0\64/3HUIRUPDQFHEORJ
$3,V[LL 0\64/3ODQHW
VHHDOVR&$3, UHJDUGLQJPXOWLWKUHDGHGVODYHV
DV\QFKURQRXVUHSOLFDWLRQ UHJDUGLQJUHVWRULQJ,QQR'%WDEOHV
DXWRLQFUHPHQWILHOGVORFNLQJPRGHIRU ERRNVDQGSXEOLFDWLRQV
DXWRFRPPLWYDULDEOH ([SHUW0\64/ $SUHVV
+LJK3HUIRUPDQFH0\64/ 2¦5HLOO\
0\64/3OXJLQ'HYHORSPHQW 3DFNW
B
EDFNXSV¡ 0\64/+LJK$YDLODELOLW\ 2¦5HLOO\
%(*,1VWDWHPHQW
%HOO&KDUOHV$ DXWKRU 0\64/5HIHUHQFH0DQXDO 2UDFOH [
([SHUW0\64/ $SUHVV SXEOLVKHGE\2¦5HLOO\
0\64/+LJK$YDLODELOLW\ 2¦5HLOO\ 8QGHUVWDQGLQJ0\64/,QWHUQDOV 2¦5HLOO\
EHQFKPDUNLQJWRROV¡ EXIIHUV
ELQDU\ORJV VHUYHURSWLRQVIRU¡¡
EDFNLQJXS VL]HRI
FRUUXSWLRQRIFKHFNLQJ JXLGHOLQHVIRU¡
IRUPDWVIRU UHODWLRQVKLSWR5$0
LQIRUPDWLRQDERXW EXJV
TXHULHVLQGLIIHUHQWWKDQH[HFXWHG FKHFNLQJZKHWKHUIL[HGLQQHZHUYHUVLRQ
VHUYHURSWLRQVIRU
VWRUHGIXQFWLRQVDIIHFWHGE\ GDWDEDVHRI0\64/EXJV
ELQORJ RSWLRQV ZRUNDURXQGVIRU¡
ELQORJBFDFKHBVL]HYDULDEOH EXONBLQVHUWBEXIIHUBVL]HYDULDEOH
:H¦GOLNHWRKHDU\RXUVXJJHVWLRQVIRULPSURYLQJRXULQGH[HV6HQGHPDLOWRLQGH[#RUHLOO\FRP
233
C VODYHVHUYHULVVXHVZLWK¡
&21'B,167$1&(6WDEOH
&$3, FRQQHFWLRQV
FRYHUDJHRI[LL ORJJLQJHUURUVLQ
TXHU\LQIRUPDWLRQUHWULHYLQJ¡ ORVW¡
V\QWD[IRU VHUYHURSWLRQVIRU¡
FDFKHV FRQQHFWBWLPHRXWYDULDEOH
VHUYHURSWLRQVIRU FRQWDFWLQIRUPDWLRQIRUWKLVERRN[LY
VKDUHGEHWZHHQWKUHDGV FRQYHQWLRQVXVHGLQWKLVERRN[LLL
ODUJHEXIIHUVDIIHFWLQJ FRUHILOHV¡
SHUIRUPDQFHDIIHFWHGE\ FSFRPPDQG
FDVHVHQVLWLYLW\VHUYHURSWLRQVDIIHFWLQJ &38
FKDQJHGURZVQXPEHURI FRQFXUUHQF\LVVXHVZLWK
FKDUDFWHUVHWVVHUYHURSWLRQVIRU OLPLWVRI
&+(&.7$%/(VWDWHPHQW FUDVKHGVHUYHU¡
&+(&.6807$%/(VWDWHPHQW FRUHILOHVGLDJQRVLQJ¡
FLUFXODUUHSOLFDWLRQ¡ GHEXJELQDU\GLDJQRVLQJ
&/, VHH0\64/&/, HUURUORJILOHGLDJQRVLQJ
FOXVWHUV[LL JHQHUDOTXHU\ORJGLDJQRVLQJ¡
FRGHH[DPSOHV FUHDWH VWDWXVYDULDEOHV
RULJLQRI[LL &855(17B86(5 IXQFWLRQ
XVLQJ[LY
FROGEDFNXSV
FROODWLRQVVHUYHURSWLRQVIRU D
FROXPQQDPHVUHVHUYHGZRUGVXVHGDV GDWD
FRPPDQGOLQHLQWHUIDFH VHH0\64/&/, FRPPLWWHGZKHQVKRXOGKDYHEHHQUROOHG
&200,7VWDWHPHQW EDFN
&RPPXQLW\%XJ'DWDEDVH FRUUXSWLRQRI¡
&RPB VWDWXVYDULDEOHV GXSOLFDWHYDOXHVWKDWDUHVXSSRVHGWREH
FRQFXUUHQF\ XQLTXH¡
VHHDOVRORFNVWUDQVDFWLRQV LQFRQVLVWHQF\RIRQPDVWHUDQGVODYH¡
KDUGZDUHUHVRXUFHVXVHGE\ ¡¡
LQFRQVLVWHQWGDWDUHVXOWLQJIURP¡ LQVHUWLQJ VHH,16(57TXHULHV
PRGLILFDWLRQVWR VHHPRGLILFDWLRQVTXHULHV
,1)250$7,21B6&+(0$WDEOHV IRU
VKRZLQJ TXHU\RSWLPL]DWLRQVDIIHFWHGE\
,QQR'%PRQLWRUVVKRZLQJ¡ VWDOHIUDJPHQWDWLRQFDXVLQJ
ORJVVKRZLQJ¡ GDWDEDVHFRS\LQJ
PRQLWRULQJWUDQVDFWLRQVIRUSUREOHPVZLWK ''/VWDWHPHQWVLPSOLFLWFRPPLWVE\
¡ GHDGORFNV¡¡
SHUIRUPDQFHDIIHFWHGE\¡ GHEXJELQDU\IRU0\64/
3(5)250$1&(B6&+(0$WDEOHV '(/(7(TXHULHV VHHPRGLILFDWLRQVTXHULHV
VKRZLQJ¡ IRU
352&(66/,67WDEOHVKRZLQJ¡ GHSHQGHQWVXETXHULHV
SURFHVVRUFRUHVDIIHFWLQJ GHWHUPLQLVWLFIXQFWLRQV
UHSOLFDWLRQLVVXHVZLWK¡ GLPB67$7XWLOLW\
6+2:(1*,1(,112'%67$786 GLVN,2
VWDWHPHQWVKRZLQJ¡ OLPLWVRI¡
6+2:352&(66/,67VWDWHPHQWVKRZLQJ SUREOHPVZLWK
¡ GXSOLFDWHYDOXHV¡
234 | Index
E G
HFKRRSHUDWRU JDSORFNLQJ
HQYLURQPHQW JHQHUDOTXHU\ORJ¡¡
FRQWH[WVTXHULHVDUHFDOOHGIURP OLPLWDWLRQVRI
KDUGZDUHUHVRXUFHVOLPLWVRI¡ YLHZLQJG\QDPLFTXHULHVLQ¡
RSHUDWLQJV\VWHPOLPLWVRI¡ */2%$/YDULDEOHV
RWKHUDSSOLFDWLRQV¡ *ROXEFKLN6HUJHL DXWKRU
VDQGER[HV¡ 0\64/3OXJLQ'HYHORSPHQW 3DFNW
HUURUORJILOH
DOZD\VWXUQHGRQ JURXSBFRQFDWBPD[BOHQYDULDEOH
EDFNWUDFHQRWFRQWDLQHGLQ *\SV\XWLOLW\
FUDVKDQGUHVWDUWLQGLFDWHGLQ¡
VHUYHUIDLOHGWRVWDUWLQGLFDWHGLQ
ZDUQLQJVLQ
H
+DQGOHUB VWDWXVYDULDEOHV
ZKHQWRXVH
KDUGZDUHUHVRXUFHV
HUURUV
VHHDOVR&38
GLIIHUHQWHUURUVRQPDVWHUDQGVODYH
OLPLWVRI¡
OLVWRI
RXWRIUHVRXUFHVHUURU
ORVWFRQQHFWLRQWRVHUYHU¡
VHUYHURSWLRQVIRU¡
UHWULHYLQJ¡
+LJK3HUIRUPDQFH0\64/ 2¦5HLOO\
VHUYHUJRQHDZD\¡
B+,6725<WDEOHV
HYHQWVTXHULHVFDOOHGIURP
KRWEDFNXSV
(9(176B:$,76B WDEOHV
+XWFKLQJV$QGUHZ DXWKRU
(9(176B:$,76B&855(17WDEOH
0\64/3OXJLQ'HYHORSPHQW 3DFNW
H[FOXVLYHORFNV VHHZULWHORFNV
([SHUW0\64/ $SUHVV
(;3/$,1(;7(1'('V\QWD[¡¡
I
F ,2WKUHDGIRUUHSOLFDWLRQ
QRWFRQQHFWLQJWRPDVWHU¡
ILOHVRSHQOLPLWLQJQXPEHURI
UHSHDWHGGLVFRQQHFWVIURPPDVWHU¡
),/(B,167$1&(6WDEOH
)/86+67$786VWDWHPHQW
VODYHIDUEHKLQGPDVWHU¡
IRQWVXVHGLQWKLVERRN[LLL
VWDWXVRI
)25&(,1'(;V\QWD[
,*125(,1'(;V\QWD[
IRUNVRI0\64/[LL
LPSOLFLWFRPPLWV¡
IUDJPHQWDWLRQ
LQFUHPHQWDOEDFNXSV
ODUJHEXIIHUVOHDGLQJWR
LQGH[HV
RIWDEOHVSDFHVILQGLQJ
DGGLQJ¡
)UHHQRGH
GURSSLQJRULJQRULQJ
IUPILOHH[WHQVLRQ
SHUIRUPDQFHDIIHFWHGE\
IXOOEDFNXSV
LQGH[BPHUJHYDULDEOH
IXQFWLRQV
LQGH[BPHUJHBLQWHUVHFWLRQYDULDEOH
QRQGHWHUPLQLVWLF64/WKUHDGVWRSSLQJ
LQGH[BPHUJHBVRUWBXQLRQYDULDEOH
IURP
LQGH[BPHUJHBXQLRQYDULDEOH
TXHULHVFDOOHGIURPSUREOHPVZLWK
,1)250$7,21B6&+(0$WDEOHV¡
VWRUHGELQDU\ORJJLQJDIIHFWLQJ
VHHDOVRVSHFLILFWDEOHV
FRQFXUUHQF\LQIRUPDWLRQLQ
Index | 235
,QQR'%PRQLWRUVFRPSDUHGWR LQQRGEBORJBEXIIHUBVL]HYDULDEOH
LQLWBFRQQHFWYDULDEOH LQQRGEBORJBILOHBVL]HYDULDEOH
LQLWBILOHYDULDEOH ,112'%B0(75,&6 WDEOHV
LQLWBVODYHYDULDEOH LQQRGEBRSHQBILOHVYDULDEOH
LQQHUMRLQRSWLPL]HGTXHU\FRQWDLQLQJ LQQRGEBUHDGBLRBWKUHDGVYDULDEOH
,QQR'%+RW%DFNXS LQQRGEBUROOEDFNBRQBWLPHRXWYDULDEOH
VHHDOVR0\64/(QWHUSULVH%DFNXS 0(% LQQRGEBVWDWVBPHWKRGYDULDEOH
,QQR'%PRQLWRUV¡ LQQRGEBVWDWVBRQBPHWDGDWDYDULDEOH
/RFN0RQLWRU¡ LQQRGEBVWDWVBVDPSOHBSDJHVYDULDEOH
VWDQGDUGPRQLWRU VHH6+2:(1*,1( LQQRGEBVWULFWBPRGHYDULDEOH
,112'%67$786VWDWHPHQW ,112'%B6<6 WDEOHV
7DEOH0RQLWRU LQQRGEBWDEOHBORFNVYDULDEOH
7DEOHVSDFH0RQLWRU LQQRGEBWKUHDGBFRQFXUUHQF\YDULDEOH
WXUQLQJRQ ,112'%B75;WDEOH
,QQR'%3OXJLQ LQQRGEBXVHBQDWLYHBDLRYDULDEOH
,1)250$7,21B6&+(0$WDEOHVLQ LQQRGEBZULWHBLRBWKUHDGVYDULDEOH
,16(57TXHULHV
LQQRGEBVWULFWBPRGHRSWLRQLQ VHHDOVRPRGLILFDWLRQVTXHULHVIRU
LQQRGEBXVHBQDWLYHBDLRRSWLRQLQ GXSOLFDWHYDOXHVPLVWDNHQO\DGGHGXVLQJ
,QQR'%VWRUDJHHQJLQH
FRUUXSWLRQRI¡ SHUIRUPDQFHRI
FRYHUDJHRI[LL B,167$1&(6WDEOHV
IDLOLQJWRVWDUW LQWHUDFWLYHBWLPHRXWYDULDEOH
URZORFNV LQWHUQDOORFNV
VHPDSKRUHV ,QWHUQHW5HOD\&KDW ,5&
VHUYHURSWLRQVIRU¡¡ LVRODWLRQOHYHO
WUDQVDFWLRQV VHHWUDQVDFWLRQV
,QQR'%7HDPEORJ
,QQRGEB VWDWXVYDULDEOHV
J
MRLQV
LQQRGEBDGDSWLYHBKDVKBLQGH[YDULDEOH
IDLOXUHRIGLDJQRVLQJ
LQQRGEBDGGLWLRQDOBPHPBSRROBVL]HYDULDEOH
LQIRUPDWLRQDERXWLQ(;3/$,1
(;7(1'('
LQQRGEBDXWRLQFBORFNBPRGHYDULDEOH
PXOWLSOHOHDGLQJWRV\QWD[HUURUV¡
LQQRGEBEXIIHUBSRROBLQVWDQFHYDULDEOH
RSWLPL]HUDOZD\VXVLQJ
LQQRGEBEXIIHUBSRROBVL]HYDULDEOH
RSWLPL]LQJ
LQQRGEBFKHFNVXPVYDULDEOH
MRLQBEXIIHUBVL]HYDULDEOH
,112'%B&03 WDEOHV
LQQRGEBFRPPLWBFRQFXUUHQF\YDULDEOH
LQQRGEBFRQFXUUHQF\BWLFNHWVYDULDEOH K
LQQRGEBGRXEOHZULWHYDULDEOH NH\BEXIIHUBVL]HYDULDEOH
LQQRGEBILOHBSHUBWDEOHYDULDEOH .,//VWDWHPHQW
LQQRGEBIOXVKBORJBDWBWU[BFRPPLWYDULDEOH .QRZOHGJH0DQDJHPHQWGDWDEDVH
LQQRGEBIOXVKBPHWKRGYDULDEOH
LQQRGEBLRBFDSDFLW\YDULDEOH
L
,112'%B/2&.6WDEOH /DXQFKSDG
LQQRGEBORFNVBXQVDIHBIRUBELQORJYDULDEOH *\SV\XWLOLW\
,112'%B/2&.B:$,76WDEOH V\VEHQFKXWLOLW\¡
LQQRGEBORFNBZDLWBWLPHRXWYDULDEOH ORFDOL]LQJSUREOHPV¡
ORFDOBLQILOHYDULDEOH
236 | Index
/RFN0RQLWRU¡ ORQJBTXHU\BWLPHYDULDEOH
/2&.7$%/(6VWDWHPHQW ORZHUBFDVH YDULDEOHV
ORFNV¡ /90XWLOLW\
IRUDXWRLQFUHPHQWILHOGV
GHDGORFNV¡¡
JDSORFNLQJ
M
KHOGE\XQFRPPLWWHGWUDQVDFWLRQV PDLQWHQDQFHWRROV¡
LQWHUQDOORFNV VHHDOVREDFNXSV
PHWDGDWDORFNV¡ 0DULD'%[LL
PXWH[HV¡ PDVWHUVHUYHU
SDJHORFNV VHHDOVRUHSOLFDWLRQ
UHDGORFNV DOZD\VPXOWLWKUHDGHG
URZORFNV¡ GDWDRQGLIIHUHQWWKDQVODYH¡¡
VKRZLQJIRUPXOWLVWDWHPHQW ¡
WUDQVDFWLRQV¡ PDWFKHGURZVQXPEHURI
WLPHRXWIRU 0D[LD*LXVHSSH GHYHORSHURI0\64/
WDEOHORFNV¡ 6DQGER[
WLPHRXWIRU PD[B YDULDEOHV
ZULWHORFNV PD[BDOORZHGBSDFNHWYDULDEOH
ORFNBZDLWBWLPHRXWYDULDEOH PD[BELQORJBFDFKHBVL]HYDULDEOH
ORJVORZDGPLQVWDWHPHQWVRSWLRQ PD[BELQORJBVWPWBFDFKHBVL]HYDULDEOH
ORJLFDOEDFNXSV PD[BMRLQBVL]HYDULDEOH
ORJV¡ PD[BOHQJWKBIRUBVRUWBGDWDYDULDEOH
ELQDU\ORJV PD[BVHHNVBIRUBNH\YDULDEOH
EDFNLQJXS PD[BVRUWBOHQJWKYDULDEOH
FRUUXSWLRQRIFKHFNLQJ 0(% 0\64/(QWHUSULVH%DFNXS
IRUPDWVIRU 0(0 0\64/(QWHUSULVH0DQDJHU
LQIRUPDWLRQDERXW PHPRU\ VHHEXIIHUVIUDJPHQWDWLRQ5$0
TXHULHVLQGLIIHUHQWWKDQH[HFXWHG PHVVDJHV VHHHUURUVZDUQLQJV
VHUYHURSWLRQVIRU PHWDGDWDORFNV¡
VWRUHGIXQFWLRQVDIIHFWHGE\ PLJUDWLRQLVVXHVZLWKUHVHUYHGZRUGV
HUURUORJILOH PLQLPL]LQJWHVWFDVHV VHHORFDOL]LQJSUREOHPV
DOZD\VWXUQHGRQ PL[HGORJJLQJ
EDFNWUDFHQRWFRQWDLQHGLQ PL[HGUHSOLFDWLRQ
FUDVKDQGUHVWDUWLQGLFDWHGLQ¡ PRGLILFDWLRQVTXHULHVIRU
VHUYHUIDLOHGWRVWDUWLQGLFDWHGLQ VHHDOVR,16(57TXHULHV
ZDUQLQJVLQ HUURUVLQFDXVLQJLQFRUUHFW6(/(&7UHVXOWV
ZKHQWRXVH ¡
JHQHUDOTXHU\ORJ¡¡ (;3/$,1(;7(1'('V\QWD[ZLWK
OLPLWDWLRQVRI LQGH[HVDIIHFWLQJ
YLHZLQJG\QDPLFTXHULHVLQ¡ WXQLQJ¡
PL[HGORJJLQJ PRQLWRULQJWRROV
RSHUDWLQJV\VWHPORJ 075 0\64/7HVW)UDPHZRUN ¡
UHOD\ORJFRUUXSWLRQRI¡ PXOWLSOHPDVWHUUHSOLFDWLRQ
VORZTXHU\ORJ¡ PXOWLWKUHDGLQJ VHHWKUHDGV
ZKHQWRXVH PXWH[HV¡
ORJBELQBWUXVWBIXQFWLRQBFUHDWRUVYDULDEOH 087(;B,167$1&(6WDEOH
ORJBTXHULHVBQRWBXVLQJBLQGH[HVYDULDEOH 09'ILOHH[WHQVLRQ
ORJBZDUQLQJVYDULDEOH 0<,ILOHH[WHQVLRQ
0\,6$0VWRUDJHHQJLQH
Index | 237
FRUUXSWLRQRI¡ P\VTOG VHHVHUYHU
FRYHUDJHRI[LL P\VTOGELQDU\VWULSSHG
VHUYHURSWLRQVIRU¡¡ P\VTOGEFRS\XWLOLW\
WDEOHORFNLQJ P\VTOGLIIXWLOLW\
P\LVDPFKNXWLOLW\ P\VTOGXPSXWLOLW\
P\LVDPBGDWDBSRLQWHUBVL]HYDULDEOH P\VTOGXPSVORZXWLOLW\
P\LVDPBPD[BVRUWBILOHBVL]HYDULDEOH P\VTOGBVDIHGDHPRQ
P\LVDPBPPDSBVL]HYDULDEOH P\VTOUHSOLFDWHXWLOLW\
P\LVDPBUHFRYHUBRSWLRQVYDULDEOH P\VTOVHUYHUFORQHXWLOLW\
P\LVDPBVRUWBEXIIHUBVL]HYDULDEOH P\VTOVODSXWLOLW\
P\LVDPBVWDWVBPHWKRGYDULDEOH P\VTOBDIIHFWHGBURZV IXQFWLRQ
P\LVDPBXVHBPPDSYDULDEOH P\VTOBHUUQR IXQFWLRQ
0\64/ P\VTOBLQIR IXQFWLRQ
GLVN,2OLPLWVIRU¡ P\VTOBTXHU\FRPPDQG
HQYLURQPHQWIRU¡ P\VTOBUHDOBTXHU\FRPPDQG
IRUNVRI[LL P\VTOBVTOVWDWH IXQFWLRQ
KDUGZDUHOLPLWVIRU¡ P\VTOBZDUQLQJBFRXQW IXQFWLRQ
QHWZRUNEDQGZLGWKOLPLWVIRU
RSHUDWLQJV\VWHPOLPLWVIRU¡
SURFHVVRUOLPLWVIRU N
WRROVSURYLGHGZLWKGLVWULEXWLRQ QDPHVUHVHUYHGZRUGVXVHGDV
0\64/3OXJLQ'HYHORSPHQW 3DFNW QHWVWDWXWLOLW\
0\64/&/, FRPPDQGOLQHLQWHUIDFH ¡ QHWZRUN
EDQGZLGWKIRU
0\64/&OXVWHU[LL FKHFNLQJLIPDVWHULVUHDFKDEOH
0\64/(QWHUSULVH%DFNXS 0(% SUREOHPVZLWKFRUUXSWLQJUHOD\ORJ
0\64/(QWHUSULVH0DQDJHU 0(0 VORZFKHFNLQJIRU
0\64/)RUJH VWDELOLW\RIFKHFNLQJ
0\64/IRUXP QHWBEXIIHUBOHQJWKYDULDEOH
0\64/+LJK$YDLODELOLW\ 2¦5HLOO\ QHWBUHDGBWLPHRXWYDULDEOH
0\64/RSWLPL]HU QHWBZULWHBWLPHRXWYDULDEOH
IRUFLQJLQGH[XVHE\ QRGHIDXOWVRSWLRQ
MRLQVXVHGE\ QRQGHWHUPLQLVWLFIXQFWLRQV64/WKUHDG
VHUYHURSWLRQVIRU¡ VWRSSLQJIURP
VXETXHU\UHSODFHGE\LQGH[ORRNXS QRQWUDQVDFWLRQDOWDEOHV
0\64/3HUIRUPDQFHEORJ KDQGOLQJRILQYDOLGGDWDLQVHUWV
0\64/3ODQHW ORJJLQJXSGDWHVWR
0\64/3UR[\GDHPRQ PL[LQJZLWKWUDQVDFWLRQDOWDEOHV¡
0\64/5HIHUHQFH0DQXDO 2UDFOH [ QXPEHURIFKDQJHGURZV
0\64/6DQGER[ QXPEHURIPDWFKHGURZV
0\64/VHUYHU VHHVHUYHU QXPEHURIURZVDIIHFWHG
0\64/7HVW)UDPHZRUN QXPEHURIZDUQLQJV
0\64/7HVW)UDPHZRUN 075 ¡
0\64/:%8WLOLWLHV
P\VTOGHEXJELQDU\
O
RIIOLQHEDFNXSV
P\VTODGPLQXWLOLW\
RQOLQHEDFNXSV
P\VTOEDFNXSFRPPDQG
RSHQ VWDWXVYDULDEOHV
P\VTOELQORJXWLOLW\
RSHQBILOHVBOLPLWYDULDEOH
P\VTOFKHFNXWLOLW\
RSHUDWLQJV\VWHP
238 | Index
HUURUVIURP SUHORDGBEXIIHUBVL]HYDULDEOH
OLPLWVIRU¡ SULYLOHJHV VHHSHUPLVVLRQV
RSHUDWLQJV\VWHPORJ SURFHVVOLVW VHH352&(66/,67WDEOH6+2:
RSWLPL]HU VHH0\64/RSWLPL]HU 352&(66/,67VWDWHPHQW
RSWLPL]HUBSUXQHBOHYHOYDULDEOH 352&(66/,67WDEOH¡
RSWLPL]HUBVHDUFKBGHSWKYDULDEOH SURFHVVRUV VHH&38
RSWLPL]HUBVZLWFKYDULDEOH SUR[\VFULSWDEOH
RSWLPL]LQJ WXQLQJ TXHULHV¡ SWWDEOHFKHFNVXPXWLOLW\
RSWLRQVIRUVHUYHU VHHVHUYHURSWLRQV
2UDFOH&XVWRPHUV¦%XJ'DWDEDVH
2UDFOH¦V.QRZOHGJH0DQDJHPHQWGDWDEDVH
Q
TXHULHV
EXIIHUVDOORFDWHGIRUDVSHFLILFTXHU\¡
P G\QDPLF
3DFKHY6DVKD DXWKRU YLHZLQJLQTXHU\ORJ¡
8QGHUVWDQGLQJ0\64/,QWHUQDOV 2¦5HLOO\ YLHZLQJZLWKRXWSXWIXQFWLRQ¡
IDLOXUHRI
SDJHORFNV FDXVLQJGLIIHUHQWHUURUVRQPDVWHUDQG
SDUWLDOEDFNXSV VODYH
SDWKVLQVHUYHURSWLRQVLQFRUUHFW¡ LQFRPSOHWHRUDOWHUHGTXHU\
3HUFRQDVHUYHU[LL VODYHIDLOXUHUHVXOWLQJIURP
3HUFRQD7RRONLW LQFRUUHFWUHVXOWVIURP
3HUFRQD;WUD%DFNXS EDFNHUURUVLQGDWDFDXVLQJ¡
SHUIRUPDQFH SUHYLRXVXSGDWHVFDXVLQJ¡
FRQFXUUHQF\DIIHFWLQJ¡ TXHU\FDXVLQJ¡
KDUGZDUHOLPLWVDIIHFWLQJ¡ LQIRUPDWLRQDERXWUHWULHYLQJ¡
LPSURYLQJJHQHUDOVWUDWHJLHVIRU PRGLILFDWLRQVE\ VHHPRGLILFDWLRQVTXHULHV
RIPRGLILFDWLRQTXHULHV¡ IRU
RSHUDWLQJV\VWHPOLPLWVDIIHFWLQJ¡ RSWLPL]HGE\0\64/ VHH0\64/
RWKHUDSSOLFDWLRQVDIIHFWLQJ¡ RSWLPL]HU
VHUYHURSWLRQVIRU¡¡ VORZ
GDWDDIIHFWLQJ
VORZTXHU\ORJLQGLFDWLQJ¡ GURSSLQJRULJQRULQJLQGH[HV
WXQLQJTXHULHV¡ VHUYHURSWLRQVIRU¡
WXQLQJWDEOHV¡ VORZTXHU\ORJIRU¡
3(5)250$1&(B6&+(0$WDEOHV¡ WXQLQJTXHU\IRU¡
¡ WXQLQJWDEOHVIRU¡
3HUIRUPDQFHBVFKHPDB VWDWXVYDULDEOHV VXETXHULHVLQ VHHVXETXHULHV
SHUPLVVLRQV WRROVDQDO\]LQJ
SUHYHQWLQJSUREOHPVXVLQJ 0\64/&/,¡
SUREOHPVZLWK¡ P\VTOBTXHU\FRPPDQG
RIUHSOLFDWLRQXVHURQPDVWHUVHUYHU P\VTOBUHDOBTXHU\FRPPDQG
VFULSWDEOHSUR[\
VHUYHURSWLRQVIRU VHUYHUSOXJLQVZULWLQJ
SHUURUXWLOLW\ VORZTXHU\ORJ¡
3+3FRYHUDJHRI[LL TXHU\ORJ VHHJHQHUDOTXHU\ORJ
SK\VLFDOEDFNXSV TXHU\BFDFKHBVL]HYDULDEOH
SLQJXWLOLW\ TXHU\BSUHDOORFBVL]HYDULDEOH
SOXJLQV VHHVHUYHUSOXJLQV
Index | 239
R VWDWXVRI
VWDUWLQJEHWZHHQWZRVHUYHUV
5$0 VWDWHPHQWEDVHG¡
FRQFXUUHQF\LVVXHVZLWK WUDQVDFWLRQDODQGQRQWUDQVDFWLRQDOWDEOHV
ODFNRIFDXVLQJVHUYHUFUDVK PL[LQJ¡
OLPLWVRI¡ UHVHUYHGZRUGVDVQDPHV
PD[LPXPFDOFXODWLQJ UHVRXUFHV VHHERRNVDQGSXEOLFDWLRQV
VL]HRIUHODWLRQVKLSWREXIIHUV KDUGZDUHUHVRXUFHVZHEVLWH
5%5 URZEDVHGUHSOLFDWLRQ UHVRXUFHV
UHDGORFNV UHVWDUWVHUURUVFDXVHGE\
UHDGBEXIIHUBVL]HYDULDEOH UHVWRULQJIURPEDFNXSV
UHDGBRQO\YDULDEOH 52//%$&.VWDWHPHQW
UHDGBUQGBEXIIHUBVL]HYDULDEOH URZORFNV¡
UHDVRQLQJLPSRUWDQFHRI VKRZLQJIRUPXOWLVWDWHPHQWWUDQVDFWLRQV
UHOD\ORJFRUUXSWLRQRI¡ ¡
5(3$,57$%/(VWDWHPHQW WLPHRXWIRU
UHSOLFDWH RSWLRQV URZEDVHGUHSOLFDWLRQ 5%5
UHSOLFDWLRQ URZVDIIHFWHGQXPEHURI
DV\QFKURQRXV URZVFKDQJHGQXPEHURI
FLUFXODU¡ URZVPDWFKHGQXPEHURI
FRQFXUUHQF\LVVXHVZLWK¡ URZVLQ(;3/$,1(;7(1'('RXWSXW
FRQVLVWHQF\EHWZHHQPDVWHUDQGVODYH 5:/2&.B,167$1&(6WDEOH
FKHFNLQJ
,2WKUHDGIRU
QRWFRQQHFWLQJWRPDVWHU¡ S
UHSHDWHGGLVFRQQHFWVIURPPDVWHU¡ VDIHXVHUFUHDWHRSWLRQ
VDQGER[HQYLURQPHQW¡
VODYHIDUEHKLQGPDVWHU¡ 6%5 VWDWHPHQWEDVHGUHSOLFDWLRQ ¡
VWDWXVRI 6FKZDUW]%DURQ DXWKRU
LQFRQVLVWHQF\RIRQPDVWHUDQGVODYH¡ +LJK3HUIRUPDQFH0\64/ 2¦5HLOO\
VFULSWDEOHSUR[\
PL[HG VHFXUHBDXWKYDULDEOH
PXOWLSOHPDVWHUUHSOLFDWLRQ VHFXUHBILOHBSULYYDULDEOH
URZEDVHG VHFXULW\VHUYHURSWLRQVIRU
VHPLV\QFKURQRXV 6(/(&7TXHULHV VHHTXHULHV
VHUYHURSWLRQVIRU¡ 6HOHFWB VWDWXVYDULDEOHV
VODYHVWDWXVIRU¡ VHPDSKRUHV
64/WKUHDGIRU VHPLV\QFKURQRXVUHSOLFDWLRQ
GDWDLQFRQVLVWHQWEHWZHHQPDVWHUDQG VHUYHU
VODYH¡ FKHFNLQJLIUHDFKDEOH
GLIIHUHQWFRQILJXUDWLRQRQPDVWHUDQG FRQQHFWLRQLVVXHV
VODYH FUDVKHG¡
GLIIHUHQWHUURUVRQPDVWHUDQGVODYH E\ZDLWLQJ,QQR'%VHPDSKRUHV
FUHDWLQJQHZLQVWDQFHRI
QRQUHSOLFDWHGZULWHVWRVODYH¡ IDLOLQJWRVWDUW¡
TXHU\FDXVLQJVODYHWRIDLO RWKHUDSSOLFDWLRQVDIIHFWLQJ
TXHU\LQFRPSOHWHRUDOWHUHG VHUYHURSWLRQV
UHOD\OD\FRUUXSWLRQLQGLFDWHGE\¡ IRUEXIIHUV¡¡
IRUFDFKHV
VODYHODJJLQJEHKLQGPDVWHU¡ IRUFDVHRIGDWDEDVHREMHFWV
240 | Index
FKDQJLQJRQHDWDWLPH 6+2:6(66,2167$786VWDWHPHQW VHH
IRUFKDUDFWHUVHWV 6+2:67$786VWDWHPHQW
FKHFNLQJIRUHIIHFWVRI¡ 6+2:6/$9(67$786VWDWHPHQW¡
FOLHQWEHKDYLRUDIIHFWHGE\¡
IRUFROODWLRQV 6+2:67$786VWDWHPHQW¡
IRUFRQQHFWLRQV¡ 6+2:9$5,$%/(6VWDWHPHQW
GHIDXOWVIRUDOORSWLRQVXVLQJ 6+2::$51,1*6VWDWHPHQW¡
GLIIHUHQWRQPDVWHUDQGVODYH VNLSJUDQWWDEOHVRSWLRQ
IRUHUURUORJILOH VODYHVHUYHU
IRUKDUGZDUHUHVRXUFHV¡ VHHDOVRUHSOLFDWLRQ
IRULQLWLDOL]DWLRQ FRQFXUUHQF\LVVXHVZLWK
IRUQXPEHURIILOHKDQGOHV GDWDRQGLIIHUHQWWKDQPDVWHU¡¡
IRURSWLPL]HU¡ ¡
SDWKVVSHFLILHGLQLQFRUUHFW¡ LJQRULQJHUURUV
IRUSHUIRUPDQFH¡¡ ODJWLPHEHKLQGPDVWHU
PXOWLWKUHDGHG
IRUSHUPLVVLRQV QRWXVLQJDVEDFNXS
IRUUHSOLFDWLRQ¡ UHDGRQO\
IRUVHFXULW\ VLQJOHWKUHDGHG
VHUYHUEHKDYLRUDIIHFWHGE\¡¡ VWDWXVRI¡
VODYHBVNLSBHUURUVYDULDEOH
VHWWLQJ VORZTXHU\ORJ¡
IRUVWRUDJHHQJLQHV¡¡ VQDSVKRWWRROV
IRUWKUHDGV 6RUWB VWDWXVYDULDEOHV
W\SHVRI VRUWBEXIIHUBVL]HYDULDEOH
YDULDEOHVIRU 64/WKUHDGIRUUHSOLFDWLRQ
VHUYHUSOXJLQV GDWDLQFRQVLVWHQWEHWZHHQPDVWHUDQGVODYH
VHHDOVR,QQR'%SOXJLQ ¡
VHPLV\QFKURQRXVUHSOLFDWLRQSOXJLQ GLIIHUHQWFRQILJXUDWLRQRQPDVWHUDQGVODYH
7KUHDG3RRO3OXJLQ
ZULWLQJ GLIIHUHQWHUURUVRQPDVWHUDQGVODYH
6(66,21YDULDEOHV QRQUHSOLFDWHGZULWHVWRVODYH¡
6(7VWDWHPHQW TXHU\FDXVLQJVODYHWRIDLO
6(783B WDEOHV TXHU\LQFRPSOHWHRUDOWHUHG
VKDUHGORFNV VHHUHDGORFNV UHOD\ORJFRUUXSWLRQLQGLFDWHGE\¡
6+2:(1*,1(,112'%67$786 VODYHODJJLQJEHKLQGPDVWHU¡
VWDWHPHQW¡ VWDWXVRI
FRQFXUUHQF\LQIRUPDWLRQLQ¡ 64/67$7(YDOXH
GHDGORFNVLQIRUPDWLRQLQ VTOBEXIIHUBUHVXOWYDULDEOH
KLGGHQTXHULHVLQ VTOBPRGHYDULDEOH
6+2:*/2%$/67$786VWDWHPHQW 6VOB VWDWXVYDULDEOHV
6+2:*5$176VWDWHPHQW 67$5775$16$&7,21VWDWHPHQW
6+2:,112'%67$786VWDWHPHQW¡ VWDUWXSWLPHODUJHEXIIHUVLQFUHDVLQJ
VWDWHPHQWEDVHGUHSOLFDWLRQ 6%5 ¡
6+2:352&(66/,67VWDWHPHQW¡
ORFNLQJLQIRUPDWLRQLQ¡ VWDWXVYLHZLQJ VHH6+2:67$786
PHWDGDWDORFNVVKRZQE\ VWDWHPHQW
TXHULHVORFNLQJURZVQRWYLVLEOHLQ¡ VWRUDJHHQJLQHV¡
Index | 241
VHHDOVR,QQR'%VWRUDJHHQJLQH0\,6$0 64/WKUHDG VHH64/WKUHDGIRU
VWRUDJHHQJLQH UHSOLFDWLRQ
VHUYHURSWLRQVIRU¡¡ VHUYHURSWLRQVIRU
VXEVWLWXWLRQRILIRQHIDLOVWRVWDUW 7+5($'6WDEOH
VWRUHGIXQFWLRQVELQDU\ORJJLQJDIIHFWLQJ WKUHDGBFDFKHBVL]HYDULDEOH
VWRUHGSURFHGXUHVTXHULHVFDOOHGIURP WKUHDGBVWDFNYDULDEOH
VXETXHULHV WLPHRXWV¡
GHSHQGHQW WPSBWDEOHBVL]HYDULDEOH
UHSODFHGE\LQGH[ORRNXSLQRSWLPL]HU WUDQVDFWLRQDOWDEOHV
WURXEOHVKRRWLQJ KDQGOLQJRILQYDOLGGDWDLQVHUWV
VZDSSLQJ PL[LQJZLWKQRQWUDQVDFWLRQDOWDEOHV¡
FKHFNLQJIRU
ODUJHEXIIHUVOHDGLQJWR WUDQVDFWLRQV¡
SUHYHQWLQJ¡ VHHDOVRFRQFXUUHQF\
V\QWD[HUURUV¡ GHDGORFNV¡¡
V\VEHQFKXWLOLW\¡ LPSOLFLWFRPPLWV¡
LVRODWLRQOHYHOIRU
T PXOWLSOHVWDWHPHQWVLQ
VKRZLQJURZORFNV¡
WDEOHORFNV¡
UROOLQJEDFN
7DEOH0RQLWRU
WUDQVDFWLRQDODQGQRQWUDQVDFWLRQDOWDEOHV
WDEOHV
PL[LQJ¡
FKHFNLQJDQGUHFRYHULQJIURPHUURUV
XQFRPPLWWHGORFNVKHOGE\
QRQWUDQVDFWLRQDO VHHQRQWUDQVDFWLRQDO
WULJJHUVTXHULHVFDOOHGIURP
WDEOHV
WXQLQJTXHULHV¡¡
RSHQLQJQXPEHURIILOHGHVFULSWRUV
WXQLQJWDEOHV¡
DIIHFWLQJ
W\SHLQ(;3/$,1(;7(1'('RXWSXW
VL]HRI
WUDQVDFWLRQDO VHHWUDQVDFWLRQDOWDEOHV
WXQLQJ¡ U
7DEOHVSDFH0RQLWRU XOLPLWRSWLRQ
WDEOHBGHILQLWLRQBFDFKHYDULDEOH 8QGHUVWDQGLQJ0\64/,QWHUQDOV 2¦5HLOO\
WDEOHBRSHQBFDFKHYDULDEOH
WFSGXPSXWLOLW\ XQLTXHYDOXHVGXSOLFDWHYDOXHVRFFXUULQJLQ
WHOQHWXWLOLW\ ¡
WHVWLQJ 83'$7(TXHULHV VHHPRGLILFDWLRQVTXHULHV
PHWKRGVIRU¡ IRU
UROHLQWURXEOHVKRRWLQJ¡ XSWLPHVWDWXVYDULDEOH
WRROVIRU¡ 86(5 IXQFWLRQ
7KUHDG3RRO3OXJLQ
7+5($'WDEOH
WKUHDGV
V
YDULDEOHVIRUVHUYHURSWLRQV VHHVHUYHURSWLRQV
FDFKHVVKDUHGEHWZHHQ
YPRYHUFRPPLWBUDWLRRSWLRQ
ODUJHEXIIHUVDIIHFWLQJ
YPVWDWXWLOLW\
SHUIRUPDQFHDIIHFWHGE\
NLOOLQJ
IRUUHSOLFDWLRQ W
,2WKUHDG VHH,2WKUHDGIRU ZDLWBWLPHRXWYDULDEOH
UHSOLFDWLRQ ZDUPEDFNXSV
ZDUQLQJV
242 | Index
LQIRUPDWLRQDERXW¡
ZULWLQJWRHUURUORJILOH
ZHEVLWHUHVRXUFHV
&$3,V\QWD[
&RPPXQLW\%XJ'DWDEDVH
GLPB67$7XWLOLW\
HUURUVOLVWRI
IRUWKLVERRN[Y
)UHHQRGH
,QQR'%7HDPEORJ
,5& ,QWHUQHW5HOD\&KDW
/DXQFKSDG*\SV\XWLOLW\
/DXQFKSDGV\VEHQFKXWLOLW\
PXOWLWKUHDGHGVODYHV
0\64/&RPPXQLW\%XJ'DWDEDVH
0\64/)RUJH
0\64/IRUXP
0\64/3HUIRUPDQFHEORJ
0\64/3ODQHW
0\64/5HIHUHQFH0DQXDO 2UDFOH [
2UDFOH&XVWRPHUV¦%XJ'DWDEDVH
2UDFOH V.QRZOHGJH0DQDJHPHQWGDWDEDVH
3HUFRQD
UHVWRULQJ,QQR'%WDEOHV
ZRUNDURXQGV¡
:RUNEHQFK8WLOLWLHV
ZULWHORFNV
Index | 243
About the Author
6YHWD 6PLUQRYD LV D 3ULQFLSDO 7HFKQLFDO 6XSSRUW (QJLQHHU LQ WKH %XJV 9HULILFDWLRQ
*URXSRIWKH0\64/6XSSRUW*URXSDW2UDFOH
Colophon
7KHDQLPDORQWKHFRYHURI0\64/7URXEOHVKRRWLQJLVLVD0DOD\DQEDGJHU 0\GDXV
MDYDQHQVLV DOVRNQRZQDVD-DYDQVWLQNEDGJHUD6XQGDVWLQNEDGJHUDWHOHGXRUDQ
,QGRQHVLDQVWLQNEDGJHU7KHJHQXV0\GDXVLQFOXGHVRQHRWKHUVSHFLHVWKH3DODZDQ
VWLQNEDGJHU 0PDUFKHL 7KHVWLQNEDGJHUVZHUHORQJFRQVLGHUHGSDUWRIWKHEDGJHU
IDPLO\EXWUHFHQW'1$VWXGLHVKDYHVKRZQWKDWWKH\DUHPRUHFORVHO\UHODWHGWRWKH
VNXQNV
6WLQNEDGJHUVKDYHEURZQLVKEODFNIXUZLWKDZKLWHRU\HOORZFDSDQGDORQJVNXQN
OLNHVWULSHGRZQWKHEDFN7KHLUORQJPX]]OHVDUHFDSSHGE\SLJOLNHVQRXWVDQGWKH\
KDYHORQJFXUYHGFODZVRQWKHLUIURQWIHHW7KH\PHDVXUH¡LQFKHVORQJ LQFOXGLQJ
DYHU\VKRUWWDLO DQGPD\ZHLJKXSWRSRXQGV
6WLQNEDGJHUVDUHIRXQGLQ,QGRQHVLD0DOD\VLDDQGWKH3KLOOLSLQHV7KH\OLYHLQIRUHVWV
DQGQHDUE\RSHQDUHDVDQGUHVLGHDWPDQ\HOHYDWLRQVRQWKHPRXQWDLQRXVLVODQGV7KH
QRFWXUQDO DQLPDOV OLYH LQ XQGHUJURXQG EXUURZV ZKLFK WKH\ PD\ GLJ WKHPVHOYHV RU
DSSURSULDWHIURP RUVKDUHZLWK SRUFXSLQHV7KH\HDWHJJVLQVHFWVSODQWVDQGFDUULRQ
WKHLUFODZVDQGVQRXWVDUHXVHGWRGLJDQGURRWIRUHDUWKZRUPV7KH\XVXDOO\KDYHD
OLWWHURIWZRRUWKUHHEXWOLWWOHHOVHLVNQRZQDERXWWKHLUVRFLDOOLYHVDQGEUHHGLQJ
/\GHNNHUFRPPHQWHGRQWKHVSHFLHV¦£HYLORGRXU¤LQKLV5R\DO1DWXUDO+LVWRU\FDOOLQJ
WKHVSUD\IURPLWVUHDUJODQGV£IRHWLGLQWKHH[WUHPH¤7KHVHFUHWLRQVDUHXVHGIRUGHIHQVH
DJDLQVWSUHGDWRUVZKLFKLQFOXGHWKH-DYDQKDZNHDJOHIHUDOFDWVDQGWLJHUV
7KHFRYHULPDJHLVIURP/\GHNNHU¦V5R\DO1DWXUDO+LVWRU\7KHFRYHUIRQWLV$GREH
,7&*DUDPRQG7KHWH[WIRQWLV/LQRW\SH%LUNDWKHKHDGLQJIRQWLV$GREH0\ULDG
&RQGHQVHGDQGWKHFRGHIRQWLV/XFDV)RQW¦V7KH6DQV0RQR&RQGHQVHG