0% found this document useful (0 votes)
14 views

MySQL Troubleshooting

Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
14 views

MySQL Troubleshooting

Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 264

What to Do When Queries Don’t Work

||p

Us '
/

ime i

Sveta Smirnova
O’REILLY* Foreword by Dr. Charles Bell
Databases

MySQL Troubleshooting “A unique volume of


Stuck with bugs, performance problems, crashes, data corruption, information, hitherto
and puzzling output? If you’re a database programmer or DBA, unpublished. Sveta’s
they’re part of your life. The trick is knowing how to quickly recover
from them. This unique, example-packed book shows you how to work on the subject is,
handle an array of vexing problems when working with MySQL.
in my opinion, a
Written by a principal technical support engineer at Oracle, MySQL
Troubleshooting provides the background, tools, and expert steps landmark body of
for solving problems from simple to complex—whether data you
thought you inserted doesn’t turn up in a query or the entire work.Isimply haven’t
database is corrupt because of a server failure. With this book in encounteredanything
hand, you’ll work with more confidence.
like it, whichmakes it a
Understand the source of a problem, even when the
solution is simple
really cool book. It will
Handle problems that occur when applications run in soon bean important
multiple threads
Debug and fix problems caused by configuration options
referencefor all
MySQL DBAs, support
Discover how operating system tuning can affect your server
Use troubleshooting techniques specific to replication issues personnel, andeven
Get a reference to additional troubleshooting techniques the occasional tinkerer.”
and tools, including third-party solutions
— Dr. Charles Bell
Learn best practices for safe and effective troubleshooting —
and for preventing problems

Sveta Smirnova is a Principal Technical Support Engineer in the


Bugs Analysis Support Group at MySQL at Oracle, where she works
on tricky support issues and MySQL software bugs on a daily basis.
Sveta is an active participant in the open source community.

Twitter: @oreillymedia
facebook.com/oreilly

US $29.99 CAN $31.99


ISBN: 978-1-449-31200-8
5 2 99 9

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\ULJKW‹6YHWD6PLUQRYD$OOULJKWVUHVHUYHG
3ULQWHGLQWKH8QLWHG6WDWHVRI$PHULFD

3XEOLVKHGE\2¦5HLOO\0HGLD,QF*UDYHQVWHLQ+LJKZD\1RUWK6HEDVWRSRO&$

2¦5HLOO\ERRNVPD\EHSXUFKDVHGIRUHGXFDWLRQDOEXVLQHVVRUVDOHVSURPRWLRQDOXVH2QOLQHHGLWLRQV
DUHDOVRDYDLODEOHIRUPRVWWLWOHV KWWSP\VDIDULERRNVRQOLQHFRP )RUPRUHLQIRUPDWLRQFRQWDFWRXU
FRUSRUDWHLQVWLWXWLRQDOVDOHVGHSDUWPHQW  RUFRUSRUDWH#RUHLOO\FRP

Editor: $QG\2UDP Indexer: $QJHOD+RZDUG


Production Editors: -DVPLQH3HUH]DQG7HUHVD(OVH\ Cover Designer: .DUHQ0RQWJRPHU\
Copyeditor: *HQHYLHYHG¦(QWUHPRQW Interior Designer: 'DYLG)XWDWR
Proofreader: -DVPLQH3HUH] Illustrator: 5REHUW5RPDQR

)HEUXDU\ )LUVW(GLWLRQ

Revision History for the First Edition:


 )LUVWUHOHDVH
6HHKWWSRUHLOO\FRPFDWDORJHUUDWDFVS"LVEQ IRUUHOHDVHGHWDLOV

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 

2. You Are Not Alone: Concurrency Issues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53


/RFNVDQG7UDQVDFWLRQV 
/RFNV 
7DEOH/RFNV 
5RZ/RFNV 
7UDQVDFWLRQV 
+LGGHQ4XHULHV 
'HDGORFNV 

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 

3. Effects of Server Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107


6HUYLFH2SWLRQV 
9DULDEOHV7KDW$UH6XSSRVHGWR&KDQJHWKH6HUYHU%HKDYLRU 
2SWLRQV7KDW/LPLW+DUGZDUH5HVRXUFHV 
8VLQJWKHQRGHIDXOWV2SWLRQ 
3HUIRUPDQFH2SWLRQV 
+DVWH0DNHV:DVWH 
7KH6(76WDWHPHQW 
+RZWR&KHFN:KHWKHU&KDQJHV+DGDQ(IIHFW 
'HVFULSWLRQVRI9DULDEOHV 
2SWLRQV7KDW$IIHFW6HUYHUDQG&OLHQW%HKDYLRU 
3HUIRUPDQFH5HODWHG2SWLRQV 
&DOFXODWLQJ6DIH9DOXHVIRU2SWLRQV 

4. MySQL’s Environment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147


3K\VLFDO+DUGZDUH/LPLWV 
5$0 
3URFHVVRUVDQG7KHLU&RUHV 
'LVN,2 
1HWZRUN%DQGZLGWK 
([DPSOHRIWKH(IIHFWRI/DWHQFLHV 
2SHUDWLQJ6\VWHP/LPLWV 
(IIHFWVRI2WKHU6RIWZDUH 

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 

6. Troubleshooting Techniques and Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173


7KH4XHU\ 
6ORZ4XHU\/RJ 
7RROV7KDW&DQ%H&XVWRPL]HG 
7KH0\64/&RPPDQG/LQH,QWHUIDFH 
(IIHFWVRIWKH(QYLURQPHQW 
6DQGER[HV 
(UURUVDQG/RJV 
(UURU,QIRUPDWLRQ$JDLQ 
&UDVKHV 
,QIRUPDWLRQ*DWKHULQJ7RROV 
,QIRUPDWLRQ6FKHPD 
,QQR'%,QIRUPDWLRQ6FKHPD7DEOHV 
,QQR'%0RQLWRUV 
3HUIRUPDQFH6FKHPD 
6+2:>*/2%$/@67$786 
/RFDOL]LQJWKH3UREOHP 0LQLPL]LQJWKH7HVW&DVH 
*HQHUDO6WHSVWR7DNHLQ7URXEOHVKRRWLQJ 
7HVWLQJ0HWKRGV 
7U\WKH4XHU\LQD1HZHU9HUVLRQ 
&KHFNIRU.QRZQ%XJV 
:RUNDURXQGV 
6SHFLDO7HVWLQJ7RROV 
%HQFKPDUNLQJ7RROV 
*\SV\ 
0\64/7HVW)UDPHZRUN 
0DLQWHQDQFH7RROV 

7. Best Practices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221


%DFNXSV 
3ODQQLQJ%DFNXSV 
7\SHVRI%DFNXSV 

Table of Contents | v
7RROV 
*DWKHULQJWKH,QIRUPDWLRQ<RX1HHG 
:KDW'RHV,W$OO0HDQ" 
7HVWLQJ 
3UHYHQWLRQ 
3ULYLOHJHV 
(QYLURQPHQW 
7KLQN$ERXW,W 

Appendix: Information Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229

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 

How to Solve a Problem


7KLVERRNLVVKDSHGDURXQGWKHJRDORISXUVXLQJSUREOHPVDQGILQGLQJFDXVHV,VWHS
WKURXJKZKDW,ZRXOGGRWRXQFRYHUWKHSUREOHPZLWKRXWVKRZLQJGR]HQVRIGLVWUDFW
LQJGHWDLOVRUIDQF\PHWKRGV

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\

How This Book Is Organized


7KLVERRNKDVVHYHQFKDSWHUVDQGDQDSSHQGL[
&KDSWHU%DVLFVGHVFULEHVEDVLFWURXEOHVKRRWLQJWHFKQLTXHVWKDW\RX¦OOXVHLQQHDUO\
DQ\VLWXDWLRQ7KLVFKDSWHUFRYHUVRQO\VLQJOHWKUHDGHGSUREOHPVLHSUREOHPVWKDW
DUHUHSHDWDEOHZLWKDVLQJOHFRQQHFWLRQLQLVRODWLRQ,VWDUWZLWKWKLVLVRODWHGDQGVRPH
ZKDWXQUHDOLVWLFVHWWLQJEHFDXVH\RXZLOOQHHGWKHVHWHFKQLTXHVWRLVRODWHDSUREOHPLQ
DPXOWLWKUHDGHGDSSOLFDWLRQ

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

Conventions Used in This Book


7KHIROORZLQJW\SRJUDSKLFDOFRQYHQWLRQVDUHXVHGLQWKLVERRN
,WDOLF
,QGLFDWHVQHZWHUPV85/VHPDLODGGUHVVHVILOHQDPHVDQGILOHH[WHQVLRQV
Constant width
8VHGIRUSURJUDPOLVWLQJVDVZHOODVZLWKLQSDUDJUDSKVWRUHIHUWRSURJUDPHOHPHQWV
VXFKDVYDULDEOHRUIXQFWLRQQDPHVGDWDEDVHVGDWDW\SHVHQYLURQPHQWYDULDEOHV
VWDWHPHQWVDQGNH\ZRUGV
Constant width bold
6KRZVFRPPDQGVRURWKHUWH[WWKDWVKRXOGEHW\SHGOLWHUDOO\E\WKHXVHU
Constant width italic
6KRZVWH[WWKDWVKRXOGEHUHSODFHGZLWKXVHUVXSSOLHGYDOXHVRUE\YDOXHVGHWHU
PLQHGE\FRQWH[W

..
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

Safari® Books Online


6DIDUL%RRNV2QOLQHLVDQRQGHPDQGGLJLWDOOLEUDU\WKDWOHWV\RXHDVLO\
Safari
Books Online VHDUFKRYHUWHFKQRORJ\DQGFUHDWLYHUHIHUHQFHERRNVDQGYLGHRVWR
ILQGWKHDQVZHUV\RXQHHGTXLFNO\
:LWKDVXEVFULSWLRQ\RXFDQUHDGDQ\SDJHDQGZDWFKDQ\YLGHRIURPRXUOLEUDU\RQOLQH
5HDGERRNVRQ\RXUFHOOSKRQHDQGPRELOHGHYLFHV$FFHVVQHZWLWOHVEHIRUHWKH\DUH
DYDLODEOHIRUSULQWJHWH[FOXVLYHDFFHVVWRPDQXVFULSWVLQGHYHORSPHQWDQGSRVWIHHG
EDFNIRUWKHDXWKRUV&RS\DQGSDVWHFRGHVDPSOHVRUJDQL]H\RXUIDYRULWHVGRZQORDG
FKDSWHUVERRNPDUNNH\VHFWLRQVFUHDWHQRWHVSULQWRXWSDJHVDQGEHQHILWIURPWRQV
RIRWKHUWLPHVDYLQJIHDWXUHV
2¦5HLOO\0HGLDKDVXSORDGHGWKLVERRNWRWKH6DIDUL%RRNV2QOLQHVHUYLFH7RKDYHIXOO
GLJLWDODFFHVVWRWKLVERRNDQGRWKHUVRQVLPLODUWRSLFVIURP2¦5HLOO\DQGRWKHUSXE
OLVKHUVVLJQXSIRUIUHHDWKWWSP\VDIDULERRNVRQOLQHFRP

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, ',') . ';';
}

private function generate_for($column)


{
switch ($column['data_type']) {
case 'int':
return rand();
case 'varchar':
case 'text':
return "'" . str_pad(md5(rand()), rand(1,$column['character_maximum_length']),
md5(rand()), STR_PAD_BOTH) . "'";
default:
return "''";
}
}

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

Wrong Results from a SELECT


7KLVLVDQRWKHUIUHTXHQWSUREOHPUHSRUWHGE\XVHUVRIDQDSSOLFDWLRQZKRGRQ¦WVHHWKH
XSGDWHVWKH\PDGHVHHWKHPLQWKHZURQJRUGHURUVHHVRPHWKLQJWKH\GRQ¦WH[SHFW
7KHUHDUHWZRPDLQUHDVRQVIRUJHWWLQJZURQJUHVXOWVVRPHWKLQJLVZURQJZLWK\RXU
SELECTTXHU\RUWKHGDWDLQGDWDEDVHGLIIHUVIURPZKDW\RXH[SHFW,¦OOVWDUWZLWKWKH
ILUVWFDVH
:KHQ,ZHQWRYHUH[DPSOHVIRUWKLVVHFWLRQ,KDGWRHLWKHUVKRZVRPHUHDOOLIHH[DPSOHV
RUZULWHP\RZQWR\FDVHV7KHUHDOOLIHH[DPSOHVFDQEHRYHUZKHOPLQJO\ODUJHEXWWKH
WR\FDVHVZRXOGQ¦WEHPXFKKHOSWR\RXEHFDXVHQRERG\ZULWHVVXFKFRGH6R,¦YH
FKRVHQWRXVHVRPHW\SLFDOUHDOOLIHH[DPSOHVEXWVLPSOLILHGWKHPGUDPDWLFDOO\

Wrong Results from a SELECT | 5


7KHILUVWH[DPSOHLQYROYHVDFRPPRQXVHUPLVWDNHZKHQXVLQJKXJHMRLQV:HZLOOXVH
([DPSOHGHVFULEHGLQWKHSUHYLRXVVHFWLRQ7KLVWDEOHFRQWDLQVP\FROOHFWLRQRI
0\64/IHDWXUHVWKDWFDXVHFRPPRQXVDJHPLVWDNHV,GHDOZLWKLQ0\64/6XSSRUW
(DFKPLVWDNHKDVDURZLQWKH itemsWDEOH,KDYHDQRWKHUWDEOHRI linksWRUHVRXUFHV
IRULQIRUPDWLRQ%HFDXVHWKHUH¦VDPDQ\WRPDQ\UHODWLRQVKLSEHWZHHQLWHPVDQGOLQNV
,DOVRPDLQWDLQDQ items_linksWDEOHWRWLHWKHPWRJHWKHU+HUHDUHWKHGHILQLWLRQVRI
WKHitemsDQGitems_linksWDEOH ZHGRQ¦WQHHGlinksLQWKLVH[DPSOH 
mysql> DESC items;
+-------------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| short_description | varchar(255) | YES | | NULL | |
| description | text | YES | | NULL | |
| example | text | YES | | NULL | |
| explanation | text | YES | | NULL | |
| additional | text | YES | | NULL | |
+-------------------+--------------+------+-----+---------+----------------+
6 rows in set (0.30 sec)

mysql> DESC items_links;


+--------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+---------+------+-----+---------+-------+
| iid | int(11) | YES | MUL | NULL | |
| linkid | int(11) | YES | MUL | NULL | |
+--------+---------+------+-----+---------+-------+
2 rows in set (0.11 sec)

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'

6XUSULVH:HKDYHDW\SRDQGDFWXDOO\WKHUHLVQRILHOGQDPHG idLQWKH items_links


WDEOHLWVD\V iid IRU£LWHPV,'¤ LQVWHDG,IZHUHZULWHRXUTXHU\VRWKDWLWXVHVWKH
FRUUHFWLGHQWLILHUVLWZLOOZRUNSURSHUO\
mysql> SELECT count(*) FROM items WHERE id IN (SELECT iid FROM items_links);
+----------+
| count(*) |
+----------+
| 4 |
+----------+
1 row in set (0.08 sec)

■ :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

Wrong Results from a SELECT | 7


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
possible_keys: NULL
key: iid_2
key_len: 5
ref: NULL
rows: 6
filtered: 100.00
Extra: Using where; Using index
2 rows in set, 2 warnings (0.54 sec)

mysql> show warnings\G


*************************** 1. row ***************************
Level: Note
Code: 1276
Message: Field or reference 'collaborate2011.items.id' of SELECT #2 was resolved
in SELECT #1
*************************** 2. row ***************************
Level: Note
Code: 1003
Message: select count(0) AS `count(*)` from `collaborate2011`.`items` where
<in_optimizer7gt;(`collaborate2011`.`items`.`id`,<exists>(select 1 from
`collaborate2011`.`items_links` where
(<cache>(`collaborate2011`.`items`.`id`) =
`collaborate2011`.`items`.`id`)))
2 rows in set (0.00 sec)

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)

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)

7KH RSWLPL]HG TXHU\ WKLV WLPH ORRNV FRPSOHWHO\ GLIIHUHQW DQG UHDOO\ FRPSDUHV
items.idZLWKitems_links.iidDVZHLQWHQGHG

Wrong Results from a SELECT | 9


■ :HMXVWOHDUQHGDQRWKHUOHVVRQXVHEXPLAIN EXTENDEDIROORZHGE\SHOW WARNINGS
WRILQGKRZDTXHU\ZDVRSWLPL]HG DQGH[HFXWHG 
7KHYDOXHRIselect_typeLQWKHFRUUHFWTXHU\LVVWLOODEPENDENT SUBQUERY+RZFDQWKDW
EHLIZHUHVROYHWKHILHOGQDPHIURPWKHitems_linksWDEOH"7KHH[SODQDWLRQVWDUWVZLWK
WKHSDUWRIWKHSHOW WARNINGSRXWSXWWKDWUHDGVDVIROORZV
where (<cache>(`collaborate2011`.`items`.`id`) =
`collaborate2011`.`items_links`.`iid`)

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

When the Problem May Have Been a Previous Update


,IDSELECTUHWXUQVDUHVXOWVHW\RXGRQ¦WH[SHFWWKLVGRHVQRWDOZD\VPHDQVRPHWKLQJ
LVZURQJZLWKWKHTXHU\LWVHOI3HUKDSV\RXGLGQ¦WLQVHUWXSGDWHRUGHOHWHGDWDWKDW\RX
WKRXJKW\RXKDG
%HIRUH\RXLQYHVWLJDWHWKLVSRVVLELOLW\\RXVKRXOGIDLWKIXOO\FDUU\RXWWKHLQYHVWLJDWLRQ
LQWKHSUHYLRXVVHFWLRQZKHUHZHGLVFXVVHGDEDGO\ZULWWHQ SELECTVWDWHPHQW+HUH,
H[DPLQHWKHSRVVLELOLW\WKDW\RXKDYHDJRRG SELECTWKDWLVUHWXUQLQJWKHYDOXHV\RX
DVNHGIRUDQGWKDWWKHSUREOHPLV\RXUGDWDLWVHOI7RPDNHVXUHWKHSUREOHPLVLQWKH
GDWDDQGQRWWKHSELECTWU\WRUHGXFHLWWRDVLPSOHTXHU\RQDVLQJOHWDEOH,IWKHWDEOH
LVVPDOOJRDKHDGDQGUHPRYHDOOWKHWHEREFODXVHVDVZHOODVDQ\GROUP BYFODXVHVDQG
H[DPLQHWKHIXOOGDWDVHWZLWKDEUXWHIRUFHSELECT * FROMtable_name)RUDODUJHUWDEOH
MXGLFLRXVO\XVHWHEREWRFXOOWKHYDOXHV\RXZDQWWRH[DPLQHDQGFRQVLGHUCOUNT(*)LI
\RXMXVWZDQWWRPDNHVXUHWKHQXPEHURIURZVPDWFKLQJWKHTXHU\LVZKDW\RXH[SHFW
2QFH\RXDUHVXUHWKH SELECTZRUNVILQHWKLVPHDQVWKHGDWDLVLQFRQVLVWHQWDQG\RX
QHHGWRILQGZKHUHLWLVEURNHQ7KHUHFDQEHDORWRIUHDVRQVDEDGO\DSSOLHGEDFNXS
DQLQFRUUHFW UPDATEVWDWHPHQWRUDVODYHJHWWLQJRXWRIV\QFZLWKWKHPDVWHUMXVWWR

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)

mysql> SELECT * FROM t1;


+------+
| f1 |
+------+
| 1 |
+------+
1 row in set (0.00 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

When the Problem May Have Been a Previous Update | 11


mysql> SELECT * FROM t1;
+------+
| f1 |
+------+
| 1 |
+------+
1 row in set (0.00 sec)

<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.

mysql> EXPLAIN EXTENDED SELECT * FROM t1, t2\G


*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: t1
type: system
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 1
filtered: 100.00
Extra:
*************************** 2. row ***************************
id: 2

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`

7KHILQDOQRWHLQWKHRXWSXWVKRZVWKDWWKHTXHU\ZDVPRGLILHGWRDQ LQQHU JOINZKLFK


FDQUHWXUQURZVIURPHDFKWDEOHRQO\LIWKHUHDUHPDWFKLQJURZVLQWKHRWKHUWDEOH)RU
HDFKURZLQWDEOHt1WKHUHVKRXOGEHDWOHDVWRQHURZLQWDEOHt2ZLWKDPDWFKLQJYDOXH
LQDPDWFKLQJURZ,QWKLVFDVHEHFDXVHWDEOHt2LVHPSW\QDWXUDOO\WKHMRLQUHWXUQVDQ
HPSW\VHW
■ :HMXVWOHDUQHGDQRWKHULPSRUWDQWWHFKQLTXHWKDWKHOSVXVILQGRXWZKDWLVZURQJ
ZLWK DQ UPDATE RU DELETE FRQYHUW LW WR D SELECT ZLWK WKH VDPH JOIN DQG WHERE
FRQGLWLRQV:LWKDSELECT\RXFDQXVHEXPLAIN EXTENDEDWRJHWWKHDFWXDOH[HFX
WLRQSODQDVZHOODVWRPDQLSXODWHWKHUHVXOWVHWZLWKRXWWKHULVNRIPRGLI\LQJWKH
ZURQJURZV
+HUH¦VDPRUHFRPSOH[H[DPSOHXVLQJUPDATE:HZLOOXVHWKHitemsWDEOHDJDLQ
mysql> SELECT SUBSTR(description, 1, 20), additional IS NULL FROM items;
+----------------------------+--------------------+
| substr(description, 1, 20) | additional IS NULL |
+----------------------------+--------------------+
| NULL | 1 |
| NULL | 1 |
| One who has TRIGGER | 1 |
| mysql> revoke insert | 1 |
| NULL | 0 |
+----------------------------+--------------------+
5 rows in set (0.00 sec)

mysql> SELECT description IS NULL, additional IS NULL FROM items;


+---------------------+--------------------+
| description IS NULL | additional IS NULL |
+---------------------+--------------------+
| 1 | 1 |
| 1 | 1 |
| 0 | 1 |
| 0 | 1 |

 6LQFHYHUVLRQ\RXFDQXVHEXPLAINZLWKUPDATEDQGDELETEDVZHOOEXWFRQYHUWLQJVXFKDTXHU\LQWR
SELECTVWLOOPDNHVVHQVHEHFDXVHLWLVHDVLHUWRH[DPLQHDQDFWXDOUHVXOWVHWDQGPDQLSXODWHLWWKDQWRMXVW
XVH EXPLAIN7KLVLVHVSHFLDOO\WUXHIRUFRPSOLFDWHG JOINVZKHQ EXPLAINVKRZVLWH[DPLQHGPRUHURZV
WKDQZHUHDFWXDOO\XSGDWHG

When the Problem May Have Been a Previous Update | 13


| 1 | 0 |
+---------------------+--------------------+
5 rows in set (0.00 sec)

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

7KLVTXHU\XSGDWHVVRPHGDWD £URZVDIIHFWHG¤ EXWOHW¦VFKHFNZKHWKHUZHKDYHWKH


SURSHUYDOXHVLQWKHWDEOHQRZ
mysql> SELECT SUBSTR(description, 1, 20), additional IS NULL FROM items;
+----------------------------+--------------------+
| substr(description, 1, 20) | additional IS NULL |
+----------------------------+--------------------+
| 0 | 1 |
| 0 | 1 |
| One who has TRIGGER | 1 |
| mysql> revoke insert | 1 |
| 0 | 0 |
+----------------------------+--------------------+
5 rows in set (0.09 sec)

$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

mysql> SHOW WARNINGS;


+---------+------+----------------------------------------------------+
| Level | Code | Message |
+---------+------+----------------------------------------------------+
| Warning | 1292 | Truncated incorrect DOUBLE value: 'no description' |
| Warning | 1292 | Truncated incorrect DOUBLE value: 'no description' |
| Warning | 1292 | Truncated incorrect DOUBLE value: 'no description' |
+---------+------+----------------------------------------------------+
3 rows in set (0.00 sec)

7KHPHVVDJHORRNVVWUDQJH:K\GRHVLWFRPSODLQDERXWD DOUBLEZKHQ description


DQGadditionalDUHTEXTILHOGVDVWKHIROORZLQJTXHULHVSURYH"
mysql> SHOW FIELDS FROM items LIKE 'description';
+-------------+------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+------+------+-----+---------+-------+

14 | Chapter 1:ಗBasics
| description | text | YES | | NULL | |
+-------------+------+------+-----+---------+-------+
1 row in set (0.13 sec)

mysql> SHOW FIELDS FROM items LIKE 'additional';


+------------+------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+------+------+-----+---------+-------+
| additional | 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 |

When the Problem May Have Been a Previous Update | 15


| 0 |
| 0 |
| 0 |
+------------------------------------------------------------+
5 rows in set, 5 warnings (0.09 sec)

: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

Getting Information About a Query


$VZHVDZLQWKHSUHYLRXVVHFWLRQWKHVHUYHUUHWXUQVVRPHLPSRUWDQWLQIRUPDWLRQDERXW
HDFKTXHU\GLVSOD\LQJVRPHRILWGLUHFWO\LQWKH0\64/FOLHQWDQGPDNLQJVRPHRILW
HDV\WRREWDLQWKURXJKFRPPDQGVVXFKDVSHOW WARNINGS:KHQ64/LVFDOOHGIURPDQ
DSSOLFDWLRQLW¦VMXVWDVLPSRUWDQWWRUHWULHYHWKLVLQIRUPDWLRQDQGFKHFNWRPDNHVXUH
QRWKLQJVXVSLFLRXVLVJRLQJRQ$OOSURJUDPPLQJ$3,VIRU0\64/VXSSRUWIXQFWLRQV
WKDWUHWULHYHWKHTXHU\LQIRUPDWLRQUHWXUQHGE\WKHVHUYHU,QWKLVVHFWLRQZHZLOOGLVFXVV
WKHVHIXQFWLRQV,UHIHUMXVWWRWKH&$3,EHFDXVH,KDGWRFKRRVHRQHODQJXDJHDQG
PRVWRIWKHRWKHU$3,VDUHEDVHGRQWKH&$3,
1XPEHURIURZVDIIHFWHG
/HW¦VVWDUWZLWKWKHVLPSOHRXWSXWZHVDZHDUOLHUZKLFKLVGLVSOD\HGDIWHUHDFK
LQVHUWXSGDWHRUGHOHWHDQGVKRZVKRZPDQ\URZVZHUHLQVHUWHGXSGDWHGRU
GHOHWHG
Query OK, N rows affected

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

Getting Information About a Query | 17


PRGLILHG%HVXUHWRFKHFNIRUZDUQLQJVDQ\ZD\EHFDXVHWKH\ZLOOOHW\RXNQRZ
DERXWSRWHQWLDOSUREOHPV
,Q\RXUDSSOLFDWLRQ\RXFDQUHWULHYHZDUQLQJVLQDIHZGLIIHUHQWZD\V<RXFDQXVH
mysql_info()DJDLQDQGSDUVHIRU£:DUQLQJV¤<RXFDQDOVRLVVXH
mysql_warning_count()

,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\

Tracing Back Errors in Data


,I\RXULJRURXVO\FKHFNWKHUHVXOWVRI\RXUTXHULHVDQGXSGDWHV\RX¦OOFDWFKPDQ\RI
WKHSUREOHPVWKDWFRXOGRWKHUZLVHJRXQGHWHFWHGIRUZHHNVDQGFDXVHDORWRIJULHI
ZKHQWKHSUREOHPVILQDOO\JURZWRRODUJHWRPLVV%XWSUREOHPVGRFUHHSXSRQ\RX
6RPHWLPHVDSELECTVXGGHQO\VWDUWVUHWXUQLQJZURQJUHVXOWVEXW\RXUH[SHULPHQWVZLWK
WKHTXHU\MXVWFRQILUPWKHUHLVQRWKLQJZURQJZLWKLW
,QWKLVFDVH\RXQHHGWRLPLWDWHXVHUDFWLRQVEXWLQUHYHUVHRUGHUXQWLO\RXILQGWKH
VRXUFHRIWKHHUURU,I\RXDUHOXFN\\RXZLOOFDWFKWKHSUREOHPLQDVLQJOHVWHS8VXDOO\
LWZLOOWDNHPXOWLSOHVWHSVDQGVRPHWLPHVDYHU\ORQJWLPH
$ORWRIWKHVHLVVXHVKDSSHQEHFDXVHWKHGDWDLVGLIIHUHQWRQWKHPDVWHUDQGVODYHLQD
UHSOLFDWLRQ HQYLURQPHQW 2QH FRPPRQ SUREOHP LV GXSOLFDWH YDOXHV ZKHUH WKH\ DUH
VXSSRVHGWREHXQLTXH HJLIDXVHUUHOLHVRQDQ INSERT ON DUPLICATE KEY UPDATE
VWDWHPHQWEXWDWDEOHKDVDGLIIHUHQWVWUXFWXUHRQWKHPDVWHUDQGVODYH )RUVXFKVHWXSV
WKH XVHU XVXDOO\ QRWLFHV WKH SUREOHP ODWHU ZKHQ SELECT VWDWHPHQWV TXHU\ WKH VODYH
LQVWHDGRIQRWLFLQJWKHPZKHQWKHINSERTWDNHVSODFH7KLQJVEHFRPHHYHQZRUVHZKHQ
WKLVKDSSHQVGXULQJFLUFXODUUHSOLFDWLRQ
7RLOOXVWUDWHWKLVSUREOHPZH¦OOZRUNZLWKDVWRUHGSURFHGXUHWKDWLQVHUWVLQWRDWDEOH
IURPDWHPSRUDU\WDEOHWKDWZDVFUHDWHGWRKROGWKHUHVXOWVRIRWKHUVHOHFWV7KLVLV

Tracing Back Errors in Data | 19


DQRWKHUH[DPSOHRIDFRPPRQWHFKQLTXHZKHQDXVHUZDQWVWRKDQGOHGDWDIURPODUJH
WDEOHVZLWKRXWWKHULVNRIPRGLI\LQJGDWDLQDGYHUWHQWO\RUEORFNLQJRWKHUDSSOLFDWLRQV
WKDWDUHXVLQJWKHODUJHWDEOHV
/HW¦VFUHDWHRXUWDEOHDQGSRSXODWHLWZLWKWHPSRUDU\YDOXHV,QDUHDODSSOLFDWLRQWKH
WHPSRUDU\WDEOHZRXOGKROGDUHVXOWVHWIURPVRPHFDOFXODWLRQWKDWLVZDLWLQJWREH
VWRUHGLQWKHPDLQWDEOH
CREATE TABLE t1(f1 INT) ENGINE=InnoDB;
CREATE TEMPORARY TABLE t2(f1 INT) ENGINE=InnoDB;

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

Tracing Back Errors in Data | 21


%XWZK\GLGLWKDSSHQ"5HSOLFDWLRQVHHPVWREHUXQQLQJILQHVRZHVXVSHFWDORJLF
HUURURQWKHPDVWHU+DYLQJGLVFRYHUHGDSRVVLEOHVRXUFHRIWKHSUREOHP\RXQHHGWR
DQDO\]HWKHVWRUHGSURFHGXUHDQGWKHFDOOVRQWKHPDVWHUWRILQGDIL[
$V,VDLGEHIRUHWKHVODYHVHUYHUZDVUHVWDUWHGDIWHUHYHQWVWKDWLQVHUWGDWDLQWRWKH
WHPSRUDU\WDEOHZHUHUHSOLFDWHGDQGHPSWLHGWKHWHPSRUDU\WDEOHEXWEHIRUHWKHVWRUHG
SURFHGXUH FDOO WKDW VHOHFWV DQG LQVHUWV GDWD LQWR WKH PDLQ WDEOH 6R WKH VODYH MXVW
UHFUHDWHGDQHPSW\WHPSRUDU\WDEOHDQGLQVHUWHGQRGDWD
,QWKLVFDVH\RXFDQHLWKHUVZLWFKWRURZEDVHGUHSOLFDWLRQRUUHZULWHWKHSURFHGXUHVR
LWGRHVQRWUHO\RQWKHH[LVWHQFHRIWKHWHPSRUDU\WDEOH$QRWKHUDSSURDFKLVWRWUXQFDWH
DQGWKHQUHILOOWKHWDEOHVRWKDWDVXGGHQUHVWDUWZLOOQRWOHDYHWKHVODYHZLWKRXWGDWD
2QHPLJKWWKLQNWKDWWKLVH[DPSOHLVYHU\DUWLILFLDODQGWKDW\RXFDQ¦WSUHGLFWZKHQD
VHUYHUZLOOVXGGHQO\UHVWDUW7KLVLVFRUUHFWEXWUHVWDUWVDUHVXUHWRKDSSHQIURPWLPH
WRWLPH7KHUHIRUH\RXQHHGWRZRUU\DERXWVXFKHUURUV
$FWXDOO\DVODYHUHSOLFDWHVELQDU\ORJHYHQWVRQHE\RQHDQGZKHQGDWDLVFUHDWHGZLWKLQ
DQDWRPLFHYHQW HJDWUDQVDFWLRQRUVWRUHGSURFHGXUHFDOO WKHVODYHZRXOGQRWEH
DIIHFWHGE\WKLVLVVXH%XWDJDLQWKLVH[DPSOHZDVMXVWDVLPSOHRQHWRVKRZWKHFRQFHSW
EHKLQGHYHQWVWKDWGRKDSSHQLQUHDOOLIH
■ :KHQ\RXH[SHULHQFHDSUREOHPRQDVWDWHPHQWWKDW\RXNQRZLVFRUUHFWFKHFN
ZKDW\RXUDSSOLFDWLRQGLGEHIRUH\RXVDZWKHSUREOHP
0RUHGHWDLOVRQUHSOLFDWLRQHUURUVDUHLQ&KDSWHU

Single Server Example


,RQFHZRUNHGRQDZHEDSSOLFDWLRQWKDWVWRUHGPHDVXUHPHQWVPDGHLQGLIIHUHQWFXWWLQJ
V\VWHPV 7KH XVHU FRXOG DGG D V\VWHP WKHQ HGLW WKH UXOHV DERXW KRZ LW VDYHG LWV
PHDVXUHPHQWV
7KHILUVWWLPH,PHWWKHHUURU,WHVWHGDZHESDJHZLWKDOLVWRIV\VWHPV
Existing systems

* System 1
* Test
* test2
* test2
* test2

Enter name of new system:


<>
Description:
<>

<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

Tracing Back Errors in Data | 23


EXWEHFDXVH,DOVRXVH0\64/¦VDELOLW\WRJHQHUDWHDQDXWRLQFUHPHQWHGYDOXHIRUidLQ
WKHINSERTQRWKLQJSUHYHQWHGPHIURPXVLQJWKHVDPHQDPHUHSHDWHGO\
7RVROYHWKHSUREOHP,PDQXDOO\UHPRYHGWKHVXSHUIOXRXVURZVDQGDGGHGD UNIQUE
LQGH[
ALTER TABLE system ADD UNIQUE(name)

: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

Tuning a Query with Information from EXPLAIN


7KHPRVWSRZHUIXOWRROIRUTXHU\WXQLQJLVRXUROGDFTXDLQWDQFH EXPLAIN7KLVVWDWH
PHQWSURYLGHVLQIRUPDWLRQDERXWKRZWKHVHUYHUDFWXDOO\H[HFXWHVDTXHU\'HWDLOVRI
0\64/EXPLAINDUHFRYHUHGTXLWHZHOOLQWKH0\64/5HIHUHQFH0DQXDODQG,ZLOOQRW
UHSHDWWKDWLQIRUPDWLRQKHUH5DWKHU,¦OOSLFNRXWZKDW,¦YHIRXQGWREHWKHPRVWLP
SRUWDQWDQGXVHIXOHOHPHQWVRIWKHRXWSXW
7KHILUVWOLQHV\RXVKRXOGORRNDWDUHtypeZKLFKDFWXDOO\VKRZVWKHW\SHRIMRLQSHU
IRUPHGDQGrowsZKLFKVKRZVDQHVWLPDWHRIKRZPDQ\URZVZHUHH[DPLQHGGXULQJ
WKHTXHU\ )RULQVWDQFHLIWKHTXHU\KDGWRVFDQWKHZKROHWDEOHWKHQXPEHURIURZV
ZRXOGHTXDOWKHQXPEHURIURZVLQWKHWDEOH 0XOWLWDEOHMRLQVKDYHWRH[DPLQHD&DU
WHVLDQSURGXFWRIWKHQXPEHURIURZVH[DPLQHGLQHDFKWDEOH7KXVLIWKHTXHU\H[
DPLQHV  URZV LQ RQH WDEOH DQG  LQ DQRWKHU WKH MRLQ SHUIRUPV D WRWDO RI 

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)

mysql> SELECT count(*) FROM items_links;


+----------+
| count(*) |
+----------+
| 6 |
+----------+
1 row in set (0.00 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)

Note (Code 1003): select count(0) AS `count(*)` from `collaborate2011`.`items`


join `collaborate2011`.`items_links` where (`collaborate2011`.`items`.`id` =
`collaborate2011`.`items_links`.`iid`)

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)

Note (Code 1003): select count(distinct `collaborate2011`.`items`.`id`) AS


`count(distinct items.id)` from `collaborate2011`.`items` join
`collaborate2011`.`items_links` where (`collaborate2011`.`items`.`id` =
`collaborate2011`.`items_links`.`iid`)

,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[

Table Tuning and Indexes


,QWKHSUHYLRXVVHFWLRQZHLQWURGXFHGWKHSURFHVVRIWXQLQJTXHULHV,QDOOWKHH[DPSOHV
EXPLAINRXWSXWFRQWDLQHGLQIRUPDWLRQDERXWLQGH[HV%XWZKDWLIDWDEOHKDVQRLQGH[
DWDOO"2ULIWKHLQGH[HVDUHQRWEHLQJXVHG"+RZVKRXOG\RXFKRRVHZKHQZKHUHDQG
ZKLFKLQGH[WRDGG"
7KH0\64/VHUYHUXVHVLQGH[HVZKHQUHVXOWVFDQEHOLPLWHG7KHUHIRUHKDYLQJLQGH[HV
RQFROXPQVOLVWHGLQWHEREJOINDQGGROUP BYFDQVSHHGXSTXHULHV+DYLQJDQLQGH[
RQWKHFROXPQLQDQ ORDER BYFODXVHFDQPDNHVHQVHDVZHOOEHFDXVHLWZLOODOORZWKH
VHUYHUWRGRPRUHHIIHFWLYHVRUWLQJ
:LWKWKRVHSULQFLSOHVLQPLQGDGGLQJLQGH[HVEHFRPHVDVLPSOHWDVN&RQVLGHUWDEOHV
IURPWKHSUHYLRXVH[DPSOHEXWZLWKRXWDQ\LQGH[HV
mysql> CREATE TEMPORARY TABLE items SELECT * FROM items;
Query OK, 5120 rows affected (6.97 sec)
Records: 5120 Duplicates: 0 Warnings: 0

mysql> CREATE TEMPORARY TABLE items_links SELECT * FROM items_links;


Query OK, 6 rows affected (0.36 sec)
Records: 6 Duplicates: 0 Warnings: 0

mysql> SHOW CREATE TABLE items;


+-------+----------------------------------------------------------------------+
| Table | Create Table |
+-------+----------------------------------------------------------------------+
| items | CREATE TEMPORARY TABLE `items` (
`id` int(11) NOT NULL DEFAULT '0',
`short_description` varchar(255) DEFAULT NULL,
`description` text,
`example` text,
`explanation` text,
`additional` text
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+----------------------------------------------------------------------+
1 row in set (0.10 sec)

mysql> SHOW CREATE TABLE items_links;


+-------------+----------------------------------------------------------------+
| Table | Create Table |

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)

Note (Code 1003): select count(distinct `collaborate2011`.`items`.`id`) AS


`count(distinct items.id)` from `collaborate2011`.`items` join
`collaborate2011`.`items_links` where (`collaborate2011`.`items`.`id` =
`collaborate2011`.`items_links`.`iid`)

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

mysql> ALTER TABLE items_links ADD INDEX(iid);


Query OK, 6 rows affected (0.04 sec)
Records: 6 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)

Note (Code 1003): select count(distinct `collaborate2011`.`items`.`id`) AS


`count(distinct items.id)` from `collaborate2011`.`items` join
`collaborate2011`.`items_links` where (`collaborate2011`.`items`.`id` =
`collaborate2011`.`items_links`.`iid`)

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)

Note (Code 1003): select count(distinct `collaborate2011`.`items`.`id`) AS


`count(distinct items.id)` from `collaborate2011`.`items` join
`collaborate2011`.`items_links` where (`collaborate2011`.`items`.`id` =
`collaborate2011`.`items_links`.`iid`)

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

Choosing Your Own Execution Plan


7KHUHDUHFDVHVZKHQDQLQGH[DFWXDOO\VORZVGRZQDTXHU\,QWKLVFDVH\RXFDQGURS
WKHLQGH[RUXVHDQ IGNORE INDEXFODXVHLI\RXQHHGWKHLQGH[IRURWKHUTXHULHV<RX
FDQDOVRXVHFORCE INDEXWROHWWKHRSWLPL]HUNQRZZKLFKLQGH[\RXZDQWWRXVH7KHVH
FODXVHVFDQDOVREHYHU\XVHIXOIRUTXHU\WXQLQJZKHQ\RXZDQWWRVHHKRZDSDUWLFXODU
LQGH[FDQDIIHFWSHUIRUPDQFH-XVWWU\EXPLAINXVLQJWKHFODXVHVDQGDQDO\]HWKHRXWSXW
$OWKRXJKXVHRIIGNORE INDEXDQGFORCE INDEXPD\VRXQGDSSHDOLQJ\RXVKRXOGDYRLG
XVLQJWKHPLQSURGXFWLRQZKHQSRVVLEOHXQOHVV\RXDUHUHDG\WRH[DPLQHHYHU\TXHU\
ZLWKVXFKDFODXVHGXULQJHDFKIROORZLQJXSJUDGH
7KLVLVUHTXLUHGEHFDXVHWKHRSWLPL]HUDOZD\VWULHVWRFKRRVHWKHEHVWSODQIRUH[HFXWLRQ
,PSURYLQJ IURP YHUVLRQ WR YHUVLRQ LW FDQ FUHDWH GLIIHUHQW SODQV IRU WKH VDPH JOINV

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

When to Stop Optimizing


7KHSUHYLRXVVHFWLRQVGLVFXVVHGVLPSOHTXHULHV(YHQWKHUHZHIRXQGZD\VWRLPSURYH
WKHTXHULHVVRPHWLPHVZLWKLQFUHDVLQJO\EHWWHUUHVXOWVRYHUVHYHUDOLWHUDWLRQVRIWXQLQJ
:KHQ\RXZRUNZLWKFRPSOLFDWHGTXHULHVZLWKDORWRIJOINFRQGLWLRQVDORWRIFROXPQV
LQ WHEREFODXVHVDQG GROUP BYFODXVHV\RXKDYHHYHQPRUHFKRLFHV,W¦VSRVVLEOHWR
LPDJLQHWKDW\RXFRXOGDOZD\VILQGDZD\WRPDNHSHUIRUPDQFHHYHQIDVWHUDQGWKDW
WKHVHLPSURYHPHQWVFDQFRQWLQXHIRUHYHU6RWKHTXHVWLRQLVZKHQWRFRQVLGHUDTXHU\
SURSHUO\RSWLPL]HGDQGSXWDVWRSWRWKHUHVHDUFK
$QLQGHSWKNQRZOHGJHRISHUIRUPDQFHWHFKQLTXHVFRXOGKHOS\RXFKRRVHWKHSURSHU
VROXWLRQ%XWWKHUHDUHVWLOOEDVLFFRQVLGHUDWLRQVWKDWFDQKHOS\RXWRVWRSHYHQLI\RX
GRQ¦WFRQVLGHU\RXUVHOIDQH[SHUW
)LUVW\RXQHHGWRILQGRXWZKDWWKHTXHU\GRHV)RUH[DPSOHWKHIROORZLQJTXHU\
SELECT * FROM contacts

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

Queries That Modify Data


:HGLVFXVVHGHIIHFWVRQWKHSHUIRUPDQFHRISELECTTXHULHVDQGLQWKLVVHFWLRQZHWXUQ
WRWXQLQJTXHULHVWKDWPRGLI\GDWDUPDATEDQGDELETETXHULHVFDQXVHWKHVDPHFRQGL
WLRQVDVSELECTWROLPLWWKHQXPEHURIURZVDIIHFWHG7KHUHIRUHWKHVDPHUXOHVIRUWXQLQJ
FDQEHDSSOLHGWRWKHVHTXHULHV
:HVDZLQ£:KHQWKH3UREOHP0D\+DYH%HHQD3UHYLRXV8SGDWH¤RQSDJHKRZWR
FRQYHUWUPDATEDQGDELETETXHULHVWRSELECTTXHULHVDQGUXQEXPLAINRQWKHP<RXFDQ
XVHWKLVWHFKQLTXHWRWURXEOHVKRRWSHUIRUPDQFHLVVXHVRQYHUVLRQVSULRUWRZKLFK

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)

o +HUH,XVHGSHOW STATUSZKLFKLVDV\QRQ\PRISHOW SESSION STATUSDQGVKRZVWKH


VWDWXVYDULDEOHVIRUWKHFXUUHQWVHVVLRQ
» ?,
,W LV FRQYHQLHQW WR UHVHW WKHVH YDULDEOHV EHIRUH WHVWLQJ XVLQJ D
FLUSH STATUSTXHU\

* 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\

When the Server Does Not Answer


2FFDVLRQDOO\ D 0\64/ FOLHQW JHWV WKH FDWDVWURSKLF PHVVDJH "Lost connection to
server during query"RU"Server has gone away."$OWKRXJK,KRSH\RXZLOOQHYHUIDFH
WKLVSUREOHPLW¦VJRRGWREHSUHSDUHGLQFDVHLWKDSSHQV7KHUHDUHWZRPDLQUHDVRQV
IRUWKLVSUREOHPFDXVHGE\WKH0\64/LQVWDOODWLRQLWVHOIVHUYHULVVXHV PRVWOLNHO\D
FUDVK  RU WKH PLVXVH RI FRQQHFWLRQ RSWLRQV XVXDOO\ WLPHRXW RSWLRQV RU
max_allowed_packet 
:HZLOOGLVFXVVWKHFRQILJXUDWLRQRIFRQQHFWLRQVLQ&KDSWHU3UREOHPVFDXVHGE\
KDUGZDUHDQGWKLUGSDUW\VRIWZDUHZLOOEHWRXFKHGRQLQ&KDSWHU+HUH,ZDQWWR
EULHIO\GHVFULEHZKDWWRGRLIWKHVHUYHUFUDVKHV
)LUVWGHWHUPLQHZKHWKHU\RXUHDOO\KDGDVHUYHUFUDVK<RXFDQGRWKLVZLWKWKHKHOS
RISURFHVVVWDWXVPRQLWRUV,I\RXUXQP\VTOGBVDIHRUDQRWKHUGDHPRQWKDWUHVWDUWVWKH

When the Server Does Not Answer | 39


VHUYHUDIWHUDIDLOXUHWKHHUURUORJZLOOFRQWDLQDPHVVDJHLQGLFDWLQJWKHVHUYHUKDVEHHQ
UHVWDUWHG:KHQP\VTOGVWDUWVLWDOZD\VSULQWVVRPHWKLQJOLNHWKLVWRWKHHUURUORJILOH
110716 14:01:44 [Note] /apps/mysql-5.1/libexec/mysqld: ready for connections.
Version: '5.1.59-debug' socket: '/tmp/mysql51.sock' port: 3351 Source distribution

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

It is possible that mysqld could use up to

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

When the Server Does Not Answer | 41


The manual page at http://dev.mysql.com/doc/mysql/en/crashing.html contains
information that should help you find out what

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

:KHQ , UHFRPPHQG UHSHDWLQJ SUREOHPV , DVVXPH \RX ZLOO XVH WKH


GHYHORSPHQW VHUYHU DQG QRW \RXU SURGXFWLRQ VHUYHU :H ZLOO GLVFXVV
a,:' KRZWRVDIHO\WURXEOHVKRRWLQDQHQYLURQPHQWGHGLFDWHGWRWKLVSXUSRVH
LQ£6DQGER[HV¤RQSDJH3OHDVHGRQ¦WWU\WRUHSHDWWKLVH[DPSOHLW
LVEDVHGRQDNQRZQEXJWKDW¦VIL[HGLQFXUUHQWYHUVLRQV7KH
IL[H[LVWVVLQFHYHUVLRQVDQG

$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)

When the Server Does Not Answer | 43


7KHQHZTXHU\GRHVQRWFUDVKVRDOO\RXQHHGWRGRLVFKDQJHWKHTXHU\LQWKHDSSOL
FDWLRQWRPDWFK
■ <RX MXVW OHDUQHG VRPHWKLQJ LPSRUWDQW DERXW 0\64/ WURXEOHVKRRWLQJ WKH ILUVW
WKLQJ WR FKHFN LQ FDVH RI DQ XQNQRZQ HUURU LV WKH HUURU ORJILOH $OZD\V KDYH LW
WXUQHGRQ
+HUH,ZDQWWRDGGDQRWHDERXWEXJV:KHQ\RXDUHIDFHGZLWKDFUDVKDQGLGHQWLI\
WKHUHDVRQFKHFNWKH0\64/EXJGDWDEDVHIRUVLPLODUSUREOHPV:KHQ\RXILQGDEXJ
WKDWORRNVOLNHWKHRQH\RXKLWFKHFNZKHWKHULWKDVEHHQIL[HGDQGLIVRXSJUDGH\RXU
VHUYHUWRWKHYHUVLRQZKHUHWKHEXJZDVIL[HG RUDQHZHURQH 7KLVFDQVDYH\RXWLPH
EHFDXVH\RXZRQ¦WKDYHWRIL[WKHSUREOHPDWLFTXHU\
,I\RXFDQ¦WILQGDEXJVLPLODUWRRQH\RXKLWWU\GRZQORDGLQJWKHODWHVWYHUVLRQRIWKH
0\64/VHUYHUDQGUXQQLQJ\RXUTXHU\,IWKHEXJLVUHSURGXFLEOHWKHUHUHSRUWLW,W¦V
LPSRUWDQWWRXVHWKHODWHVWYHUVLRQVRIVWDEOHJHQHUDODYDLODELOLW\ *$ UHOHDVHVEHFDXVH
WKH\ FRQWDLQ DOO FXUUHQW EXJ IL[HV DQG PDQ\ ROG LVVXHV ZRQ¦W UHDSSHDU &KDSWHU 
GLVFXVVHVKRZWRVDIHO\WHVWFUDVKHVLQVDQGER[HQYLURQPHQWV
&UDVKHVFDQEHFDXVHGQRWRQO\E\SDUWLFXODUTXHULHVEXWDOVRE\WKHHQYLURQPHQWLQ
ZKLFKWKHVHUYHUUXQV7KHPRVWFRPPRQUHDVRQLVWKHODFNRIIUHH5$07KLVKDSSHQV
SDUWLFXODUO\ ZKHQ WKH XVHU DOORFDWHV KXJH EXIIHUV $V , QRWHG EHIRUH P\VTOG DOZD\V
QHHGVVOLJKWO\PRUH5$0WKDQWKHVXPRIDOOEXIIHUV8VXDOO\WKHHUURUORJILOHFRQWDLQV
DURXJKHVWLPDWLRQRIWKH5$0WKDWFDQEHXVHG,WORRNVOLNHWKLV
key_buffer_size=235929600
read_buffer_size=4190208
max_used_connections=17
max_connections=2048
threads_connected=13
It is possible that mysqld could use up to
key_buffer_size + (read_buffer_size + sort_buffer_size)*max_connections = 21193712 K
-----
21193712K ~= 20G

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

Issues with Solutions Specific to Storage Engines


$FWXDOO\DQ\SUREOHPWKLVERRNGLVFXVVHVFRXOGKDYHVSHFLILFQXDQFHVEDVHGRQWKH
VWRUDJHHQJLQH\RXXVH:HZLOOWRXFKXSRQWKHVHDVSHFWVWKURXJKRXWWKHERRN,QWKLV
VHFWLRQ,ZDQWWRVKRZDIHZIHDWXUHVRIVWRUDJHHQJLQHVWKDWDUHLQGHSHQGHQWRIRWKHU

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

Issues with Solutions Specific to Storage Engines | 45


Repairing a MyISAM table from SQL
CHECK TABLEZLWKRXWSDUDPHWHUVVKRZVWKHFXUUHQWWDEOHVWDWXV
mysql> CHECK TABLE t2;
+---------+-------+----------+------------------------------------------------------+
| Table | Op | Msg_type | Msg_text |
+---------+-------+----------+------------------------------------------------------+
| test.t2 | check | warning | Table is marked as crashed and last repair failed |
| test.t2 | check | warning | Size of indexfile is: 1806336 Should be: 495616 |
| test.t2 | check | error | Record-count is not ok; is 780 Should be: 208 |
| test.t2 | check | warning | Found 780 key parts. Should be: 208 |
| test.t2 | check | error | Corrupt |
+---------+-------+----------+------------------------------------------------------+
5 rows in set (0.09 sec)

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)

,IDVLPSOHREPAIR TABLEUXQGRHVQRWKHOSWKHUHDUHWZRPRUHRSWLRQVREPAIR TABLE


EXTENDEDZRUNVPRUHVORZO\WKDQWKHEDUHREPAIR TABLEEXWFDQIL[RIHUURUV$V
DODVWUHVRUWUXQ REPAIR TABLE USE_FRMZKLFKGRHVQRWWUXVWWKHLQIRUPDWLRQLQWKH
LQGH[ILOH,QVWHDGLWGURSVDQGWKHQUHFUHDWHVWKHLQGH[XVLQJWKHGHVFULSWLRQIURPWKH
table_nameIUPILOHDQGILOOVWKHNH\ZLWKYDOXHVIURPWKHtable_name0<'ILOH

)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

Issues with Solutions Specific to Storage Engines | 47


H[FHUSWIURPWKHHUURUORJWDNHQDIWHUDEDFNXSE\0\64/(QWHUSULVH%DFNXS 0(%
XVLQJWKHmysqlbackup --copy-backFRPPDQGVKRZVDW\SLFDOUHFRYHU\
InnoDB: The log file was created by ibbackup --apply-log at
InnoDB: ibbackup 110720 21:33:50
InnoDB: NOTE: the following crash recovery is part of a normal restore.
InnoDB: The log sequence number in ibdata files does not match
InnoDB: the log sequence number in the ib_logfiles!
110720 21:37:15 InnoDB: Database was not shut down normally!
InnoDB: Starting crash recovery.
InnoDB: Reading tablespace information from the .ibd files...
InnoDB: Restoring possible half-written data pages from the doublewrite
InnoDB: buffer...
InnoDB: Last MySQL binlog file position 0 98587529, file name ./blade12-bin.000002
110720 21:37:15 InnoDB Plugin 1.0.17 started; log sequence number 1940779532
110720 21:37:15 [Note] Event Scheduler: Loaded 0 events
110720 21:37:15 [Note] ./libexec/mysqld: ready for connections.
Version: '5.1.59-debug' socket: '/tmp/mysql_ssmirnova.sock' port: 33051
Source distribution

%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

 0\64/(QWHUSULVH%DFNXS 0(% IRUPHUO\NQRZQDV,QQR'%+RW%DFNXSLVDWRROWKDWFUHDWHVKRWRQOLQH


EDFNXSVRI,QQR'%WDEOHVDQGZDUPRQOLQHEDFNXSVRIWDEOHVWKDWXVHRWKHUVWRUDJHHQJLQHV:HZLOO
GLVFXVVEDFNXSPHWKRGVLQ&KDSWHU

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)

root> GRANT SELECT ON book.* TO sveta@'localhost';


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.

Oracle is a registered trademark of Oracle Corporation and/or its


affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> CREATE TABLE t1(f1 INT);


ERROR 1142 (42000): CREATE command denied to user 'sveta'@'localhost' for table 't1'

7KHSUREOHPLVWKDWWKH0\64/VHUYHUH[SDQGV svetaWR sveta@localhostQRWWRWKH


ZLOGFDUG
mysql> SELECT user(), current_user();
+-----------------+-----------------+
| user() | current_user() |
+-----------------+-----------------+
| sveta@localhost | sveta@localhost |
+-----------------+-----------------+
1 row in set (0.00 sec)

,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)

mysql> SHOW GRANTS FOR 'sveta'@'localhost';


+-------------------------------------------------+
| Grants for sveta@localhost |
+-------------------------------------------------+
| GRANT USAGE ON *.* TO 'sveta'@'localhost' |
| GRANT SELECT ON `book`.* TO 'sveta'@'localhost' |
+-------------------------------------------------+
2 rows in set (0.00 sec)

mysql> SHOW GRANTS FOR 'sveta'@'%';


+-------------------------------------------------+
| Grants for sveta@% |
+-------------------------------------------------+
| GRANT USAGE ON *.* TO 'sveta'@'%' |
| GRANT ALL PRIVILEGES ON `book`.* TO '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,

54 | Chapter 2:ಗYou Are Not Alone: Concurrency Issues


$V,PHQWLRQHGEHIRUH0\64/KDVIRXUNLQGRIORFNVWDEOHURZSDJHDQGPHWDGDWD
$WDEOHORFNDVWKHQDPHVXJJHVWVORFNVWKHZKROHWDEOHVRWKDWQRRQHFDQDFFHVVDQ\
URZLQWKHWDEOHXQWLOWKHORFNLQJWKUHDGXQORFNVWKHWDEOH5RZORFNLQJLVPXFKPRUH
ILQHJUDLQHGORFNLQJMXVWRQHURZRUZKDWHYHUQXPEHURIURZVDUHEHLQJDFFHVVHGE\
WKH WKUHDG VR RWKHU URZV LQ WKH VDPH WDEOH DUH DYDLODEOH IRU DFFHVV E\ FRQFXUUHQW
WKUHDGV3DJHORFNVORFNDSDJHEXWWKH\DUHIRXQGRQO\LQWKHUDUHO\XVHG%'%VWRUDJH
HQJLQHVR,ZLOOVD\QRPRUHDERXWLW+RZHYHUJHQHUDOORFNWURXEOHVKRRWLQJUHFRP
PHQGDWLRQVDSSO\WRWKLVNLQGRIORFNDVZHOO
0HWDGDWDORFNVDUHDQHZIHDWXUHLQWURGXFHGLQ0\64/YHUVLRQ7KHVHORFNVDSSO\
RQO\WRWKHPHWDGDWDIRUDWDEOHDQGORFNDOOWKHPHWDGDWDIRUWKDWWDEOHZKHQDWKUHDG
VWDUWVWRXVHWKHWDEOH0HWDGDWDLVWKHLQIRUPDWLRQDOWHUHGE\''/ 'DWD'HILQLWLRQ
/DQJXDJHRU'DWD'HVFULSWLRQ/DQJXDJH VWDWHPHQWVWKHCREATEDROPDQGALTERVWDWH
PHQWVWKDWPRGLI\VFKHPHV7KHLQWURGXFWLRQRIPHWDGDWDORFNVVROYHGDSUREOHPLQ
HDUOLHUYHUVLRQVRI0\64/ZKHQDWKUHDGFRXOGPRGLI\DWDEOHGHILQLWLRQRUHYHQGURS
LWZKLOHDQRWKHUWKUHDGXVHGWKHVDPHWDEOHLQDPXOWLVWDWHPHQWWUDQVDFWLRQ
,QWKHIROORZLQJVHFWLRQV,GHVFULEHWDEOHURZDQGPHWDGDWDORFNVDQGWKHLVVXHVWKH\
FDQFDXVHLQ\RXUDSSOLFDWLRQ

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)

mysql> SELECT * FROM t;


+-----+
| a |
+-----+
| 0 |
| 256 |
+-----+
2 rows in set (0.00 sec)

1RZLWUXQVLQDOPRVW]HURWLPH
7RILQGRXWZKDWKDSSHQHGZHQHHGWRUXQSHOW PROCESSLISTGXULQJWKHWLPHWKHTXHU\
LVUXQQLQJVORZO\

,QDQDFWXDODSSOLFDWLRQHQYLURQPHQW\RXZRXOGHLWKHUQHHGWRPDQ
XDOO\UXQDGLDJQRVWLFTXHU\GXULQJDEXV\WLPHRUVFKHGXOHDMREWKDW
a,:' ZLOOGRLWIRU\RXIURPWLPHWRWLPHDQGVDYHWKHUHVXOWV

mysql> SHOW PROCESSLIST\G


******************* 1. row *******************
Id: 1311
User: root
Host: localhost
db: test
Command: Query
Time: 35
State: Locked
Info: SELECT * FROM t
******************* 2. row *******************
Id: 1312
User: root
Host: localhost
db: test
Command: Query
Time: 36
State: User sleep
Info: UPDATE t SET a=sleep(200) WHERE a=0
******************* 3. row ******************
Id: 1314
User: root
Host: localhost
db: NULL
Command: Query
Time: 0

56 | Chapter 2:ಗYou Are Not Alone: Concurrency Issues


State: NULL
Info: SHOW PROCESSLIST
3 rows in set (0.00 sec)

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)

mysql> INSERT INTO t VALUES();


Query OK, 1 row affected (0.24 sec)

mysql> INSERT INTO t SELECT NULL FROM t;


Query OK, 1 row affected (0.19 sec)
Records: 1 Duplicates: 0 Warnings: 0

mysql> INSERT INTO t SELECT NULL FROM t;


Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0

mysql> INSERT INTO t SELECT NULL FROM t;


Query OK, 4 rows affected (0.01 sec)
Records: 4 Duplicates: 0 Warnings: 0

mysql> INSERT INTO t SELECT NULL FROM t;


Query OK, 8 rows affected (0.00 sec)
Records: 8 Duplicates: 0 Warnings: 0

mysql> SELECT * FROM t;


+----+
| a |
+----+
| 1 |
| 2 |
| 3 |
| 4 |
| 6 |
| 7 |
| 8 |
| 9 |
| 13 |
| 14 |
| 15 |
| 16 |
| 17 |
| 18 |
| 19 |
| 20 |
+----+
16 rows in set (0.00 sec)

/HW¦VUXQWKHVDPHVOHHSLQJ UPDATETXHU\DVEHIRUHWRVHHWKHGLIIHUHQWHIIHFWRIURZ
ORFNLQJFRPSDUHGWRWDEOHORFNV
mysql> UPDATE t SET a=sleep(200) WHERE a=6;

:KLOHWKHVOHHSLQJTXHU\LVUXQQLQJZHKDYHHQRXJKWLPHWRWU\WRVHOHFWURZVXVLQJ
DQRWKHUFOLHQW

58 | Chapter 2:ಗYou Are Not Alone: Concurrency Issues


mysql> SELECT * FROM t;
+----+
| a |
+----+
| 1 |
| 2 |
| 3 |
| 4 |
| 6 |
| 7 |
| 8 |
| 9 |
| 13 |
| 14 |
| 15 |
| 16 |
| 17 |
| 18 |
| 19 |
| 20 |
+----+
16 rows in set (0.00 sec)

: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

mysql> UPDATE t SET a=27 WHERE a=7;


Query OK, 1 row affected (0.09 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

2XUQHZTXHU\ZDLWVIRU innodb_lock_wait_timeoutVHFRQGV WKHGHIDXOWYDOXHLV 


WKHQGLHVZLWKDQHUURU:HKDYHWKHVDPHUHVXOWDVWDEOHORFNVLQWHUPVRIGDWDFRQ
VLVWHQF\EXWWKH,QQR'%ORFNGRHVQRWDIIHFWSDUDOOHOWKUHDGVXQWLOWKH\WU\WRDFFHVV
WKHH[DFWURZWKDWLVORFNHG

$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

60 | Chapter 2:ಗYou Are Not Alone: Concurrency Issues


WKLV WRRO IXUWKHU LQ £6+2: (1*,1( ,112'% 67$786 DQG ,QQR'% 0RQL
WRUV¤RQSDJHDQGLQGHWDLOLQ&KDSWHU
mysql> SHOW ENGINE INNODB STATUS \G
*************************** 1. row ***************************
Type: InnoDB
Name:
Status:
=====================================
110802 2:03:45 INNODB MONITOR OUTPUT
=====================================
Per second averages calculated from the last 41 seconds
...
------------
TRANSACTIONS
------------
Trx id counter 0 26243828
Purge done for trx's n:o < 0 26243827 undo n:o < 0 0
History list length 25
LIST OF TRANSACTIONS FOR EACH SESSION:
---TRANSACTION 0 0, not started, OS thread id 101514240
MySQL thread id 4483, query id 25022097 localhost root
show engine innodb status
---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:
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 - ;;

------------------
---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

62 | Chapter 2:ಗYou Are Not Alone: Concurrency Issues


,QHHGWRSRLQWRXWRQHWKLQJDERXWWKHSHUIRUPDQFHWURXEOHVKRRWLQJVHFWLRQLQWKH
SUHYLRXVFKDSWHU£6ORZ4XHULHV¤RQSDJH,QWKDWVHFWLRQ,ZURWHWKDWLQGH[HVFDQ
GHFUHDVHWKHSHUIRUPDQFHRILQVHUWVEHFDXVHWKH\QHHGWRXSGDWHLQGH[ILOHVDVZHOODV
LQVHUWGDWD%XWZKHQURZORFNVDUHLQXVHLQGH[HVFDQLQFUHDVHRYHUDOODSSOLFDWLRQ
SHUIRUPDQFH HVSHFLDOO\ ZKHQ DQ LQGH[ LV XQLTXH EHFDXVH ZKLOH XSGDWLQJ VXFK DQ
LQGH[HGILHOGLQVHUWZRXOGQRWEORFNDFFHVVWRWKHZKROHWDEOH
1H[W,WDNHDVKRUWEUHDNIURPORFNVWRGHVFULEHWUDQVDFWLRQV/DWHUZHZLOOUHWXUQWR
PHWDGDWDORFNLQJ,GHFLGHGWRRUGHUWKHLQIRUPDWLRQLQWKLVZD\EHFDXVHZHQHHGWR
EHDFTXDLQWHGZLWKWUDQVDFWLRQVEHIRUHGLVFXVVLQJPHWDGDWDORFNV

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)

mysql1> UPDATE t SET a=26 WHERE a=6;


Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

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)

mysql2> UPDATE t SET a=36 WHERE a=6;

1RZOHW¦VUXQ SHOW PROCESSLIST2XUTXHU\LVLQWKHVDPH UpdatingVWDWHDVLWZDVLQ


RXUURZORFNVH[DPSOHEXWQRZLWLVQRWFOHDUZKDWLVSUHYHQWLQJWKHDFWXDOXSGDWH
mysql3> SHOW PROCESSLIST\G
*************************** 1. row ***************************
Id: 4484
User: root
Host: localhost
db: test
Command: Sleep
Time: 104
State:
Info: NULL
*************************** 2. row ***************************
Id: 4485
User: root
Host: localhost
db: test
Command: Query
Time: 2
State: Updating
Info: UPDATE t SET a=36 WHERE a=6
*************************** 3. row ***************************
Id: 4486
User: root
Host: localhost
db: test
Command: Query
Time: 0
State: NULL
Info: SHOW PROCESSLIST
*************************** 4. row ***************************
Id: 4487
User: root
Host: localhost
db: NULL
Command: Sleep
Time: 33
State:
Info: NULL
4 rows in set (0.09 sec)

64 | Chapter 2:ಗYou Are Not Alone: Concurrency Issues


+HUHLVRXUVRUWHGRXWSXWIURPSHOW ENGINE INNODB STATUS
mysql> SHOW ENGINE INNODB STATUS\G
*************************** 1. row ***************************
Type: InnoDB
Name:
Status:
=====================================
110802 14:35:28 INNODB MONITOR OUTPUT
=====================================
...
------------
TRANSACTIONS
------------
Trx id counter 0 26243837
Purge done for trx's n:o < 0 26243834 undo n:o < 0 0
History list length 2
LIST OF TRANSACTIONS FOR EACH SESSION:
---TRANSACTION 0 0, not started, OS thread id 101515264
MySQL thread id 4487, query id 25022139 localhost root
show engine innodb status
---TRANSACTION 0 26243836, ACTIVE 4 sec, OS thread id 101514240
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 4485, query id 25022137 localhost root Updating
update t set a=36 where a=6
------- 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 ;;

------------------
---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

---TRANSACTION B53, not started


mysql tables in use 1, locked 1

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)

66 | Chapter 2:ಗYou Are Not Alone: Concurrency Issues


7KLV VKRZV LQIRUPDWLRQ DERXW ORFNV %RWK WUDQVDFWLRQV KDYH ORFNV VHW RQ WKH VDPH
UHFRUGEXWWKHUHVXOWGRHVQRWJLYHDQ\LGHDDVWRZKLFKWUDQVDFWLRQKROGVWKHORFNDQG
ZKLFKZDLWVRQLW0RUHLQIRUPDWLRQDERXWZKDWLVJRLQJRQFDQEHREWDLQHGIURPWKH
WDEOHINNODB_LOCK_WAITS
mysql> SELECT * FROM innodb_lock_waits\G
*************************** 1. row ***************************
requesting_trx_id: 3B86
requested_lock_id: 3B86:1120:3:6
blocking_trx_id: 3B85
blocking_lock_id: 3B85:1120:3:6
1 row in set (0.09 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

68 | Chapter 2:ಗYou Are Not Alone: Concurrency Issues


Info: SHOW PROCESSLIST
4 rows in set (0.01 sec)

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)

mysql> INSERT INTO t VALUES();


Query OK, 1 row affected (0.16 sec)

mysql> INSERT INTO t SELECT NULL FROM t;

Transactions | 69
Query OK, 1 row affected (0.11 sec)
Records: 1 Duplicates: 0 Warnings: 0

mysql> INSERT INTO t SELECT NULL FROM t;


Query OK, 2 rows affected (0.09 sec)
Records: 2 Duplicates: 0 Warnings: 0

mysql> SELECT * FROM t;


+---+
| a |
+---+
| 1 |
| 2 |
| 3 |
| 4 |
+---+
4 rows in set (0.00 sec)

1RZOHW¦VVWDUWWZRWUDQVDFWLRQVDQGLQVHUWRQHURZLQHDFKRIWKHP
mysql1> BEGIN;
Query OK, 0 rows affected (0.00 sec)

mysql1> INSERT INTO t VALUES();


Query OK, 1 row affected (0.00 sec)

mysql1> SELECT * FROM t;


+---+
| a |
+---+
| 1 |
| 2 |
| 3 |
| 4 |
| 8 |
+---+
5 rows in set (0.00 sec)

mysql2> BEGIN;
Query OK, 0 rows affected (0.00 sec)

mysql2> INSERT INTO t VALUES();


Query OK, 1 row affected (0.00 sec)

mysql2> SELECT * FROM t;


+---+
| a |
+---+
| 1 |
| 2 |
| 3 |
| 4 |
| 9 |
+---+
5 rows in set (0.00 sec)

70 | Chapter 2:ಗYou Are Not Alone: Concurrency Issues


(YHU\WKLQJ¦V2.VRIDU%RWKWDEOHVLQVHUWHGRQHYDOXHLQWRDQDXWRLQFUHPHQWHGILHOG
1RZOHW¦VWU\WRPRGLI\DURZLQWKHILUVWWUDQVDFWLRQ
mysql1> UPDATE t SET a=9 WHERE a=8;

: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 #( ;;

*** (2) TRANSACTION:


TRANSACTION 3B97, ACTIVE 21 sec, OS thread id 35552256 updating or deleting
mysql tables in use 1, locked 1
3 lock struct(s), heap size 320, 2 row lock(s), undo log entries 2
MySQL thread id 30447, query id 773 localhost root Updating
update t set a=8 where a=9
*** (2) HOLDS THE LOCK(S):
RECORD LOCKS space id 1121 page no 3 n bits 80 index `PRIMARY` of table `test`.`t`
trx id 3B97 lock_mode X locks rec but not gap
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 #( ;;

*** (2) 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 3B97 lock mode S 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 00000008; asc ;;

Transactions | 71
1: len 6; hex 000000003b96; asc ; ;;
2: len 7; hex 50000002221b83; asc P " ;;

*** WE ROLL BACK TRANSACTION (2)

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> SELECT * FROM t1;


Empty set (0.00 sec)

mysql> BEGIN;
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO t1 VALUES(100);


Query OK, 1 row affected (0.03 sec)

mysql> CREATE TABLE t2 LIKE t1;


Query OK, 0 rows affected (0.19 sec)

mysql> INSERT INTO t1 VALUES(200);


Query OK, 1 row affected (0.02 sec)

mysql> ROLLBACK;
Query OK, 0 rows affected (0.00 sec)

72 | Chapter 2:ಗYou Are Not Alone: Concurrency Issues


CREATE TABLEFDXVHVDQLPSOLFLWFRPPLW6RHYHQWKRXJK\RXPD\WKLQN\RXUROOHGEDFN
ERWKLQVHUWVt1ZLOOFRQWDLQRQHURZZLWKWKHYDOXH7KHVHFRQGLQVHUWZLWKYDOXH
ZLOOEHUROOHGEDFNDVGHVLUHG
7KLVH[DPSOHDVVXPHVWKDW\RXKDYHVHWautocommit=0VRWKDWPXOWLVWDWHPHQWWUDQVDF
WLRQVDUHXVHGE\GHIDXOW:KLOHZH¦UHRQWKHVXEMHFWRIFRPPLWVLW¦VZRUWKQRWLQJ
DJDLQWKDWWKHGHIDXOWYDOXHRI autocommitLVSUHYHQWLQJWKHXVHRIPXOWLVWDWHPHQW
WUDQVDFWLRQVZKHQDBEGINRUSTART TRANSACTIONLVQRWFDOOHGH[SOLFLWO\:KHQWKHYDOXH
LVHDFKVWDWHPHQWZLOOEHFRPPLWWHGULJKWDZD\DQGLQWKHSUHYLRXVVLWXDWLRQ\RX
ZRXOGDFWXDOO\HQGXSZLWKERWKURZVLQWKHWDEOH
mysql> SELECT * FROM t1;
+------+
| f1 |
+------+
| 100 |
| 200 |
+------+
2 rows in set (0.00 sec)

mysql> SELECT @@autocommit;


+--------------+
| @@autocommit |
+--------------+
| 1 |
+--------------+
1 row in set (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)

mysql1> SELECT * FROM t1;


+------+
| f1 |

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)

mysql1> SELECT * FROM t1;


+------+
| f1 |
+------+
| 100 |
| 200 |
+------+
2 rows in set (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

74 | Chapter 2:ಗYou Are Not Alone: Concurrency Issues


Metadata Locking Versus the Old Model
0HWDGDWDORFNVDUHDFTXLUHGLQGHSHQGHQWO\RIWKHVWRUDJHHQJLQH\RXXVH6RLI\RXXVH
D0\,6$0WDEOHZLWKautocommit=0RULI\RXVWDUWDQH[SOLFLWWUDQVDFWLRQZLWKBEGINRU
START TRANSACTION\RXUFRQQHFWLRQZLOODFTXLUHWKHPHWDGDWDORFN<RXFDQFOHDUO\VHH
WKLVLQWKHRXWSXWRI SHOW PROCESSLISTZKLFKZLOOVKRZWKHVWDWHPHQWZLWKWKHVWDWH
£:DLWLQJIRUWDEOHPHWDGDWDORFN¤
$VPDOOH[DPSOHGHPRQVWUDWHVWKHXVHRIWKHORFN7KHILUVWWKUHDGRSHQVDWUDQVDFWLRQ
WKDWDFFHVVHVD0\,6$0WDEOH,XVHGBEGINKHUHEXWWKHVDPHEHKDYLRUFDQEHVHHQLI
\RXXVHautocommit=0
mysql1> SHOW CREATE TABLE tm\G
*************************** 1. row ***************************
Table: tm
Create Table: CREATE TABLE `tm` (
`a` int(10) unsigned NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`a`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

mysql1> BEGIN;
Query OK, 0 rows affected (0.00 sec)

mysql1> SELECT * FROM tm;


+---+
| a |
+---+
| 1 |
| 2 |
| 3 |
| 4 |
+---+
4 rows in set (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)

:KHQDTXHU\EORFNVZKLOHZDLWLQJIRUWKHPHWDGDWDORFN SHOW PROCESSLISTLV\RXU


DVVLVWDQWDJDLQ$IWHU\RXPRYHWRDYHUVLRQRI0\64/ZLWKVXSSRUWIRUWKHPHWDGDWD
ORFN\RXPD\ILQGWKDW''/TXHULHVVWDUWWRUXQVORZO\7KLVLVEHFDXVHWKH\KDYHWR
ZDLWZKHQDQRWKHUWUDQVDFWLRQKDVWKHORFN
,QWKHRU\WKHPHWDGDWDORFNFDQWLPHRXW7KHWLPHRXWLVVSHFLILHGE\DYDULDEOHQDPHG
lock_wait_timeout%\GHIDXOWLWLVVHWWRVHFRQGV RQH\HDU VRHIIHFWLYHO\
DORFNHGTXHU\FDQQHYHUGLH
mysql> truncate table tm;
Query OK, 0 rows affected (5 hours 12 min 52.51 sec)

7RSURYLGHDQHIIHFWLYHWLPHRXW\RXFDQVHWlock_wait_timeoutWRDVPDOOHUYDOXHVXFK
DVRQHVHFRQG
mysql> set lock_wait_timeout=1;
Query OK, 0 rows affected (0.00 sec)

mysql> truncate table tm;


ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

How Concurrency Affects Performance


:HMXVWGLVFXVVHGFDVHVZKHQFRQIOLFWVEHWZHHQSDUDOOHOWKUHDGVRUWUDQVDFWLRQVFUHDWHG
SHUIRUPDQFHLVVXHVRUHYHQDERUWHGTXHULHV<RXVDZKRZORFNVVHWE\64/VWDWHPHQWV
RUWKHVWRUDJHHQJLQHVDIIHFWSDUDOOHOWKUHDGV6XFKORFNVDUHYLVLEOHWRXVHUVDQGHDV\WR
WUDFNDOWKRXJKWKH\DUHQRWDOZD\VHDV\WRGHEXJ<RXQHHGWRDFFRXQWIRUWKHSRVVL
ELOLW\RISDUDOOHOFRPSHWLQJWKUHDGVZKHQDQDSSOLFDWLRQLVFDSDEOHRIFUHDWLQJPXOWLSOH
0\64/FRQQHFWLRQV7KLVFDQEHDVFRPPRQDVDZHEVHUYHUWKDWRSHQVSDUDOOHOFRQ
QHFWLRQVWRD0\64/VHUYHUEHFDXVHPXOWLSOHXVHUVKDYHRSHQHGDZHESDJHSURYLGHG
E\WKDWZHEVHUYHU
:HDOVRGLVFXVVHGZURQJUHVXOWVRUGUDPDWLFVORZGRZQVWKDWDUHKDUGWRPLVVLI\RXU
DSSOLFDWLRQKDQGOHVHUURUV:KHQ,FROOHFWHGH[DPSOHVIRUWKLVERRN,SXWDOOVXFKLVVXHV

76 | Chapter 2:ಗYou Are Not Alone: Concurrency Issues


LQ£:URQJ5HVXOWVIURPD6(/(&7¤RQSDJH,GLVWLQJXLVKWKRVHIURPSHUIRUPDQFH
SUREOHPVEHFDXVH\RXFDQVHHWKHLUUHVXOWVLPPHGLDWHO\ZKHUHDVSHUIRUPDQFHSURE
OHPVDUHJHQHUDOO\KLGGHQDWILUVWDQG\RXQRWLFHWKHPRQO\DIWHUH[DPLQLQJWKHVORZ
TXHU\ORJRUJHWWLQJFRPSODLQWVIURPXVHUVDERXWVORZDSSOLFDWLRQV
6R OHW¦V WDFNOH WKH VXEWOHU SHUIRUPDQFH SUREOHPV ,I D TXHU\ VXGGHQO\ VWDUWV WR UXQ
VORZO\\RXUILUVWVWHSLVWRPDNHVXUHLWLVSURSHUO\RSWLPL]HG7KHHDVLHVWZD\WRGR
WKLVLVWRUXQWKHTXHU\LQDQLVRODWHGVLQJOHWKUHDGHGHQYLURQPHQW,IWKHTXHU\VWLOO
UXQVVORZO\HLWKHULWUHTXLUHVRSWLPL]DWLRQRUWKHUHFHQWH[HFXWLRQRIDODUJHQXPEHU
RIXSGDWHVFDXVHGWKHLQGH[VWDWLVWLFWREHFRPHRXWRIGDWH &KDSWHUFRQWDLQVEDVLF
RSWLPL]DWLRQWHFKQLTXHV
,I D TXHU\ FRPSOHWHV TXLFNO\ LQ VLQJOHWKUHDGHG HQYLURQPHQW EXW VORZO\ LQ D PXOWL
WKUHDGHGRQHWKLVDOPRVWFHUWDLQO\PHDQV\RXDUHH[SHULHQFLQJDFRQFXUUHQF\LVVXH
$OOWKHWHFKQLTXHVWKDW,LOOXVWUDWHGIRUGHDOLQJZLWKZURQJUHVXOWVDUHVXLWDEOHIRUWKLV
FDVHDVZHOO6ORZTXHULHVDUHMXVWDVOLJKWO\PRUHFRPSOH[SUREOHPEHFDXVHLQRUGHUWR
GHEXJWKHP\RXKDYHWRUHSURGXFHWKHFRQGLWLRQVXQGHUZKLFKWKH\RFFXUDQGLWFDQ
EHKDUGWRPDNHWKHSUREOHPVWULNHZKHQ\RXZDQWLWWR

, DOZD\V LQVLVW RQ UHSURGXFLQJ SUREOHPV QRW MXVW UHPRYLQJ D


SUREOHPDWLF TXHU\ )RU FRQFXUUHQF\ SUREOHPV WKLV LV LPSRUWDQW
m
UP, EHFDXVHWKHSUREOHPTXHU\PD\EHMXVWDV\PSWRPRIDGHHSHUSUREOHP
,I\RXVWRSH[HFXWLQJLWZLWKRXWVROYLQJWKHUHDOSUREOHP\RXPD\VXIIHU
IURPWKHVDPHLVVXHLQDQRWKHUSDUWRIWKHDSSOLFDWLRQ

Monitoring InnoDB Transactions for Concurrency Problems


,I\RXDUHGHEXJJLQJORFNVFDXVHGE\DQ,QQR'%WUDQVDFWLRQ,QQR'%0RQLWRUVZLOO
PDNH\RXUOLIHHDVLHU-XVWWXUQDPRQLWRURQDQGLWZLOOSHULRGLFDOO\GXPSPHVVDJHV
LQWRWKHHUURUORJILOHVLPLODUWRWKHRXWSXW\RXKDYHDOUHDG\VHHQZLWKWKHXVHRISHOW
ENGINE INNODB STATUS
7RWXUQRQ,QQR'%0RQLWRUVFUHDWHDWDEOHQDPHGinnodb_monitorLQDQ\GDWDEDVH
$mysql test -A
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2624
Server version: 5.1.59-debug Source distribution

Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its


affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> CREATE TABLE innodb_monitor(f1 INT) ENGINE=InnoDB;


Query OK, 0 rows affected (0.48 sec)

How Concurrency Affects Performance | 77


7KH -ARSWLRQRQWKH0\64/FOLHQWFRPPDQGLVXVHIXOZKHQ\RX¦UHWU\LQJWRGHEXJ
SUREOHPVUHODWHGWRFRQFXUUHQF\1RUPDOO\WKHFOLHQWDVNVIRUDOLVWRIDYDLODEOHWDEOHV
7KHFOLHQWFRXOGWKHQEHKHOGXSE\ORFNVKHOGE\RWKHUFRQQHFWLRQVZKLFKGHIHDWVWKH
SXUSRVHRIUXQQLQJWKHFOLHQWWRGHEXJWKHP7KH-ARSWLRQVXSSUHVVHVWKHUHTXHVWIRU
WKHWDEOHOLVW
2QFH\RXGRWKLV,QQR'%UHFRJQL]HVWKHWDEOHDQGVWDUWVSULQWLQJLQIRUPDWLRQWRWKH
HUURUORJILOH6RLI\RXFKHFNIRUWKHWLPHZKHQWKHVORZTXHU\ZDVUXQQLQJDJDLQVWWKH
WUDQVDFWLRQVLQIRUPDWLRQUHFRUGHGDWWKDWWLPH\RXFDQILQGRXWZKDWZDVKROGLQJD
ORFN WKDW KHOG XS WKH TXHU\ 0RUH LQIRUPDWLRQ DERXW ,QQR'% 0RQLWRUV DSSHDUV LQ
£6+2: (1*,1( ,112'% 67$786 DQG ,QQR'% 0RQLWRUV¤ RQ SDJH  DQG DOVR
LQ&KDSWHU

Monitoring Other Resources for Concurrency Problems


,I\RXGHEXJDTXHU\WKDWGRHVQ¦WXVHWKH,QQR'%VWRUDJHHQJLQHRUWKDW\RXVXVSHFW
LVDIIHFWHGE\DGLIIHUHQWNLQGRIORFNWKHUHDUHVWLOODFRXSOHRIRSWLRQV<RXFDQLVVXH
SHOW PROCESSLIST EXW DQ HYHQ EHWWHU FKRLFH LV WR VFKHGXOH SELECT … FROM
INFORMATION_SCHEMA.PROCESSLISTWRUXQUHSHDWHGO\DQGVDYHLWVRXWSXWLQWRDILOHRUD
WDEOHWRJHWKHUZLWKLQIRUPDWLRQDERXWZKHQLWZDVWDNHQ7KLVRXWSXWLVHDVLHUWRFRQWURO
DQGUHDGWKDQSHOW PROCESSLIST&KHFNWKHSURFHVVOLVWLQIRUPDWLRQIURPWKHVDPHWLPH
DVZKHQWKHVORZTXHU\ZDVUXQQLQJWRJHWVRPHFOXHDERXWZKDWZDVKROGLQJXSWKH
TXHU\
7KHHIIHFWVRIFRQFXUUHQF\RQSHUIRUPDQFHGRQRWDOZD\VOLHDWWKHOHYHORI64/RUWKH
VWRUDJHHQJLQH0XOWLSOHWKUHDGVRIWKH0\64/VHUYHUDOVRVKDUHKDUGZDUHUHVRXUFHV
VXFKDV5$0DQG&386RPHRIWKHVHUHVRXUFHVDUHGHGLFDWHGWRHDFKWKUHDGZKHUHDV
RWKHUVVXFKDVWHPSRUDU\WDEOHVDUHGHGLFDWHGIRUSDUWLFXODUNLQGVRIRSHUDWLRQVDQG
DOORFDWHGRQO\ZKHQQHFHVVDU\6RPHUHVRXUFHVDUHVKDUHGE\DOOWKUHDGV<RXVKRXOG
DOVRFRQVLGHURSHUDWLQJV\VWHPOLPLWVZKHQSODQQLQJDQDSSOLFDWLRQ,QWKLVVHFWLRQ,
ZLOO GHVFULEH WKH FRQFHSWV WKDW DIIHFW WKH SHUIRUPDQFH RI WKHVH UHVRXUFHV DQG
&KDSWHUZLOOGLVFXVVLQGHWDLOWKHRSWLRQVWKDWFRQWUROUHVRXUFHXVDJH
/HW¦VVWDUWZLWKWKHPHPRU\DOORFDWHGWRHDFKWKUHDG7KH0\64/VHUYHUKDVDJURXS
RIRSWLRQVWKDWDOORZV\RXWRVHWWKHVL]HRIWKUHDGVSHFLILFEXIIHUV5RXJKO\WKHPRUH
PHPRU\\RXDOORFDWHWKHIDVWHUWKHWKUHDGUXQV%XWWKHVHEXIIHUVDUHDOORFDWHGIRUHYHU\
VLQJOHWKUHDG\RXUXQVRWKHPRUHUHVRXUFHV\RXDOORFDWHWRHDFKWKUHDGWKHIHZHU
WKUHDGVFDQUXQVLPXOWDQHRXVO\$OZD\VVHHNDEDODQFHEHWZHHQYDOXHVWKDWLPSURYH
SHUIRUPDQFHDQGWKHUHDODPRXQWRISK\VLFDOPHPRU\
5HVRXUFHVDOORFDWHGIRUFHUWDLQNLQGVRIRSHUDWLRQVDUHOLPLWHGWRR'RQ¦WVHWWKHPYHU\
KLJKXQWLOLWLVQHFHVVDU\EXWGRQ¦WVHWWKHPWRRORZHLWKHU$JRRGFRPSURPLVHLVWR
VHWKLJKYDOXHVIRURQO\DIHZVHVVLRQV FRQQHFWLRQV WKDWQHHGODUJHEXIIHUVDQGOHDYH
WKHGHIDXOWYDOXHIRURWKHUV7KLVOHYHORIFRQWUROFDQEHVHWRQDVHVVLRQE\VHVVLRQEDVLV
G\QDPLFDOO\
SET SESSION join_buffer_size=1024*1024*1024;

78 | Chapter 2:ಗYou Are Not Alone: Concurrency Issues


7KHWKLUGNLQGRIUHVRXUFHVDUHWKRVHVKDUHGE\DOOWKUHDGVXVXDOO\LQWHUQDOFDFKHV
:LWKVXFKRSWLRQV\RXJHQHUDOO\GRQ¦WQHHGWRZRUU\WKDWDGGLQJPRUHFRQQHFWLRQV
ZLOOLQFUHDVHPHPRU\XVDJH2QHSRWHQWLDOLVVXHZLWKWKHPWKRXJKLVWKDWFKDQJLQJ
WKH GDWD FDQ LQYDOLGDWH WKH FDFKH DQG FDXVH VXEVHTXHQW VWDWHPHQWV WR WDNH ORQJHU
8VXDOO\WKLVLVDYHU\TXLFNRSHUDWLRQEXWLIDFDFKHLVYHU\ODUJHLQYDOLGDWLRQFDQWDNH
DORQJWLPHVRWKLVFDQDIIHFWWKHXVHUZKLOHDWKUHDGZDLWVIRUWKHFDFKHWREHFRPH
DFFHVVLEOHDJDLQ
)LQDOO\ SHUIRUPDQFH FDQ UXQ XS DJDLQVW OLPLWV RQ RSHUDWLQJ UHVRXUFHV VXFK DV ILOH
GHVFULSWRUVDQG&387KHQXPEHURIILOHGHVFULSWRUVDYDLODEOHRQWKHV\VWHPOLPLWVWKH
QXPEHURIFRQQHFWLRQVWKHVHUYHUFDQPDNHWKHQXPEHURIWDEOHVWKDWFDQEHRSHQHG
VLPXOWDQHRXVO\DQGHYHQWKHQXPEHURISDUWLWLRQVLQDVLQJOHWDEOH<RXPD\ILQGLW
LPSRVVLEOHHYHQWRRSHQDWDEOHLILWKDVPRUHSDUWLWLRQVWKDQDYDLODEOHILOHGHVFULSWRUV
:HZLOOGLVFXVVKRZWKHRSHUDWLQJV\VWHPFDQDIIHFW0\64/LQ&KDSWHU

Other Locking Issues


2WKHUUHVRXUFHVWKDWFDQDIIHFW\RXUDSSOLFDWLRQDUHLQWHUQDOORFNVDQGPXWH[HVDFTXLUHG
ZKHQWKHVHUYHUH[HFXWHVSDUWLFXODURSHUDWLRQV0RVWRIWKHPSURWHFWGDWDLQWHJULW\
:LWKDIHZH[FHSWLRQVVXFKDV,QQR'%PXWH[HVDQGVSLQORFNV\RXFDQQRWDQGVKRXOG
QRWWU\WRFRQWUROWKHPEXWEHFDXVHDIHZRIWKHPFDQEHFRPHYLVLEOHWRXVHUDSSOLFD
WLRQV,¦OOGHVFULEHWKHPKHUH
7UDQVDFWLRQV FDQ FUHDWH UDFH FRQGLWLRQV DQG WKHUHIRUH GHDGORFNV EXW VR FDQ RWKHU
DFWLYLWLHV:KHQWKH0\64/VHUYHUVWDUWVXVLQJDUHVRXUFHVXFKDVDILOHRUPRGLILHVD
YDULDEOHWKDWLVVKDUHGEHWZHHQWKUHDGVLWORFNVDFFHVVWRWKHUHVRXUFHWRSUHYHQWFRQ
FXUUHQWDFFHVVWRWKHVDPHUHVRXUFHE\RWKHUWKUHDGV7KLVLVGRQHIRUGDWDFRQVLVWHQF\
%XWDWWKHVDPHWLPHVXFKSURWHFWLRQFDQOHDGWRGHDGORFNV
7KHVH GHDGORFNV DUH KDUG WR GLDJQRVH DQG WKHRUHWLFDOO\ VKRXOG QHYHU KDSSHQ EXW
EHFDXVHWKH\KDYHWXUQHGXSLQWKHSDVW,¦OOGHVFULEHZKDWWRGRZKHQ\RXVXVSHFWLW
$VDQH[DPSOH,ZLOOFUHDWHDGHDGORFNRIWKLVNLQGXVLQJDWHVWFDVHIURPDEXJUHSRUW
7KLVEXJLVQRWUHODWHGWRWURXEOHVKRRWLQJDPHWDGDWDORFN 0'/ VR,ZLOOFRQFHQWUDWH
RQMXVWWKHGHEXJJLQJDVSHFWQRWRQWKHDFWLRQVWKDWOHGWRWKHGHDGORFN

,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\

Other Locking Issues | 79


EHUROOHGEDFN DVZLWKDQ,QQR'%GHDGORFN SHOW PROCESSLISTZLOOVKRZVRPHWKLQJ
OLNHWKLV
mysql> SHOW PROCESSLIST\G
*************************** 1. row ***************************
Id: 2
User: root
Host: localhost
db: performance_schema
Command: Query
Time: 0
State: NULL
Info: SHOW PROCESSLIST
*************************** 2. row ***************************
Id: 6
User: root
Host: localhost
db: test
Command: Query
Time: 9764
State: Waiting for table metadata lock
Info: SELECT * FROM t1, t2
*************************** 3. row ***************************
Id: 7
User: root
Host: localhost
db: test
Command: Query
Time: 9765
State: Waiting for table metadata lock
Info: RENAME TABLE t2 TO t0, t4 TO t2, t0 TO t4
*************************** 4. row ***************************
Id: 8
User: root
Host: localhost
db: test
Command: Query
Time: 9766
State: Waiting for table level lock
Info: INSERT INTO t3 VALUES ((SELECT count(*) FROM t4))
*************************** 5. row ***************************
Id: 10
User: root
Host: localhost
db: test
Command: Sleep
Time: 9768
State:
Info: NULL
*************************** 6. row ***************************
Id: 502
User: root
Host: localhost
db: test
Command: Sleep

80 | Chapter 2:ಗYou Are Not Alone: Concurrency Issues


Time: 2
State:
Info: NULL
6 rows in set (0.00 sec)

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 ***************************

Other Locking Issues | 81


NAME: wait/synch/mutex/mysys/THR_LOCK::mutex
OBJECT_INSTANCE_BEGIN: 508708108
LOCKED_BY_THREAD_ID: 24
3 rows in set (0.26 sec)

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

82 | Chapter 2:ಗYou Are Not Alone: Concurrency Issues


ID: 0
NAME: thread/innodb/io_handler_thread
*************************** 4. row ***************************
THREAD_ID: 14
ID: 0
NAME: thread/innodb/srv_monitor_thread
*************************** 5. row ***************************
THREAD_ID: 6
ID: 0
NAME: thread/innodb/io_handler_thread
*************************** 6. row ***************************
THREAD_ID: 518
ID: 502
NAME: thread/sql/one_connection
*************************** 7. row ***************************
THREAD_ID: 12
ID: 0
NAME: thread/innodb/srv_lock_timeout_thread
*************************** 8. row ***************************
THREAD_ID: 22
ID: 6
NAME: thread/sql/one_connection
*************************** 9. row ***************************
THREAD_ID: 7
ID: 0
NAME: thread/innodb/io_handler_thread
*************************** 10. row ***************************
THREAD_ID: 3
ID: 0
NAME: thread/innodb/io_handler_thread
*************************** 11. row ***************************
THREAD_ID: 26
ID: 10
NAME: thread/sql/one_connection
*************************** 12. row ***************************
THREAD_ID: 9
ID: 0
NAME: thread/innodb/io_handler_thread
*************************** 13. row ***************************
THREAD_ID: 16
ID: 0
NAME: thread/sql/signal_handler
*************************** 14. row ***************************
THREAD_ID: 23
ID: 7
NAME: thread/sql/one_connection
*************************** 15. row ***************************
THREAD_ID: 1
ID: 0
NAME: thread/innodb/io_handler_thread
*************************** 16. row ***************************
THREAD_ID: 4
ID: 0
NAME: thread/innodb/io_handler_thread
*************************** 17. row ***************************

Other Locking Issues | 83


THREAD_ID: 5
ID: 0
NAME: thread/innodb/io_handler_thread
*************************** 18. row ***************************
THREAD_ID: 8
ID: 0
NAME: thread/innodb/io_handler_thread
*************************** 19. row ***************************
THREAD_ID: 15
ID: 0
NAME: thread/innodb/srv_master_thread
*************************** 20. row ***************************
THREAD_ID: 18
ID: 2
NAME: thread/sql/one_connection
*************************** 21. row ***************************
THREAD_ID: 13
ID: 0
NAME: thread/innodb/srv_error_monitor_thread
*************************** 22. row ***************************
THREAD_ID: 10
ID: 0
NAME: thread/innodb/io_handler_thread
22 rows in set (0.03 sec)

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

84 | Chapter 2:ಗYou Are Not Alone: Concurrency Issues


Time: 0
State: NULL
Info: SHOW PROCESSLIST
*************************** 2. row ***************************
Id: 6
User: root
Host: localhost
db: test
Command: Sleep
Time: 10361
State:
Info: NULL
*************************** 3. row ***************************
Id: 7
User: root
Host: localhost
db: test
Command: Sleep
Time: 10362
State:
Info: NULL
*************************** 4. row ***************************
Id: 8
User: root
Host: localhost
db: test
Command: Sleep
Time: 10363
State:
Info: NULL
*************************** 5. row ***************************
Id: 502
User: root
Host: localhost
db: test
Command: Sleep
Time: 152
State:
Info: NULL
5 rows in set (0.00 sec)

mysql> SELECT * FROM MUTEX_INSTANCES WHERE LOCKED_BY_THREAD_ID IS


NOT NULL\G
Empty set (0.11 sec)

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
Empty set (1.23 sec)

7KLVZDVDVKRUWRYHUYLHZDERXWV\VWHPGHDGORFNVDQGZKDWWRGRLI\RXPHHWWKHP
7KHEDVLFSURFHGXUHLVWRPDNHVXUHWKHUHDUHWKUHDGVZDLWLQJHVVHQWLDOO\IRUHYHUILQG
DWKUHDG\RXFDQOLYHZLWKRXWDQGNLOOLW<RXVKRXOGQRWEHDIUDLGRINLOOLQJVWDOOHG

Other Locking Issues | 85


WKUHDGVEHFDXVHLWLVEHWWHUWRNLOOWKHPDQGWKHQIL[DQ\UHVXOWLQJHUURUPDQXDOO\WKDQ
WRZDLWLQGHILQLWHO\XQWLOP\VTOGVWRSVIRUDQRWKHUUHDVRQ
<RXPD\HQFRXQWHURWKHUH[DPSOHVRIWKHLQIOXHQFHLQWHUQDOVHUYHUORFNVKDYHRQDS
SOLFDWLRQV6RPHHYHQFDXVHVHUYHUFUDVKHV)RULQVWDQFH,QQR'%XVHVVHPDSKRUHVIRU
YDULRXVORFNLQJSXUSRVHVVXFKDVWRSURWHFWCHECK TABLEDQGOPTIMIZE TABLEEXWLIDQ
,QQR'%VHPDSKRUHZDLWVIRUPRUHWKDQVHFRQGV,QQR'%LQWHQWLRQDOO\FUDVKHVWKH
VHUYHU

'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

Replication and Concurrency


$QRWKHU LPSRUWDQW DVSHFW RI FRQFXUUHQF\ WURXEOHVKRRWLQJ FRQFHUQV UHSOLFDWHG
HQYLURQPHQWV
:KHQWURXEOHVKRRWLQJUHSOLFDWLRQ\RXQHHGWRUHPHPEHUWKDWDPDVWHUVHUYHULVDOZD\V
PXOWLWKUHDGHG ZKHUHDV WKH VODYH UXQV DOO XSGDWHV LQ D VLQJOH WKUHDG 7KLV DIIHFWV

 7KLVZLOOFKDQJHDVGLVFXVVHGLQ£0XOWLWKUHDGHG6ODYH¤RQSDJH

86 | Chapter 2:ಗYou Are Not Alone: Concurrency Issues


SHUIRUPDQFHDQGFRQVLVWHQF\GXULQJUHSOLFDWLRQUHJDUGOHVVRIWKHELQDU\ORJIRUPDWV
RURSWLRQV\RXXVH
7KHPDMRULW\RIUHSOLFDWLRQLVVXHVLQYROYHGDWDLQFRQVLVWHQF\PHDQLQJWKDWWKHGDWDRQ
WKHVODYHLVGLIIHUHQWIURPWKDWRQWKHPDVWHU,QPRVWFDVHV0\64/UHSOLFDWLRQWDNHV
FDUHRIGDWDFRQVLVWHQF\EXWVRPHWLPHV\RXFDQVWLOOH[SHULHQFHLVVXHVHVSHFLDOO\LI\RX
XVHVWDWHPHQWEDVHGUHSOLFDWLRQ7KLVVHFWLRQIRFXVHVRQFRQVLVWHQF\ZLWKDIHZZRUGV
DWWKHHQGDERXWKRZSHUIRUPDQFHFDQEHDIIHFWHGE\UHSOLFDWLRQ

Statement-Based Replication Issues


6WDUWLQJZLWKYHUVLRQ0\64/VXSSRUWVWKUHHELQDU\ORJJLQJIRUPDWVVWDWHPHQW
URZDQGPL[HG7KHPDMRULW\RILVVXHVZLWKGDWDLQFRQVLVWHQF\KDSSHQZLWKVWDWHPHQW
EDVHPHQWUHSOLFDWLRQ 6%5 ZKLFKXVHVWKHVWDWHPHQWELQDU\ORJIRUPDW7KLVIRUPDW
KDVVHYHUDODGYDQWDJHVRYHUURZEDVHGORJJLQJDQGKLVWRULFDOO\LWZDVWKHRQO\ZD\WR
ORJFKDQJHVVRLWVXVHUEDVHLVVWLOOKXJHDQGLWLVVWLOOWKHGHIDXOW%XWLWLVPRUHULVN\
WKDQURZEDVHGORJJLQJ

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

Replication and Concurrency | 87


GLIIHUHQW UHVXOWV RQ WKH VODYH DQG PDVWHU 0\64/ +LJK $YDLODELOLW\ E\ &KDUOHV %HOO
HWDO 2¦5HLOO\ FRYHUVFRQVLVWHQF\LVVXHVGXULQJUHSOLFDWLRQLQGHWDLO+HUH,¦OOIRFXVRQ
FRQFXUUHQF\UHODWHGSUREOHPVZKLFKFDQOHDGWRGLIIHUHQWUHVXOWVLIVWDWHPHQWVDUHUXQ
LQPDQ\WKUHDGVRQWKHPDVWHUDQGZHUHSXWLQDSDUWLFXODURUGHURQWKHVODYH
%HFDXVH D PDVWHU VHUYHU LV PXOWLWKUHDGHG LW FDQ UXQ PXOWLSOH FRQQHFWLRQV LQ D
QRQGHWHUPLQLVWLFRUGHU%XWWKHVODYHZKLFKLVFXUUHQWO\VLQJOHWKUHDGHGUHLVVXHVWKH
VWDWHPHQWV LQ WKH RUGHU LQ ZKLFK WKH\ ZHUH ORJJHG ZKLFK PD\ EH GLIIHUHQW IURP
WKHRUGHULQZKLFKWKH\ZHUHLVVXHGRQWKHVHUYHU7KLVFDQOHDGWRGLIIHUHQFHVEHWZHHQ
WKHPDVWHUDQGVODYH

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');

88 | Chapter 2:ಗYou Are Not Alone: Concurrency Issues


master2> INSERT INTO t1 VALUES('e');
master2> COMMIT;

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

Replication and Concurrency | 89


mysql> SHOW WARNINGS\G
*************************** 1. row ***************************
Level: Note
Code: 1592
Message: Unsafe statement written to the binary log using statement format since
BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses a LIMIT
clause. This is unsafe because the set of rows included cannot be predicted.
1 row in set (0.00 sec)

$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

90 | Chapter 2:ಗYou Are Not Alone: Concurrency Issues


DSSOLFDWLRQWRSUHYHQWVXFKVLWXDWLRQV.HHSLQPLQGWKDWHYHU\WUDQVDFWLRQLVZULWWHQ
WRWKHELQDU\ORJZKHQDQGRQO\ZKHQLWLVFRPPLWWHG<RXDOVRQHHGWRXVHWKHWHFK
QLTXHVWRFKHFNZDUQLQJVGHVFULEHGLQ&KDSWHU,IWKLVVRXQGVWRRKDUGWRGRIRUHYHU\
VLQJOH TXHU\ LQ SURGXFWLRQ HJ GXH WR SHUIRUPDQFH FRQVLGHUDWLRQV  GR LW DW OHDVW
GXULQJWKHGHYHORSPHQWVWDJH

Mixing Transactional and Nontransactional Tables


,WLVLPSRUWDQWQRWWRPL[WUDQVDFWLRQDODQGQRQWUDQVDFWLRQDOWDEOHVLQWKHVDPHWUDQV
DFWLRQ 2QFH \RX PDNH FKDQJHV WR D QRQWUDQVDFWLRQDO WDEOH \RX FDQQRW UROO WKHP
EDFNVRLIWKHWUDQVDFWLRQLVDERUWHGRUUROOHGEDFN\RXUGDWDFDQEHFRPHLQFRQVLVWHQW

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;

INSERT INTO t3 VALUES(1),(2),(3);

CREATE PROCEDURE p1()


BEGIN
DECLARE m INT UNSIGNED DEFAULT NULL;
SELECT max(f1) INTO m FROM t2;
IF m IS NOT NULL
THEN
INSERT INTO t1(f1) SELECT f1 FROM t2;
END IF;

 7KHUHDUHH[FHSWLRQVWRWKLVUXOHWKDW,ZRXOGFDOO£VHPLVDIH¤OLNHZKHQDQRQWUDQVDFWLRQDOWDEOHLVUHDG
RQO\RUZULWHRQO\ DORJWDEOHIRULQVWDQFHLVZULWHRQO\LQWKLVFRQWH[W :KHQ\RXXVHVXFKWDEOHV
WRJHWKHUZLWKWUDQVDFWLRQDOWDEOHVSODQFDUHIXOO\

Replication and Concurrency | 91


END
|

1RZ,ZLOODGGYDOXHVLQWRt2LQDWUDQVDFWLRQ
master> BEGIN;
Query OK, 0 rows affected (0.00 sec)

master> INSERT INTO t1 VALUES(5);


Query OK, 1 row affected (0.00 sec)

master> INSERT INTO t2 SELECT f1 FROM t3;


Query OK, 3 rows affected, 1 warning (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 1

$QG,¦OOFDOOp1()ZLWKRXWFRPPLWWLQJWKHWUDQVDFWLRQLQWKHSDUDOOHOPDVWHUFRQQHFWLRQ
master> BEGIN;
Query OK, 0 rows affected (0.00 sec)

master> CALL p1();


Query OK, 3 rows affected (0.00 sec)

master> COMMIT;
Query OK, 0 rows affected (0.00 sec)

master> SELECT * FROM t1;


+------+
| f1 |
+------+
| 1 |
| 2 |
| 3 |
+------+
3 rows in set (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

7KH VHFWLRQ £5HSOLFDWLRQ RSWLRQV¤ RQ SDJH  GLVFXVVHV WKH


binlog_direct_non_transactional_updates RSWLRQ ZKLFK FRQWUROV
m
UP, ZKHQXSGDWHVRQQRQWUDQVDFWLRQDOWDEOHVDUHZULWWHQWRWKHELQDU\ORJ

92 | Chapter 2:ಗYou Are Not Alone: Concurrency Issues


■ 6RGRQ¦WPL[WUDQVDFWLRQDODQGQRQWUDQVDFWLRQDOWDEOHVLQDWUDQVDFWLRQ,ILWLV
DEVROXWHO\QHFHVVDU\XVHRWKHUORFNLQJPHWKRGVVXFKDV LOCK TABLEWRHQVXUH
FRQVLVWHQF\LQFDVHRIDUROOEDFNRUFUDVK
<RXFDQVROYHPRVWUHSOLFDWLRQUHODWHGLVVXHVXVLQJWKHURZEDVHGRUPL[HGELQDU\ORJ
IRUPDWEXWWKDWZRQ¦WKHOSLIWKHGDWDRQWKHPDVWHULVQRWZKDW\RXH[SHFW

Issues on the Slave


:HMXVWGLVFXVVHGFRQFXUUHQF\SUREOHPVWKDWDULVHEHFDXVHWKHPDVWHULVPXOWLWKUHDGHG
ZKLOHWKHVODYHLVVLQJOHWKUHDGHG,IWKHVODYH64/WKUHDGZDVWKHRQO\RQHUXQQLQJ
ZHZRXOGQ¦WKDYHDQ\DGGLWLRQDOFRQFXUUHQF\LVVXHVRQWKHVODYH%XWLQUHDOOLIHDVODYH
DOVRGRHVRWKHUMREVEHVLGHVUHSOLFDWLQJIURPWKHPDVWHUDQGWKHUHIRUHWKHVODYH¦V64/
WKUHDGFDQEHDIIHFWHGE\FRQFXUUHQF\LVVXHVMXVWOLNHDQ\RWKHUFRQQHFWLRQWKUHDG
:KHQWKHVODYH64/WKUHDGZULWHVWRWDEOHVWKDWDUHFXUUHQWO\XVHGE\XVHUWKUHDGVLW
DFTXLUHVDOOORFNVIRUVXFKWDEOHVMXVWOLNHDQ\RWKHUPXOWLWKUHDGHGFDVH<RXFDQVHH
WKLVE\UXQQLQJSHOW PROCESSLIST
slave> SHOW PROCESSLIST\G
*************************** 1. row ***************************
Id: 1
User: system user
Host:
db: NULL
Command: Connect
Time: 115
State: Waiting for master to send event
Info: NULL
*************************** 2. row ***************************
Id: 2
User: system user
Host:
db: test
Command: Connect
Time: 16
State: update
Info: INSERT INTO t1 VALUES(3)
*************************** 3. row ***************************
Id: 3
User: msandbox
Host: localhost
db: test
Command: Sleep
Time: 28
State:
Info: NULL
*************************** 4. row ***************************
Id: 4
User: msandbox
Host: localhost
db: test

Replication and Concurrency | 93


Command: Query
Time: 0
State: NULL
Info: SHOW PROCESSLIST
4 rows in set (0.00 sec)

7KHVODYH64/WKUHDGLVOLVWHGLQURZDQGLVUXQE\ system userDVSHFLDOXVHUWKDW


H[HFXWHVVODYHTXHULHV,QRZUXQWKHIROORZLQJTXHU\LQDSDUDOOHOFRQQHFWLRQEHIRUH
VWDUWLQJWKHVODYHWRGHPRQVWUDWHKRZWKH64/WKUHDGZDLWVIRURWKHUWKUHDGVWRILQLVK
EHIRUHLWFDQH[HFXWHWKHXSGDWH
SELECT * FROM t1 FOR UPDATE;

$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

Effectively Using MySQL Troubleshooting Tools


7RHQGWKLVFKDSWHU,ZDQWWRUHSHDWWKHGHVFULSWLRQVRIWRROVZHXVHGDQGGHVFULEH
VRPHRIWKHLUXVHIXOIHDWXUHVWKDW,E\SDVVHGEHIRUH

94 | Chapter 2:ಗYou Are Not Alone: Concurrency Issues


SHOW PROCESSLIST and the INFORMATION_SCHEMA.PROCESSLIST Table
SHOW PROCESSLISTLVWKHILUVWWRROWRXVHZKHQ\RXVXVSHFWDFRQFXUUHQF\LVVXH,WZLOO
QRWVKRZWKHUHODWLRQVKLSVDPRQJVWDWHPHQWVLQPXOWLVWDWHPHQWWUDQVDFWLRQVEXWZLOO
H[SRVH WKH V\PSWRPV RI WKH SUREOHP WR FRQILUP WKDW PRUH LQYHVWLJDWLRQ RI
FRQFXUUHQF\LVQHHGHG7KHPDLQV\PSWRPLVDWKUHDGWKDW¦VLQWKH£6OHHS¤VWDWHIRUD
ORQJWLPH
7KHH[DPSOHVLQWKLVFKDSWHUXVHGWKHVKRUWYHUVLRQRISHOW PROCESSLISTZKLFKFURSV
ORQJTXHULHVSHOW FULL PROCESSLISTVKRZVWKHIXOOTXHU\ZKLFKFDQEHFRQYHQLHQWLI
\RXKDYHORQJTXHULHVDQGLW¦VQRWHDV\WRJXHVVWKHIXOOYHUVLRQIURPMXVWWKHEHJLQQLQJ
RIWKHTXHU\
6WDUWLQJ ZLWK YHUVLRQ  0\64/ DOVR RIIHUV WKH INFORMATION_SCHEMA.PROCESSLIST
WDEOHZLWKWKHVDPHGDWDDVSHOW FULL PROCESSLIST2QEXV\VHUYHUVWKHWDEOHJUHDWO\
IDFLOLWDWHVWURXEOHVKRRWLQJEHFDXVH\RXFDQXVH64/WRQDUURZGRZQZKDW\RXVHH
slave2> SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST\G
*************************** 1. row ***************************
ID: 5
USER: msandbox
HOST: localhost
DB: information_schema
COMMAND: Query
TIME: 0
STATE: executing
INFO: SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST
*************************** 2. row ***************************
ID: 4
USER: msandbox
HOST: localhost
DB: test
COMMAND: Sleep
TIME: 583
STATE:
INFO: NULL
*************************** 3. row ***************************
ID: 2
USER: system user
HOST:
DB: NULL
COMMAND: Connect
TIME: 940
STATE: Slave has read all relay log; waiting for the slave I/O thread t
INFO: NULL
*************************** 4. row ***************************
ID: 1
USER: system user
HOST:
DB: NULL
COMMAND: Connect
TIME: 1936
STATE: Waiting for master to send event

Effectively Using MySQL Troubleshooting Tools | 95


INFO: NULL
4 rows in set (0.00 sec)

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

SHOW ENGINE INNODB STATUS and InnoDB Monitors


7KHVH WRROV GLVSOD\ WKH PRVW LPSRUWDQW LQIRUPDWLRQ \RX QHHG ZKHQ XVLQJ ,QQR'%
WDEOHV <RX FDQ JHW WKH VDPH LQIRUPDWLRQ WKURXJK D SHOW ENGINE INNODB STATUS
FRPPDQG RU E\ FUHDWLQJ ,QQR'% PRQLWRU WDEOHV 7KHVH DUH QRW WDEOHV LQWHQGHG IRU
XVHUVEXWDZD\WRWHOO,QQR'%WRZULWHLQIRUPDWLRQDERXW,QQR'%¦VVWDWXVLQWKHHUURU
ORJHYHU\IHZVHFRQGV
:HZLOOGLVFXVVVWDQGDUGDQGORFNPRQLWRUVKHUH,QQR'%DOVRRIIHUV7DEOHVSDFHDQG
7DEOHPRQLWRUVZKLFKSULQWLQIRUPDWLRQIURPWKHVKDUHGWDEOHVSDFHDQGWKH,QQR'%
LQWHUQDOGLFWLRQDU\UHVSHFWLYHO\7DEOHVSDFHDQG7DEOHPRQLWRUVDUHQRWGLUHFWO\UHODWHG
WRWKHWRSLFRIFRQFXUUHQF\VR,¦PVNLSSLQJWKHPKHUH
7KH VWDQGDUG ,QQR'% PRQLWRU LV ZKDW \RX JHW ZKHQ \RX FDOO SHOW ENGINE INNODB
STATUS,QUHJDUGVWRFRQFXUUHQF\ZHDUHLQWHUHVWLQJLQ SEMAPHORES LATEST DETECTED
DEADLOCKDQGTRANSACTIONS
7KH SEMAPHORESVHFWLRQFRQWDLQVLQIRUPDWLRQDERXWWKUHDGVZDLWLQJIRUDPXWH[RUD
UZORFNVHPDSKRUH3D\DWWHQWLRQWRWKHQXPEHURIZDLWLQJWKUHDGVRUWRWKUHDGVWKDW
ZDLWIRUDORQJWLPH/RQJZDLWVDUHQRWQHFHVVDULO\V\PSWRPVRIDSUREOHPKRZHYHU
)RUH[DPSOH CHECK TABLEUXQQLQJRQDKXJHWDEOHZLOOKROGDVHPDSKRUHIRUDORQJ
WLPH%XWLI\RXVHHDORQJZDLWGXULQJQRUPDORSHUDWLRQV\RXVKRXOGFKHFNZKHWKHU
\RXULQVWDOODWLRQFDQKDQGOHWKHQXPEHURI,QQR'%WKUHDGV\RXKDYH/RZHULQJWKH
YDOXHRIinnodb_thread_concurrencyFDQKHOS
7KH LATEST DETECTED DEADLOCKVHFWLRQFRQWDLQVLQIRUPDWLRQDERXWWKHPRVWUHFHQWO\
GHWHFWHGGHDGORFN,WLVHPSW\LIQRGHDGORFNKDVEHHQGHWHFWHGVLQFHVHUYHUVWDUWXS
<RXFDQPRQLWRUWKLVVHFWLRQWRVHHZKHWKHUWKHUHDUHGHDGORFNVLQ\RXUDSSOLFDWLRQ

96 | Chapter 2:ಗYou Are Not Alone: Concurrency Issues


.QRZLQJWKHUHDUHGHDGORFNV\RXFDQHLWKHUPRYHTXHULHVDSDUWLQ\RXUDSSOLFDWLRQVR
WKHUHLVQRFRQIOLFWOHDGLQJWRGHDGORFNRUDGGFRGHWKDWZLOOKDQGOHLWJUDFHIXOO\
7KH TRANSACTIONS VHFWLRQ FRQWDLQV LQIRUPDWLRQ DERXW DOO FXUUHQWO\ UXQQLQJ
WUDQVDFWLRQV)RUWKHGLVFXVVLRQLQWKLVFKDSWHULWLVHVSHFLDOO\LPSRUWDQWWRQRWHWKDW
WKLVVHFWLRQOLVWVLQIRUPDWLRQDERXWDOOORFNVIRUZKLFKDOODFWLYHWUDQVDFWLRQVDUHZDLWLQJ
,I,QQR'%/RFN0RQLWRULVWXUQHGRQWKLVVHFWLRQZLOODOVRFRQWDLQLQIRUPDWLRQDERXW
ZKLFKORFNVLWKROGV7KLVLVYHU\XVHIXOLQIRUPDWLRQIRUGHEXJJLQJORFNZDLWV
7RGHPRQVWUDWHKRZWKH,QQR'%/RFN0RQLWRUFDQKHOS\RXGHEXJORFNVOHW¦VJREDFN
WRWKHH[DPSOHLQ£+LGGHQ4XHULHV¤RQSDJH,IZHWXUQRQWKH,QQR'%/RFN0RQLWRU
DQGUXQVDPHTXHULHVZHZLOOVHHDELWPRUHLQWKHSHOW ENGINE INNODB STATUSRXWSXW
mysql> SHOW ENGINE INNODB STATUS \G
*************************** 1. row ***************************
Type: InnoDB
Name:
Status:
=====================================
110809 14:03:45 INNODB MONITOR OUTPUT
=====================================
Per second averages calculated from the last 6 seconds
----------
SEMAPHORES
----------
OS WAIT ARRAY INFO: reservation count 12, signal count 12
Mutex spin waits 0, rounds 209, OS waits 7
RW-shared spins 10, OS waits 5; RW-excl spins 0, OS waits 0
------------
TRANSACTIONS
------------
Trx id counter 0 26244358
Purge done for trx's n:o < 0 26244356 undo n:o < 0 0
History list length 4
LIST OF TRANSACTIONS FOR EACH SESSION:
---TRANSACTION 0 0, not started, OS thread id 101493760
MySQL thread id 219, query id 96 localhost root
show engine innodb status
---TRANSACTION 0 26244357, ACTIVE 1 sec, OS thread id 101357568 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 217, query id 95 localhost root Updating
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 ;;

------------------
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

Effectively Using MySQL Troubleshooting Tools | 97


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 ;;

---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 ;;

&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

98 | Chapter 2:ಗYou Are Not Alone: Concurrency Issues


7KHUHDUHRWKHUXVHIXOSDUWVWRWKH,QQR'%0RQLWRURXWSXW,WPDNHVVHQVHWRORRNDW
FILE I/O INSERT BUFFER AND ADAPTIVE HASH INDEX BUFFER POOL AND MEMORYDQG ROW
OPERATIONS ZKHQ \RX VXVSHFW DQ XQGLDJQRVHG GHDGORFN RU MXVW D YHU\ ORQJ ORFN
:KHQHYHUUHDGZULWHRSHUDWLRQVDUHVWRSSHGDQGWKUHDGVDUHZDLWLQJIRUHDFKRWKHU
WKLVLVSUREDEO\DORFNLQJLVVXHHYHQLIWKHORFNHGWKUHDGLVLQWKH£8SGDWLQJ¤6WDWH

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

Typical INFORMATION_SCHEMA Queries That Are Useful


When Debugging Concurrency Issues
,QIRUPDWLRQDERXWDOOORFNVWUDQVDFWLRQVDUHZDLWLQJIRU
SELECT * FROM INNODB_LOCK_WAITS

$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'

Effectively Using MySQL Troubleshooting Tools | 99


PERFORMANCE_SCHEMA Tables
7KHSHUIRUPDQFHVFKHPDOHWV\RXPRQLWRU0\64/VHUYHUH[HFXWLRQDWDORZOHYHO,WLV
LPSOHPHQWHGDVDGDWDEDVHFRQWDLQLQJWDEOHVEDVHGRQWKHPERFORMANCE_SCHEMAVWRUDJH
HQJLQH7KLVVWRUDJHHQJLQHFROOHFWVHYHQWGDWDXVLQJ£LQVWUXPHQWDWLRQSRLQWV¤GHILQHG
LQ WKH VHUYHU VRXUFH FRGH 7DEOHV LQ PERFORMANCE_SCHEMA GR QRW XVH SHUVLVWHQW GLVN
VWRUDJH
7R GHEXJ FRQFXUUHQF\ LVVXHV \RX FDQ XVH WKH COND_INSTANCES FILE_INSTANCES
MUTEX_INSTANCES DQG RWLOCK_INSTANCES WDEOHV DORQJ ZLWK YDULRXV EVENTS_WAITS_*
WDEOHV7KH THREADSWDEOHFDQKHOS\RXFRUUHODWHLQWHUQDOWKUHDGVZLWK0\64/¦VXVHU
WKUHDGV
$OO *INSTANCES WDEOHV FRQWDLQ NAME DQG OBJECT_INSTANCE_BEGIN ILHOGV ZKLFK DUH WKH
QDPH RI WKH LQVWDQFH DQG WKH PHPRU\ DGGUHVV RI WKH REMHFW EHLQJ LQVWUXPHQWHG
UHVSHFWLYHO\
7KHCOND_INSTANCESWDEOHFRQWDLQVDOLVWRIZDLWFRQGLWLRQVWKDWZHUHFUHDWHGDIWHUWKH
VHUYHU VWDUWHG &RQGLWLRQV D WHUP WKDW ZLOO EH IDPLOLDU WR SURJUDPPHUV ZKR KDYH
VWXGLHGFRQFXUUHQF\ DUHDZD\WRPDNHRQHWKUHDGZDLWIRUDQRWKHU
7KH FILE_INSTANCESWDEOHFRQWDLQVDOLVWRIILOHVVHHQE\WKHSHUIRUPDQFHVFKHPD$
ILOHQDPHLVLQVHUWHGLQWRWKLVWDEOHWKHILUVWWLPHDVHUYHURSHQVLWDQGVWD\VWKHUHXQWLO
LW LV GHOHWHG IURP WKH GLVN &XUUHQWO\ RSHQ ILOHV KDYH D SRVLWLYH OPEN_COUNT 7KH
NumberILHOGFRQWDLQVWKHQXPEHURIILOHKDQGOHVWKDWFXUUHQWO\XVHWKHILOH
7KHMUTEX_INSTANCESWDEOHFRQWDLQVDOLVWRIPXWH[HVVHHQE\WKHSHUIRUPDQFHVFKHPD
0XWH[HVZKHUHLOCKED_BY_THREAD_IDLVNOT NULLDUHWKRVHWKDWDUHFXUUHQWO\ORFNHG
7KH RWLOCK_INSTANCES WDEOH LV D OLVW RI DOO UHDGZULWH ORFN LQVWDQFHV
WRITE_LOCKED_BY_THREAD_ID VKRZV WKH ,' RI WKH WKUHDG WKDW KROGV WKH ORFN
READ_LOCKED_BY_COUNT VKRZV KRZ PDQ\ UHDG ORFNV DUH FXUUHQWO\ DFTXLUHG RQ WKH
LQVWDQFH
EVENTS_WAITS_*WDEOHVFRQWDLQLQIRUPDWLRQDERXWZDLWHYHQWVIRUHDFKWKUHDG
)RUH[DPSOHWRILQGRXWZKLFKNLQGRIORFNDWUDQVDFWLRQLVZDLWLQJIRU\RXFDQXVH
IROORZLQJTXHU\
mysql> SELECT THREAD_ID, EVENT_NAME, SOURCE, OPERATION, PROCESSLIST_ID \
FROM events_waits_current JOIN threads USING (THREAD_ID) WHERE PROCESSLIST_ID > 0\G
*************************** 1. row ***************************
THREAD_ID: 36
EVENT_NAME: wait/synch/mutex/mysys/THR_LOCK::mutex
SOURCE: thr_lock.c:550
OPERATION: lock
PROCESSLIST_ID: 20
*************************** 2. row ***************************
THREAD_ID: 41
EVENT_NAME: wait/synch/mutex/sql/THD::LOCK_thd_data
SOURCE: sql_class.cc:3754
OPERATION: lock

100 | Chapter 2:ಗYou Are Not Alone: Concurrency Issues


PROCESSLIST_ID: 25
*************************** 3. row ***************************
THREAD_ID: 40
EVENT_NAME: wait/synch/mutex/innodb/kernel_mutex
SOURCE: srv0srv.c:1573
OPERATION: lock
PROCESSLIST_ID: 24
3 rows in set (0.00 sec)

7KLVVKRZVWKDWWKUHDGLVZDLWLQJRQ,QQR'% kernel_mutexZKLOHLQSHOW PROCESS


LISTWKHVDPHTXHU\LVLQWKHUpdatingVWDWH
mysql> SHOW PROCESSLIST \G
*************************** 1. row ***************************
Id: 20
User: root
Host: localhost
db: performance_schema
Command: Query
Time: 0
State: NULL
Info: show processlist
*************************** 2. row ***************************
Id: 24
User: root
Host: localhost
db: sbtest
Command: Query
Time: 3
State: Updating
Info: update example set f2=f2*2
*************************** 3. row ***************************
Id: 25
User: root
Host: localhost
db: sbtest
Command: Sleep
Time: 228
State:
Info: NULL
3 rows in set (0.00 sec)

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

Effectively Using MySQL Troubleshooting Tools | 101


mysql> SELECT * FROM file_summary_by_instance WHERE file_name \
LIKE CONCAT(@@datadir,'sbtest/%') ORDER BY SUM_NUMBER_OF_BYTES_WRITE DESC, \
SUM_NUMBER_OF_BYTES_READ DESC \G
*************************** 1. row ***************************
FILE_NAME: /home/ssmirnov/mysql-5.5/data/sbtest/example.ibd
EVENT_NAME: wait/io/file/innodb/innodb_data_file
COUNT_READ: 0
COUNT_WRITE: 8
SUM_NUMBER_OF_BYTES_READ: 0
SUM_NUMBER_OF_BYTES_WRITE: 196608
*************************** 2. row ***************************
FILE_NAME: /home/ssmirnov/mysql-5.5/data/sbtest/example.frm
EVENT_NAME: wait/io/file/sql/FRM
COUNT_READ: 14
COUNT_WRITE: 17
SUM_NUMBER_OF_BYTES_READ: 948
SUM_NUMBER_OF_BYTES_WRITE: 4570
*************************** 3. row ***************************
FILE_NAME: /home/ssmirnov/mysql-5.5/data/sbtest/sbtest.ibd
EVENT_NAME: wait/io/file/innodb/innodb_data_file
COUNT_READ: 5236
COUNT_WRITE: 0
SUM_NUMBER_OF_BYTES_READ: 85786624
SUM_NUMBER_OF_BYTES_WRITE: 0
*************************** 4. row ***************************
FILE_NAME: /home/ssmirnov/mysql-5.5/data/sbtest/sbtest.frm
EVENT_NAME: wait/io/file/sql/FRM
COUNT_READ: 7
COUNT_WRITE: 0
SUM_NUMBER_OF_BYTES_READ: 1141
SUM_NUMBER_OF_BYTES_WRITE: 0
*************************** 5. row ***************************
FILE_NAME: /home/ssmirnov/mysql-5.5/data/sbtest/db.opt
EVENT_NAME: wait/io/file/sql/dbopt
COUNT_READ: 0
COUNT_WRITE: 0
SUM_NUMBER_OF_BYTES_READ: 0
SUM_NUMBER_OF_BYTES_WRITE: 0
5 rows in set (0.00 sec)

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

102 | Chapter 2:ಗYou Are Not Alone: Concurrency Issues


7KHJHQHUDOTXHU\ORJFDQKHOS\RXWRILQGDTXHU\WKDWFDQQRWEHIRXQGE\RWKHUPHDQV
2QHH[DPSOHLVDPXOWLVWDWHPHQWWUDQVDFWLRQWKDWEORFNVRWKHUV,IWKLVLVFDOOHGIURP
DQDSSOLFDWLRQLWLVVRPHWLPHVKDUGWRGHWHUPLQHZKLFKH[DFWTXHU\FDXVHGWKHSURE
OHP,QVXFKFDVHVWXUQRQWKHJHQHUDOTXHU\ORJZDLWXQWLOWKHSUREOHPUHRFFXUVDQG
WKHQVHDUFKWKHJHQHUDOORJIRUTXHULHVE\DSDUWLFXODUWKUHDG$W\SLFDOWURXEOHVKRRWLQJ
SDWWHUQLVWRORRNLQWKH,QQR'%0RQLWRURXWSXWILQGWKH,'RIWKH0\64/WKUHDGRI
WKHWUDQVDFWLRQWKDWSUREDEO\EORFNLQJDQRWKHUWUDQVDFWLRQDQGWKHQUXQWKHTXHU\
SELECT argument, event_time FROM mysql.general_log WHERE thread_id =
THIS_THREAD_ID ORDER BY event_time

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)

SHOW ENGINE INNODB STATUSVKRZV


mysql> SHOW ENGINE INNODB STATUS \G
*************************** 1. row ***************************
Type: InnoDB

Effectively Using MySQL Troubleshooting Tools | 103


Name:
Status:
=====================================
110809 13:57:21 INNODB MONITOR OUTPUT
=====================================
Per second averages calculated from the last 33 seconds
----------
SEMAPHORES
----------
OS WAIT ARRAY INFO: reservation count 5, signal count 5
Mutex spin waits 0, rounds 80, OS waits 2
RW-shared spins 6, OS waits 3; RW-excl spins 0, OS waits 0
------------
TRANSACTIONS
------------
Trx id counter 0 26244354
Purge done for trx's n:o < 0 26243867 undo n:o < 0 0
History list length 3
LIST OF TRANSACTIONS FOR EACH SESSION:
---TRANSACTION 0 0, not started, OS thread id 101493760
MySQL thread id 219, query id 86 localhost root
SHOW ENGINE INNODB STATUS
---TRANSACTION 0 26244353, ACTIVE 119 sec, OS thread id 101357568 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 217, query id 85 localhost root Updating
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 26244353 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 000001907500; asc u ;; 2:
len 7; hex 00000000320762; asc 2 b;;

------------------
---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)

104 | Chapter 2:ಗYou Are Not Alone: Concurrency Issues


)URPWKLVRXWSXWZHFDQHDVLO\VHHWKDWRXUWUDQVDFWLRQLVXSGDWLQJWKHVDPHURZLQ
WKHVDPHWDEOHDVWKHEORFNHGWUDQVDFWLRQ:LWKWKLVNQRZOHGJHZHFDQUHFRGHRXU
DSSOLFDWLRQ

Effectively Using MySQL Troubleshooting Tools | 105


CHAPTER 3
Effects of Server Options

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

$110815 14:08:50 [ERROR] Can't find messagefile


'/users/ssmirnova/blade12/build/mysql-trunk-bugfixing/share/errmsg.sys'
110815 14:08:50 [Warning] Can't create test file /wrong/path/blade12.lower-test
110815 14:08:50 [Warning] Can't create test file /wrong/path/blade12.lower-test
./bin/mysqld: Can't change dir to '/wrong/path/' (Errcode: 2)
110815 14:08:50 [ERROR] Aborting

110815 14:08:50 [Note] Binlog end


110815 14:08:50 [Note]

[1]+ Exit 1 ./bin/mysqld --datadir=/wrong/path

%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

108 | Chapter 3:ಗEffects of Server Options


$mysqladmin -h127.0.0.1 -P3306 ping
mysqladmin: connect to server at '127.0.0.1' failed
error: 'Can't connect to MySQL server on '127.0.0.1' (10061)'
Check that mysqld is running on 127.0.0.1 and that the port is 3306.
You can check this by doing 'telnet 127.0.0.1 3306'

$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

Service Options | 109


XA: NO
Savepoints: NO
*************************** 6. row ***************************
Engine: FEDERATED
Support: NO
Comment: Federated MySQL storage engine
Transactions: NULL
XA: NULL
Savepoints: NULL
*************************** 7. row ***************************
Engine: ARCHIVE
Support: YES
Comment: Archive storage engine
Transactions: NO
XA: NO
Savepoints: NO
*************************** 8. row ***************************
Engine: MyISAM
Support: DEFAULT
Comment: Default engine as of MySQL 3.23 with great performance
Transactions: NO
XA: NO
Savepoints: NO
8 rows in set (0.00 sec)

, 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

110 | Chapter 3:ಗEffects of Server Options


WRXVHWKHDGYDQWDJHVRI,QQR'%FDQUXQLQWRKXJHLVVXHVLIWKHWDEOHVDUH0\,6$0
LQVWHDG$QG,KDYHQ¦WHYHQWDONHGDERXWWKHDEVHQFHRIWUDQVDFWLRQV
■ &KHFNZKHWKHUDIHDWXUH\RXUHO\RQH[LVWVLQWKHVHUYHULQVWDQFHLI\RXH[SHULHQFH
SUREOHPVZLWKLW
7KHRWKHUPDMRUVHWRISUREOHPVZLWKVHUYLFHRSWLRQVFRQFHUQVRSWLRQVWKDWFKDQJHWKH
EHKDYLRURI0\64/DOWKRXJKWKHLUPDLQSXUSRVHLVGLIIHUHQW:KHQVHWWLQJDVHUYLFH
RSWLRQ\RXFDQH[SHFWLWZLOOSURYLGHRQHIHDWXUHRUDQRWKHUEXW\RXPD\QRWH[SHFW
LWWRDIIHFW\RXUTXHULHV
$WULYLDOH[DPSOHLVWKHHIIHFWRIELQDU\ORJJLQJRQFUHDWLQJVWRUHGIXQFWLRQV:KHQ
HQDEOHG\RXFDQH[SHFWLWZLOOVWRUHDOOHYHQWVWKDWPRGLI\GDWDEXW\RXPLJKWQRWEH
DZDUHRILWVRWKHUVLGHHIIHFWV
)LUVW,ZLOOVKRZKRZRQHFDQFUHDWHDGXPP\VWRUHGIXQFWLRQLIWKHVHUYHUGRHVQRW
XVHWKHELQDU\ORJ
root> GRANT ALL ON test.* TO sveta@'%';
Query OK, 0 rows affected (0.01 sec)

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)

sveta> CREATE FUNCTION f1() RETURNS INT RETURN 1;


ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS
SQL DATA in its declaration and binary logging is enabled (you *might* want to
use the less safe log_bin_trust_function_creators variable)

7KHHUURUPHVVDJHFOHDUO\H[SODLQVWKHLVVXH,ZDQWHGWRVKRZWKLVH[DPSOHWRGHPRQ
VWUDWHKRZDQRSWLRQFDQFKDQJHVHUYHUEHKDYLRUHYHQLILWVPDLQSXUSRVHLVQRWWRDIIHFW
XVHUTXHULHV8VXDOO\ZKHQDXVHUPHHWVVXFKDSUREOHPWKHFDXVHLVQRWVRFOHDUDQG
FDQEHFRQIXVLQJ

Variables That Are Supposed to Change the Server Behavior


$QRWKHUVHWRIYDULDEOHVDIIHFWVKRZWKH0\64/VHUYHUKDQGOHVXVHULQSXW

Variables That Are Supposed to Change the Server Behavior | 111


,ZLOOVKRZDWULYLDOH[DPSOHWKDWFOHDUO\VKRZVWKHHIIHFWRIVHWWLQJVXFKDYDULDEOH,Q
WKLVFDVHZHZLOOVHW64/0RGHWRSTRICT_TRANS_TABLESVRWKDWDWWHPSWVWRLQVHUWLQYDOLG
GDWDLQWRWUDQVDFWLRQDOWDEOHVZLOOEHUHMHFWHGLQVWHDGRIEHLQJVPRRWKHGRYHU+RZHYHU
ZHH[SHFWWKHVHUYHUWRIL[WKHVWDWHPHQWVLISRVVLEOHIRUQRQWUDQVDFWLRQDOWDEOHVLQVWHDG
RIUHMHFWLQJWKHVWDWHPHQWV
mysql> SET @@sql_mode = 'strict_trans_tables';
Query OK, 0 rows affected (0.03 sec)

mysql> CREATE TABLE `myisam` (


-> `id` bigint(20) NOT NULL AUTO_INCREMENT,
-> `a` varchar(50) NOT NULL,
-> `b` varchar(50) NOT NULL,
-> PRIMARY KEY (`id`)
-> ) ENGINE=MyISAM DEFAULT CHARSET=latin1 ;
Query OK, 0 rows affected (0.05 sec)

mysql> INSERT INTO `myisam` (id,a) VALUES (1,'a');


ERROR 1364 (HY000): Field 'b' doesn't have a default value

,GHOLEHUDWHO\LVVXHGDQHUURQHRXV INSERTRPLWWLQJDYDOXHIRUWKH bFROXPQ,H[SHFW


WKHVHUYHUWRLQVHUWDQHPSW\VWULQJIRUb%XWHYHQWKRXJKWKLVWDEOHXVHVWKH0\,6$0
VWRUDJHHQJLQHWKHLQVHUWIDLOVZLWKDQHUURUPHVVDJH
7KH 0\64/ 5HIHUHQFH 0DQXDO H[SODLQV WKH EHKDYLRU VHH KWWSGHYP\VTOFRPGRF
UHIPDQHQVHUYHUVTOPRGHKWPO 
STRICT_TRANS_TABLES,IDYDOXHFRXOGQRWEHLQVHUWHGDVJLYHQLQWRDWUDQVDFWLRQDOWDEOH
DERUWWKHVWDWHPHQW)RUDQRQWUDQVDFWLRQDOWDEOHDERUWWKHVWDWHPHQWLIWKHYDOXHRFFXUV
LQDVLQJOHURZVWDWHPHQWRUWKHILUVWURZRIDPXOWLURZVWDWHPHQW
0\INSERTVWDWHPHQWZDVDVLQJOHURZVWDWHPHQWVRWKHVHUYHUUHIXVHGWRFRUUHFWLW%XW
WKLVGRHVQ¦WVHHPLQWXLWLYHGRHVLW"
■ &DUHIXOO\FKHFNZKDWDQRSWLRQGRHVLI\RXVHHEHKDYLRU\RXGRQ¦WH[SHFW

Options That Limit Hardware Resources


7KHRSWLRQVLQWKLVJURXSVHWOLPLWVRQYDULRXVKDUGZDUHUHVRXUFHV7KH\FDQEHXVHG
IRUWZRSXUSRVHVWRWXQHSHUIRUPDQFHDQGWROLPLWXVHIRUFHUWDLQRSHUDWLRQV7KHODWWHU
RSWLRQV DUH XVHIXO ZKHQ \RX ZDQW WR OLPLW WUDIILF EHWZHHQ FOLHQWV DQG WKH VHUYHU RU
SUHYHQW'HQLDORI6HUYLFHDWWDFNV,W¦VEHWWHUIRUSDUWLFXODUXVHUVWRJHWJUDFHIXOHUURUV
EHFDXVHRIODFNRIUHVRXUFHVWKDQIRUP\VTOGWRGLHEHFDXVHLWFDQ¦WKDQGOHDOOLQFRPLQJ
UHTXHVWV
/DWHULQWKLVFKDSWHU,ZLOOGHVFULEHWKHWDFWLFVRQHVKRXOGIROORZZKHQDGMXVWLQJWKHVH
RSWLRQV+HUH,ZDQWWRSRLQWWRFDVHVZKHQVXFKYDULDEOHVOHDGWRGLIIHUHQWDQGSHUKDSV
XQH[SHFWHGEHKDYLRUFRPSDUHGWRVHWXSVZKHUHWKHYDULDEOHVZHUHQRWVHW$VDOZD\V
,ZLOOVKRZE\H[DPSOH

112 | Chapter 3:ಗEffects of Server Options


,Q P\ GD\WRGD\ MRE , VHH PDQ\ XVHUV ZKR DUH DIIHFWHG E\ LJQRULQJ WKH YDOXH RI
max_allowed_packet7KLVYDULDEOHOLPLWVWKHQXPEHURIE\WHVWKDWFDQEHVHWLQDVLQJOH
SDFNHWEHWZHHQWKHVHUYHUDQGWKHFOLHQW,QWKLVH[DPSOH,ORZHUWKHGHIDXOW0%YDOXH
RImax_allowed_packetMXVWWRGHPRQVWUDWHLWVHIIHFW
mysql> SELECT repeat('a',1025);
+------------------+
| repeat('a',1025) |
+------------------+
| NULL |
+------------------+
1 row in set, 1 warning (0.00 sec)

mysql> SHOW WARNINGS\G


*************************** 1. row ***************************
Level: Warning
Code: 1301
Message: Result of repeat() was larger than max_allowed_packet (1024) - truncated
1 row in set (0.00 sec)

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

Using the --no-defaults Option


,WLVKDUGWRUHPHPEHUE\KHDUWZKDWHYHU\YDULDEOHGRHV(YHQ,FDQQRWGRLWDQG,
ZRUNZLWKWKHPHYHU\GD\2QHVROXWLRQLVWRJRWRWKHOLVWRIRSWLRQVDQGH[FOXGHHDFK
RIWKHPRQHE\RQH%XWWKDW¦VQRWHDV\9HUVLRQRI0\64/KDVYDULDEOHVP\
RXWGDWHGLQVWDOODWLRQKDVDQGQRRQHFDQJXDUDQWHHWKDWWKLVYDOXHZLOOQRW
JURZLQWKHIXWXUH,I\RXXVHDFXVWRPVWRUDJHHQJLQHLWFDQKDYHLWVRZQRSWLRQVDV
ZHOO
,WLVPXFKHDVLHUWRFKHFNKRZWKH0\64/VHUYHUVKRXOGZRUNZLWKQRRSWLRQVVSHFLILHG
LHLILWXVHVWKHGHIDXOWVIRUDOOYDOXHV,I\RXKDYHDURXJKJXHVVDERXWKRZ mysqld
VKRXOG ZRUN ZLWK QR FXVWRP RSWLRQV VHW \RX FDQ VWDUW WKH VHUYHU ZLWK WKH
--no-defaultsRSWLRQDQGFRPSDUHWKHUHVXOWVWRWKRVH\RXJHWZKHQFXVWRPRSWLRQV
DUHVHW

Using the --no-defaults Option | 113


%RWKWKH--no-defaultsDQG--defaults-fileRSWLRQVPXVWEHVSHFLILHG
DV WKH ILUVW RSWLRQV SDVVHG WR P\VTOG 2WKHUZLVH WKH VHUYHU ZLOO QRW
UHFRJQL]HWKHP

,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

Haste Makes Waste


7KLVSRSXODU(QJOLVKSURYHUEKDVDQHTXLYDOHQWLQPDQ\RWKHUODQJXDJHV5XVVLDQVKDYH
RQH WKDW FDQ EH WUDQVODWHG OLWHUDOO\ DV £VOLGLQJ VORZO\ DUULYLQJ IXUWKHU¤ , WKLQN WKLV
ZLVGRPLVJRRGZKHQ\RXWXQHWKH0\64/VHUYHUWRRDWOHDVWZKHQ\RXDUHQRW
VXUHZKDW\RXDUHGRLQJ
■ 8QOHVV\RXDUHVXUHZKDWLVZURQJDGGRSWLRQVRQHE\RQHDQGWKHQWHVW
WKHFRQILJXUDWLRQHDFKWLPH
7KLVPHDQVWKDWLI\RXWKLQNVRPHVHWRIRSWLRQVFDQPDNHWKH0\64/VHUYHU¦VEHKDYLRU
EHWWHUIRU\RXUDSSOLFDWLRQFKDQJHRQHRSWLRQILUVWWKHQWHVWDQGWKHQLI\RXDUHKDSS\
ZLWKWKHUHVXOWDGGDQRWKHURSWLRQDQGVRRQXQWLO\RXKDYHFKHFNHGHYHU\UHOHYDQW
RSWLRQ7KLVFDQDSSHDUVORZEXWLIVRPHWKLQJJRHVZURQJ\RXFDQVDIHO\UROOEDFN
WKHPRVWUHFHQWFKDQJHDQGTXLFNO\UHWXUQ\RXUVHUYHUWRDZRUNLQJVWDJH
7KLVPHWKRGLVHVSHFLDOO\LPSRUWDQWZKHQ\RXDGMXVWEXIIHUVRURWKHURSWLRQVWKDWOLPLW
KDUGZDUHUHVRXUFHVEXWFDQEHXVHGIRURSWLRQVWKDWFKDQJHVHUYHUEHKDYLRUDVZHOO
(YHQZLWKDJRRGNQRZOHGJHRIZKDWYDULDEOHVDUHGRLQJLWLVPXFKHDVLHUWRILQGDQG
IL[DVLQJOHPLVWDNHWKDQILQGRXWZKDWLVZURQJLQGR]HQVRIRSWLRQV

:KHQXVLQJWKLVPHWKRGVDYHWKHUHVXOWVRIHYHU\WHVW)RUH[DPSOHLI
\RXDUHZRUNLQJRQLPSURYLQJSHUIRUPDQFHUXQEHQFKPDUNVRUPHDV
XUHTXHU\H[HFXWLRQWLPHEHIRUHFKDQJLQJDQ\WKLQJDQGWKHQUHSHDWWKH
VDPHWHVWDIWHUPRGLI\LQJHDFKRSWLRQ

114 | Chapter 3:ಗEffects of Server Options


The SET Statement
0\64/VXSSRUWVWZRNLQGVRIYDULDEOHVSESSIONDQGGLOBALSESSIONYDULDEOHVDUHVHW
IRUWKHFXUUHQWFRQQHFWLRQRQO\DQGGRQRWDIIHFWRWKHUVGLOBALYDULDEOHVDSSO\WRDOO
FRQQHFWLRQVFUHDWHGDIWHU\RXVHWVXFKDYDULDEOH%XWVHWWLQJDGLOBALYDULDEOHGRHVQRW
DIIHFWWKHFXUUHQWFRQQHFWLRQVR\RXVKRXOGHLWKHUVHWERWKSESSIONDQGGLOBALYDUL
DEOHVRUUHFRQQHFWLI\RXQHHGWRXVHDQHZYDOXHLQWKHFXUUHQWFRQQHFWLRQ
<RXFDQVHWDVHVVLRQYDULDEOHXVLQJWKHVWDWHPHQW
SET [SESSION] var_name=value

,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

How to Check Whether Changes Had an Effect


7KHUHDUHVWDWXVYDULDEOHVWKDWVKRZWKHFXUUHQWVHUYHUVWDWXV$VRSSRVHGWRFRQILJX
UDWLRQYDULDEOHVWKHVHGRQRWDIIHFWVHUYHUEHKDYLRUEXWLQVWHDGFRQWDLQLQIRUPDWLRQ

 7KHUH DUH IHZ H[FHSWLRQV VXFK DV SET GLOBAL general_log=1 8VXDOO\ VXFK H[FHSWLRQV GR QRW KDYH D
SESSIONHTXLYDOHQW

How to Check Whether Changes Had an Effect | 115


DERXWZKDWLVKDSSHQLQJLQWKHP\VTOGSURFHVV6WDWXVYDULDEOHVDUHUHDGRQO\LHLWLV
WKH0\64/VHUYHUWKDWFKDQJHVWKHPQRWWKHXVHU7KH\VKRZVXFKWKLQJVDVKRZPDQ\
TXHULHVZHUHH[HFXWHGDQGRIZKDWNLQGQHWZRUNWUDIILFKRZLQGH[HVDUHXVHG \RX
FDQILQGDQH[DPSOHLQ£4XHULHV7KDW0RGLI\'DWD¤RQSDJH EXIIHUXVDJHKRZ
PDQ\WDEOHVDUHRSHQKRZPDQ\WHPSRUDU\WDEOHVZHUHFUHDWHGDQGDORWRIRWKHU
XVHIXO LQIRUPDWLRQ , ZRQ¦W GHVFULEH HDFK RI WKHP KHUH EXW ZLOO QRWH ZKLFK VWDWXV
YDULDEOHWRZDWFKZKLOHFRYHULQJWKHYDULDEOHVWKHPVHOYHVODWHULQWKLVFKDSWHUDV,GLG
LQ£4XHULHV7KDW0RGLI\'DWD¤RQSDJH
,QWKHFRQWH[WRIDOWHULQJYDULDEOHVWKHVWDWXVYDULDEOHVDUHXVHIXOPRVWO\LQ£3HUIRU
PDQFH5HODWHG2SWLRQV¤RQSDJH:HZLOODOVRGLVFXVVKRZWRJHWLQIRUPDWLRQ
DERXWZKDWLVJRLQJRQLQ\RXU0\64/FRQILJXUDWLRQLQ&KDSWHU
/LNH RWKHU YDULDEOHV VWDWXV YDULDEOHV FDQ DSSO\ WR ERWK LQGLYLGXDO VHVVLRQV DQG DOO
VHVVLRQV JOREDO 6HVVLRQYDULDEOHVVKRZWKHVWDWXVIRUWKHFXUUHQWVHVVLRQZKHUHDV
JOREDO YDULDEOHV VKRZ WKH VWDWXV VLQFH WKH VHUYHU ZDV VWDUWHG RU VLQFH WKH ODVW FLUSH
STATUSFRPPDQGZDVH[HFXWHG

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

116 | Chapter 3:ಗEffects of Server Options


FRQFHQWUDWHRQWKRVHWKDW,¦YHIRXQGDUHRIWHQXVHGLPSURSHUO\RUUHTXLUHDQH[SDQGHG
XQGHUVWDQGLQJ

$WILUVW,GRXEWHGZKHWKHU,VKRXOGGHYRWHDVHFWLRQRIWKLVERRNWR
LQGLYLGXDOYDULDEOHVEHFDXVHHDFKRQHLVIXOO\GHVFULEHGLQRWKHUVRXUFHV
"v %XWWKH0\64/5HIHUHQFH0DQXDOGRHVQRWGHVFULEHWKHPVSHFLILFDOO\
IURP D WURXEOHVKRRWLQJ DSSURDFK VR , GHFLGHG WR RIIHU WKLV VKRUW
RYHUYLHZ

Options That Affect Server and Client Behavior


7KLVVHFWLRQGLVFXVVHVJHQHUDOVHUYHURSWLRQVDVZHOODVRSWLRQVUHODWHGWRUHSOLFDWLRQ
FRQQHFWLRQV DQG VWRUDJH HQJLQHV ,Q WKH ODWWHU VHW ,¦OO FRYHU RQO\ WKH 0\,6$0 DQG
,QQR'%VWRUDJHHQJLQHV

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)

mysql> SELECT group_concat(table_name) FROM tables WHERE


table_schema='mysql'\G
*************************** 1. row ***************************
group_concat(table_name):
columns_priv,db,event,func,general_log,help_category,help_keyword,help_relation,
help_topic,host,ndb_binlog_index,plugin,proc,procs_priv,servers,slow_log,
tables_priv,time_zone,time_zone_leap_second,time_zone_name,time_zone_transition,
time_zone_transition_type,user
1 row in set (0.15 sec)

DQG
mysql> SET group_concat_max_len=100; O
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT group_concat(table_name) FROM tables WHERE


table_schema='mysql'\G
*************************** 1. row ***************************

Descriptions of Variables | 117


group_concat(table_name): columns_priv,db,event,func,general_log,help_category,
help_keyword,help_relation,help_topic,host,ndb_
1 row in set, 1 warning (0.06 sec)

mysql> SHOW WARNINGS\G


*************************** 1. row ***************************
Level: Warning
Code: 1260
Message: Row 11 was cut by GROUP_CONCAT()
1 row in set (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)

mysql> SELECT * FROM t1 WHERE "f1"=1;


Empty set, 1 warning (0.00 sec)

mysql> SET SQL_MODE='ansi_quotes';

Query OK, 0 rows affected (0.00 sec)

mysql> SELECT * FROM t1 WHERE "f1"=1;

118 | Chapter 3:ಗEffects of Server Options


+----+----------------------------------+
| f1 | f2 |
+----+----------------------------------+
| 1 | f9f760a2dc91dfaf1cbc95046b249a3b |
+----+----------------------------------+
1 row in set (0.21 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

Descriptions of Variables | 119


&KDUDFWHUVHWDQGFROODWLRQVXSSRUWLQ0\64/LVUHDOO\JRRGEXWDORWRILWVDVSHFWV
FDQEHWXQHGDQGWKHUHIRUHSHRSOHRIWHQJHWFRQIXVHGE\WKHP:KHQ\RXVXVSHFW
DFKDUDFWHUVHWUHODWHGHUURU,UHFRPPHQG\RXVWXG\WKHFKDSWHUDERXWFKDUDFWHU
VHWVDQGFROODWLRQVLQWKH0\64/5HIHUHQFH0DQXDOFDUHIXOO\8VXDOO\\RXZLOOILQG
DQVZHUVWR\RXUTXHVWLRQVWKHUH
7KHIROORZLQJH[DPSOHVKRZVKRZFKDQJLQJMXVWWKHFROODWLRQIRUDWDEOHFDQDIIHFW
\RXUGDWD
mysql> SET NAMES latin1;
Query OK, 0 rows affected (0.13 sec)

mysql> CREATE TEMPORARY TABLE t1(f1 VARCHAR(255)) DEFAULT


CHARSET=latin1 COLLATE=latin1_german2_ci;
Query OK, 0 rows affected (0.23 sec)

mysql> INSERT INTO t1 VALUES('Sveta'), ('Andy');


Query OK, 2 rows affected (0.29 sec)
Records: 2 Duplicates: 0 Warnings: 0

mysql> CREATE TEMPORARY TABLE t2 AS SELECT 'Sveta' AS


f1;
Query OK, 1 row affected (0.21 sec)
Records: 1 Duplicates: 0 Warnings: 0

mysql> SELECT * FROM t1 JOIN t2 USING(f1);


ERROR 1267 (HY000): Illegal mix of collations (latin1_german2_ci,IMPLICIT) and
(latin1_swedish_ci,IMPLICIT) for operation '='

: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)

mysql> SHOW VARIABLES LIKE '%coll%';


+----------------------+-------------------+
| Variable_name | Value |

120 | Chapter 3:ಗEffects of Server Options


+----------------------+-------------------+
| collation_connection | latin1_swedish_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8_general_ci |
+----------------------+-------------------+
3 rows in set (0.01 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)

mysql> DROP TABLE t2;


Query OK, 0 rows affected (0.04 sec)

mysql> CREATE TEMPORARY TABLE t2 AS SELECT 'Sveta' AS


f1;
Query OK, 1 row affected (0.01 sec)
Records: 1 Duplicates: 0 Warnings: 0

mysql> SELECT * FROM t1 JOIN t2 USING(f1);


+-------+
| f1 |
+-------+
| Sveta |
+-------+
1 row in set (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 |
+--------------------------+

Descriptions of Variables | 121


| 0 |
+--------------------------+
1 row in set (0.10 sec)

mysql> CREATE TABLE Table1(F1 INT NOT NULL AUTO_INCREMENT PRIMARY


KEY) ENGINE=InnoDB;
Query OK, 0 rows affected (0.27 sec)

mysql> CREATE TABLE Table2(F1 INT, CONSTRAINT F1 FOREIGN KEY(F1)


REFERENCES Table1(F1)) ENGINE=InnoDB;
Query OK, 0 rows affected (0.04 sec)

mysql> \q
Bye

$mysqldump --socket=/tmp/mysql50.sock -uroot test Table1


Table2
-- MySQL dump 10.11
<skipped>
--
-- Table structure for table `Table1`
--

DROP TABLE IF EXISTS `Table1`;


SET @saved_cs_client = @@character_set_client;
SET character_set_client = utf8;
CREATE TABLE `Table1` (
`F1` int(11) NOT NULL auto_increment,
PRIMARY KEY (`F1`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
SET character_set_client = @saved_cs_client;

--
-- Dumping data for table `Table1`
--

LOCK TABLES `Table1` WRITE;


/*!40000 ALTER TABLE `Table1` DISABLE KEYS */;
/*!40000 ALTER TABLE `Table1` ENABLE KEYS */;
UNLOCK TABLES;

--
-- Table structure for table `Table2`
--

DROP TABLE IF EXISTS `Table2`;


SET @saved_cs_client = @@character_set_client;
SET character_set_client = utf8;
CREATE TABLE `Table2` (
`F1` int(11) default NULL,
KEY `F1` (`F1`),

CONSTRAINT `F1` FOREIGN KEY (`F1`) REFERENCES `table1` (`F1`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

122 | Chapter 3:ಗEffects of Server Options


SET character_set_client = @saved_cs_client;

%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

Descriptions of Variables | 123


HUURUV ZKHQ WU\LQJ WR FRQQHFW RSHQ D WDEOH RU H[HFXWH D TXHU\ WKDW UHTXLUHV
FUHDWLQJWHPSRUDU\WDEOHV
%HFDXVHWKHVHWWLQJIRUWKLVRSWLRQUHIOHFWVKDUGZDUHOLPLWDWLRQVZHZLOOGLVFXVVLW
IXUWKHULQWKHQH[WFKDSWHU
log_warnings
:KHQ WXUQHG RQ QRQ]HUR  WKLV RSWLRQ ZULWHV ZDUQLQJV LQWR WKH VHUYHU¦V HUURU
ORJILOH 7KHVH DUH QRW ZDUQLQJV WKDW KDSSHQ GXULQJ 64/ H[HFXWLRQ EXW UDWKHU
GHEXJJLQJPHVVDJHVWKDWVKRZZKDWLVJRLQJRQLQVLGHWKHVHUYHU
,IVHWWRWKLVRSWLRQWHOOVWKHVHUYHUWRORJFRQQHFWLRQHUURUV7KLVLVYHU\LPSRUWDQW
ZKHQ\RXDUHWURXEOHVKRRWLQJVLWXDWLRQVZKHUHFOLHQWVFDQQRWFRQQHFWRUDUHORVLQJ
WKHLUFRQQHFWLRQV7KHORJFDQQRWDOZD\VLGHQWLI\WKHSUREOHPEXWLWVZDUQLQJ
PHVVDJHFDQRIWHQVKHGVRPHOLJKWRQZKDWLVJRLQJRQ,WLVYHU\LPSRUWDQWWRKDYH
WKLVRSWLRQHQDEOHGRQWKHPDVWHUVHUYHUZKHQXVLQJUHSOLFDWLRQEHFDXVH\RXFDQ
LGHQWLI\ZKHQDVODYH,2WKUHDGORVHVLWVFRQQHFWLRQ7KLVLQWXUQFDQEHDV\PSWRP
RIDQHWZRUNIDLOXUHZKLFKFDQOHDGWRZRUVHSUREOHPVLQWKHIXWXUH
:KHQVHWWR WKHGHIDXOW RQDVODYHLWSULQWVLWVRZQGLDJQRVWLFPHVVDJHVVXFK
DVLWVSRVLWLRQVLQWKHELQDU\DQGUHOD\ORJVDQGLWVUHSOLFDWLRQVWDWXV6WDUWLQJZLWK
YHUVLRQ\RXQHHGWRHQDEOHWKLVRSWLRQHQDEOHGLQRUGHUIRUWKHVODYHWRSULQW
LQIRUPDWLRQ DERXW VWDWHPHQWV WKDW DUH QRW VDIH LQ VWDWHPHQWEDVHG UHSOLFDWLRQ
%HIRUHWKHVODYHSULQWHGVXFKPHVVDJHVLQDQ\FDVH 6WDUWLQJZLWK
\RXFDQWXUQRIIWKLVRSWLRQ VHWLWWR]HUR WRJHWULGRIWKHORJLI\RXDUHVXUH\RX
GRQ¦WQHHGWKHPHVVDJHV

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

124 | Chapter 3:ಗEffects of Server Options


‡ :KHQ\RXXVH6WDWHPHQW%DVHG5HSOLFDWLRQ 6%5 DQGILQGWKDWVRPHTXHULHV
ZHUHHLWKHUQRWUHSOLFDWHGRUUHSOLFDWHGE\PLVWDNHFKHFNZKHWKHU\RXKDYH
VHWWKHVHRSWLRQVDQGLVVXHGUSEdbname
,W¦VDOZD\VEHWWHUWRXVHWKH replicate-wild-*YDULDQWVRIWKHVHRSWLRQVEHFDXVH
WKHVHGRQRWGHSHQGRQFDOOLQJUSE
%LQDU\ORJIRUPDWV
7KH binlog_format YDULDEOH DOORZV \RX WR FKRRVH WKH IRUPDW IRU UHSOLFDWLRQ
STATEMENTROWRUMIXED
7KLVLVDG\QDPLFYDULDEOHWKDWFDQEHFKDQJHGDWWKHVHVVLRQOHYHO,I\RXGRQ¦W
ZDQWWRXVHWKHPRGHFXUUHQWO\VHWDVWKHGHIDXOWIRUDSDUWLFXODUTXHU\\RXFDQ
WHPSRUDULO\ VZLWFK IRUPDWV XVLQJ SET binlog_format='row' RU SET binlog_for
mat='statement'
binlog_direct_non_transactional_updates
7KLVRSWLRQVSHFLILHVZKHQXSGDWHVWRQRQWUDQVDFWLRQDOWDEOHVVKRXOGEHZULWWHQ
LQWRWKHELQDU\ORJ
%\GHIDXOWZKHQWUDQVDFWLRQVDUHXVHG0\64/ZULWHVXSGDWHVWRQRQWUDQVDFWLRQDO
WDEOHVLQWRWKHWUDQVDFWLRQFDFKHDQGIOXVKHVWKLVFDFKHWRWKHELQDU\ORJRQO\DIWHU
DFRPPLW7KLVLVGRQHVRWKDWWKHVODYHLVPRUHOLNHO\WRHQGXSZLWKWKHVDPHGDWD
DV WKH PDVWHU HYHQ LI XSGDWHV RQ QRQWUDQVDFWLRQDO WDEOHV GHSHQG RQ GDWD LQ
WUDQVDFWLRQDOWDEOHVDQGWKHPDVWHULVXSGDWLQJWKHVDPHWDEOHVLQPDQ\FRQFXUUHQW
WKUHDGVVLPXOWDQHRXVO\
%XWWKLVVROXWLRQFDXVHVSUREOHPVZKHQDQRWKHUWUDQVDFWLRQFDXVHVFKDQJHVEDVHG
RQ GDWD WKDW ZDV PRGLILHG E\ DQ XQFRPPLWWHG SDUDOOHO WUDQVDFWLRQ LQ D
QRQWUDQVDFWLRQDOWDEOH:HGLVFXVVHGDVLPLODULVVXHLQWKHH[DPSOHLQ£0L[LQJ
7UDQVDFWLRQDODQG1RQWUDQVDFWLRQDO7DEOHV¤RQSDJH,I\RXH[SHULHQFHVXFKD
SUREOHP\RXFDQWXUQWKLVRSWLRQRQ%HIRUHGRLQJWKLVEHVXUHWKDWGDWDLQQRQ
WUDQVDFWLRQDOWDEOHVFDQQRWEHPRGLILHGE\DQ\VWDWHPHQWWKDWXVHVDWUDQVDFWLRQDO
WDEOH
7KLVLVDG\QDPLFYDULDEOHWKDWFDQEHFKDQJHGDWWKHVHVVLRQOHYHOVR\RXFDQXVH
LWIRUSDUWLFXODUVWDWHPHQWV,WZRUNVDQGPDNHVVHQVHRQO\LIVWDWHPHQWEDVHG
UHSOLFDWLRQLVXVHG
log_bin_trust_function_creators
7KLVRSWLRQWHOOVP\VTOGQRWWRILUHDZDUQLQJZKHQDXVHUZLWKRXWSUPERSULYLOHJHV
WULHVWRFUHDWHDQRQGHWHUPLQLVWLFIXQFWLRQRQWKHPDVWHU6HHWKHH[DPSOHRIGHIDXOW
EHKDYLRULQ£6HUYLFH2SWLRQV¤RQSDJH
binlog_cache_sizeDQGIULHQGV
7KLVLWHPFRYHUVWKHIROORZLQJRSWLRQV
‡ binlog_cache_size
‡ binlog_stmt_cache_size
‡ max_binlog_cache_size

Descriptions of Variables | 125


‡ max_binlog_stmt_cache_size
7KHVHDUHFDFKHVWKDWKROGWUDQVDFWLRQDODQGQRQWUDQVDFWLRQDOVWDWHPHQWVLVVXHG
GXULQJDWUDQVDFWLRQEHIRUHZULWLQJWRWKHELQDU\ORJ,I max_binlog_cache_sizeLV
UHDFKHG WKH VWDWHPHQW DERUWV ZLWK WKH HUURU "Multi-statement transaction
required more than 'max_binlog_cache_size' bytes of storage"
&KHFNWKHBinlog_cache_useBinlog_stmt_cache_useBinlog_cache_disk_useDQG
Binlog_stmt_cache_disk_useVWDWXVYDULDEOHVWRILQGRXWKRZRIWHQWKHELQORJFDFKH
ZDVXVHGDQGKRZRIWHQWKHVL]HRIWKHWUDQVDFWLRQH[FHHGHGBinlog_cache_useDQG
Binlog_stmt_cache_use:KHQWKHVL]HRIWKHWUDQVDFWLRQH[FHHGVWKHFDFKHVL]HD
WHPSRUDU\WDEOHLVFUHDWHGWRVWRUHWKHWUDQVDFWLRQFDFKH
slave_skip_errors
7KLVRSWLRQDOORZVWKHVODYH64/WKUHDGWRUXQHYHQZKHQLWHQFRXQWHUVFHUWDLQ
W\SHVRIHUURUV)RUH[DPSOHLIWKHPDVWHULVUXQZLWKDIRUJLYLQJ64/PRGHZKLOH
WKHVODYHKDVDVWULFWRQH\RXFDQVHWslave_skip_errorsWRVD\1366 (ERROR 1366
(HY000): Incorrect integer value)VRWKHVODYHGRHVQRWIDLOGXHWRDGDWDIRUPDW
LQFRQVLVWHQF\ZKHQRQHLQVHUWVDVWULQJLQWRDQLQWHJHUILHOG
8VLQJWKLVRSWLRQFDQOHDGWRGDWDLQFRQVLVWHQFLHVEHWZHHQPDVWHUDQGVODYHWKDW
DUHKDUGWRGLDJQRVHVRLI\RXPHHWVXFKDQLVVXHFKHFNZKHWKHUWKHRSWLRQZDV
QRWVHW
read_only
7KLVRSWLRQPDNHVWKHVODYHVHUYHUUHDGRQO\7KLVPHDQVWKDWRQO\WKHVODYH64/
WKUHDG FDQ XSGDWH LWV GDWD DQG RWKHU FRQQHFWLRQV FDQ RQO\ UHDG GDWD 7KLV LV
YDOXDEOHWRSUHVHUYHGDWDFRQVLVWHQF\RQWKHVODYH+RZHYHUWKHRSWLRQGRHVQRW
UHVWULFWDXVHUZLWKWKHSUPERSULYLOHJHIURPFKDQJLQJWDEOHV$GGLWLRQDOO\DOOXVHUV
DUHVWLOODOORZHGWRFUHDWHWHPSRUDU\WDEOHV

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

126 | Chapter 3:ಗEffects of Server Options


2QHWKLQJ\RXVKRXOGNHHSLQPLQGWKRXJKLI\RXUDSSOLFDWLRQVHWVDXWRLQFUHPHQW
YDOXHVLQDIDVKLRQWKDWVXUSULVHV\RXFKHFNWKLVPRGHDQGH[SHULPHQWZLWKKRZ
GLIIHUHQW YDOXHV DIIHFW DXWRLQFUHPHQWLQJ , DFWXDOO\ GRQ¦W UHFRPPHQG VZLWFKLQJ
IURPWKHVDIHconsecutivePRGHWRDQ\RWKHUPRGHEXWLQDIHZHQYLURQPHQWVWKLV
FDQEHDFFHSWDEOH
innodb_file_per_table
%\GHIDXOW,QQR'%VDYHVWDEOHDQGLQGH[GDWDLQDVKDUHGWDEOHVSDFH8VLQJWKLV
RSWLRQ\RXFDQWHOOLWWRVDYHWKHLQGH[DQGGDWDIRUHDFKWDEOHLQVHSDUDWHILOHV
7KHVKDUHGWDEOHVSDFHLVVWLOOXVHGIRUWDEOHGHILQLWLRQV7KLVRSWLRQWDNHVHIIHFW
RQO\RQWDEOHVFUHDWHGDIWHULWLVVHWWDEOHVFUHDWHGHDUOLHUFRQWLQXHWRXVHWKHVKDUHG
WDEOHVSDFH
8VLQJ WKLV YDULDEOH LV DFWXDOO\ D JRRG SUDFWLFH EHFDXVH LW KHOSV ,QQR'% WDEOHV
RSHUDWHPRUHHIIHFWLYHO\%HVLGHVOHWWLQJ\RXZDWFKWKHDFWXDOVSDFHRFFXSLHGE\D
WDEOHLWDOVROHWV\RXFUHDWHSDUWLDOEDFNXSVXVLQJ0\64/(QWHUSULVH%DFNXSRU
HYHQUHVWRUHDWDEOHRQDGLIIHUHQW0\64/LQVWDOODWLRQXVLQJWKHPHWKRGGHVFULEHG
LQ&KULV&DOHQGHU¦VEORJDWKWWSZZZFKULVFDOHQGHUFRP"S 
innodb_table_locks
7KLV YDULDEOH GHILQHV KRZ ,QQR'% KDQGOHV WDEOH ORFN UHTXHVWV PDGH E\ LOCK
TABLESVWDWHPHQWV%\GHIDXOW ZKHQLWLVVHW LWUHWXUQVLPPHGLDWHO\DQGORFNVWKH
WDEOHLQWHUQDOO\:KHQWXUQHGRII VHWWR LWKRQRUVLOCK TABLEVWDWHPHQWVVRWKH
WKUHDGGRHVQRWUHWXUQIURPLOCK TABLES … WRITEXQWLODOOORFNVDUHUHOHDVHG
innodb_lock_wait_timeout
7KLVLVWKHQXPEHURIVHFRQGVWKDW,QQR'%ZDLWVIRUDURZORFNEHIRUHJLYLQJXS
$IWHUinnodb_lock_wait_timeoutVHFRQGVLWUHWXUQVWKHHUURU"ERROR 1205 (HY000):
Lock wait timeout exceeded; try restarting transaction" WR WKH FOLHQW ,
IUHTXHQWO\VHHVLWXDWLRQVZKHUHSHRSOHVHWWKLVYDULDEOHWRYHU\ODUJHYDOXHVWRSUH
YHQWWKHLUTXHULHVIURPIDLOLQJDVRIWHQRQO\WRH[SHULHQFHZRUVHSUREOHPVEHFDXVH
PDQ\VWDOOHGWUDQVDFWLRQVORFNHDFKRWKHU7U\WRKDQGOHORFNZDLWHUURUVDWWKH
DSSOLFDWLRQOHYHODQGGRQ¦WVHWWKLVYDOXHWRRKLJK7KHEHVWYDOXHIRUWKLVRSWLRQ
GHSHQGVRQ\RXUDSSOLFDWLRQDQGVKRXOGEHDERXWWKHDPRXQWRIWLPH\RXUQRUPDO
WUDQVDFWLRQWDNHV7KHGHIDXOWYDOXHRIWKLVYDULDEOHVHFRQGVFDQEHWRRELJIRU
DSSOLFDWLRQVWKDWQHHGWRUHWXUQUHVXOWVDOPRVWLPPHGLDWHO\7KLVLVWUXHIRUWKH
PDMRULW\RIZHEVKRSV
innodb_rollback_on_timeout
:KHQDTXHU\LVDERUWHGGXHWRDORFNZDLWHUURURQO\WKHODVWVWDWHPHQWVUROOHG
EDFNDQGWKHZKROHWUDQVDFWLRQLVQRWDERUWHG\HW<RXFDQFKDQJHWKLVEHKDYLRU
LI\RXVHWWKLVRSWLRQWR,QWKLVFDVHWKHWUDQVDFWLRQZLOOEHUROOHGEDFNLPPHGL
DWHO\DIWHUDORFNZDLWWLPHRXW
innodb_use_native_aio
7KLVRSWLRQLQWURGXFHGLQ,QQR'%3OXJLQVSHFLILHVZKHWKHU,QQR'%VKRXOG
XVH WKH QDWLYH $,2 LQWHUIDFH RQ /LQX[ RU XVH LWV RZQ LPSOHPHQWDWLRQ FDOOHG
£VLPXODWHG$,2¤,Iinnodb_use_native_aioLVVHW,QQR'%GLVSDWFKHV,2UHTXHVWV

Descriptions of Variables | 127


WRWKHNHUQHO7KLVLPSURYHVVFDODELOLW\EHFDXVHPRGHUQNHUQHOVFDQKDQGOHPRUH
SDUDOOHO,2UHTXHVWVWKDQVLPXODWHG$,2
7KLVRSWLRQLVRQE\GHIDXOWDQGVKRXOGQRWEHFKDQJHGGXULQJQRUPDORSHUDWLRQ
,W FDQ EH WXUQHG RII LI \RX H[SHULHQFH LVVXHV RQ RSHUDWLQJ V\VWHPV ZLWK
DV\QFKURQRXV,2VXEV\VWHPVWKDWSUHYHQW,QQR'%IURPVWDUWLQJ$W\SLFDOHUURU
PHVVDJH LQIRUPLQJ \RX WR WXUQ WKLV RSWLRQ RII LV error while loading shared
libraries: libaio.so.1: cannot open shared object file: No such file or
directory.
innodb_locks_unsafe_for_binlog
7KLVYDULDEOHGHILQHVKRZ,QQR'%XVHVJDSORFNLQJIRUVHDUFKHVDQGLQGH[VFDQV
:LWKWKHGHIDXOWYDOXH VHWWR JDSORFNLQJLVHQDEOHG,IVHWWRWKHRSWLRQ
GLVDEOHVJDSORFNLQJIRUPRVWRSHUDWLRQV,WZRUNVVLPLODUWRWKH READ COMMITTED
WUDQVDFWLRQLVRODWLRQOHYHOEXWLVOHVVWXQDEOHDQGVKRXOGEHDYRLGHG(YHQLILW
DOORZV\RXWRKDQGOHSUREOHPVZLWKORFNLQJLWFUHDWHVQHZSUREOHPVZKHQSDUDOOHO
WUDQVDFWLRQVLQVHUWQHZURZVLQWRWKHJDSV6R READ COMMITTEDLVUHFRPPHQGHG
LQVWHDGLI\RXZDQWWRJHWWKDWEHKDYLRU7KLVYDULDEOHFDQQRWEHVHWDWVHVVLRQOHYHO
VRLWDIIHFWVDOOWUDQVDFWLRQV
MyISAM options. :HZLOOGLVFXVVRQO\WZRRSWLRQVKHUHDQGUHWXUQWRWKHUHVWLQWKHQH[W
VHFWLRQ
myisam_data_pointer_size
6HWVWKHGHIDXOWSRLQWHUVL]HXVHGZKHQFUHDWLQJ0\,6$0WDEOHVZLWKRXWVSHFLI\LQJ
WKHMAX_ROWSSDUDPHWHU7KHGHIDXOWYDOXHLVDQGWKHDOORZHGUDQJHLVWR7KH
ODUJHUWKHSRLQWHUWKHPRUHURZVDWDEOHFDQKDYH7KHGHIDXOWYDOXHDOORZV\RX
WRFUHDWHWDEOHVWKDWWDNHXS7%,I\RXJHWD"Table is full"HUURUZKHQXVLQJ
0\,6$0WDEOHVWKLVPHDQVWKHSRLQWHUVL]HLVWRRVPDOOIRU\RXUWDEOHGDWD VHHWKH
VLGHEDU£+RZ%LJ&DQWKH7DEOH%H"¤ 

How Big Can the Table Be?


<RXFDQXVHP\LVDPFKNGYLWRFKHFNH[DFWO\KRZELJWKHWDEOHFDQEHFRPHZLWK
DSDUWLFXODUSRLQWHUVL]HDQGKRZPDQ\URZVLWFDQVWRUHLIWKH FIXEDURZIRUPDW
LVXVHG
mysql> CREATE TABLE t1(f1 INT, f2 VARCHAR(255)) ENGINE=MyISAM;
Query OK, 0 rows affected (0.16 sec)

mysql> SET GLOBAL myisam_data_pointer_size=2;


Query OK, 0 rows affected (0.00 sec)

mysql> \q
Bye

C:\Program Files\MySQL\MySQL Server 5.5>.\bin\mysql -uroot test


Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.5.13-enterprise-commercial-advanced
MySQL Enterprise Server - Advanced Edition (Commercial)

128 | Chapter 3:ಗEffects of Server Options


Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its


affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> CREATE TABLE t2(f1 INT, f2 VARCHAR(255)) ENGINE=MyISAM;


Query OK, 0 rows affected (0.13 sec)

mysql> \q
Bye

C:\Program Files\MySQL\MySQL Server 5.5>.\bin\myisamchk.exe -dvi


"C:\ProgramData\MySQL\MySQL Server 5.5\Data\test\t1"

MyISAM file: C:\ProgramData\MySQL\MySQL Server 5.5\Data\test\t1


Record format: Packed
Character set: utf8_general_ci (33)
File-version: 1
Creation time: 2011-11-02 14:43:40
Status: checked,analyzed,optimized keys,sorted index pages
Data records: 0 Deleted blocks: 0
Datafile parts: 0 Deleted data: 0
Datafile pointer (bytes): 6 Keyfile pointer (bytes): 3
Datafile length: 0 Keyfile length: 1024
Max datafile length: 281474976710654 Max keyfile length: 17179868159
Recordlength: 774

table description:
Key Start Len Index Type Rec/key Root Blocksize

C:\Program Files\MySQL\MySQL Server 5.5>.\bin\myisamchk.exe -dvi


"C:\ProgramData\MySQL\MySQL Server 5.5\Data\test\t2"

MyISAM file: C:\ProgramData\MySQL\MySQL Server 5.5\Data\test\t2


Record format: Packed
Character set: utf8_general_ci (33)
File-version: 1
Creation time: 2011-11-02 14:44:35
Status: checked,analyzed,optimized keys,sorted index pages
Data records: 0 Deleted blocks: 0
Datafile parts: 0 Deleted data: 0
Datafile pointer (bytes): 2 Keyfile pointer (bytes): 3
Datafile length: 0 Keyfile length: 1024
Max datafile length: 65534 Max keyfile length: 17179868159

Recordlength: 774

table description:
Key Start Len Index Type Rec/key Root Blocksize

myisam_recover_options
7KLVRSWLRQWHOOVWKH0\64/VHUYHUWRFKHFNHDFKWLPHLWRSHQVD0\,6$0WDEOH
ZKHWKHUWKHWDEOHLVFRUUXSWHGRUZDVQRWFORVHGSURSHUO\,IWKHFKHFNIDLOV0\64/

Descriptions of Variables | 129


UXQV CHECK TABLERQLWDQGLIQHHGHGUHSDLUVLW3RVVLEOHYDOXHVDUH OFF DEFAULT
QRWWKHGHIDXOWIRUWKLVRSWLRQEXWGHQRWLQJDUHFRYHU\PHWKRGZLWKRXWEDFNXS
IRUFLQJDTXLFNFKHFN  BACKUP FUHDWHVDEDFNXSRIWKHWDEOHGDWD¦V0<'ILOH 
FORCE LQVWUXFWVWKHVHUYHUWRUXQDUHFRYHU\DFWLRQHYHQLIWKHUHLVDULVNRIORVLQJ
RQH RU PRUH URZV IURP WKH 0<' ILOH  DQG QUICK WHOOV WKH VHUYHU QRW WR UXQ D
UHFRYHU\DFWLRQLIWKHUHDUHQRGHOHWHGEORFNVLQWKHWDEOH <RXFDQXVHWZRRUPRUH
RSWLRQV DW WKH VDPH WLPH 7KH PRVW SRSXODU YDOXH IRU WKLV YDULDEOH LI VHW LV
BACKUP,FORCEEHFDXVHLWIL[HVDOOHUURUVDQGLVVDIHEHFDXVHLWFUHDWHVDEDFNXSILOH
%\GHIDXOWWKLVRSWLRQLVWXUQHGRII

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

130 | Chapter 3:ಗEffects of Server Options


net_read_timeout
+RZPXFKWLPHWRZDLWIRUDQDQVZHUIURPDFOLHQWZULWLQJWRWKH0\64/VHUYHU
)RUH[DPSOHWKLVWLPHRXWDSSOLHVLIWKHFOLHQWLVH[HFXWLQJDODUJHLQVHUW
net_write_timeout
+RZPXFKWLPHWRZDLWIRUDQDQVZHUIURPDFOLHQWWKDWLVUHDGLQJIURPWKHVHUYHU
)RU H[DPSOH ZKHQ D FOLHQW VHQGV D SELECT TXHU\ DQG LV UHDGLQJ LWV UHVXOW WKLV
WLPHRXWNLOOVWKHFRQQHFWLRQLIWKHFOLHQWIDLOVWRUHDGGDWDWKDWLVZDLWLQJIRUWKLV
DPRXQWRIWLPH,IDFOLHQWQHHGVWRGRVRPHMREEHIRUHSURFHVVLQJUHVXOWVFKHFN
ZKHWKHUWKDWMREODVWVORQJHUWKDQWKLVWLPHRXW
7KHV\PSWRPRIKLWWLQJPRVWRIWKHVHOLPLWVLVD "MySQL server has gone away"HUURU
RU D "Lost connection to MySQL server during query" HUURU 7KH H[FHSWLRQ LV
connect_timeout,I\RXKLWWKLVOLPLW\RXZLOOJHWWKHHUURU"Lost connection to MySQL
server at 'reading authorization packet'"<RXFRXOGJHWDVLPLODUHUURUZKHQWKH
VODYH,2WKUHDGFDQQRWFRQQHFWWRWKHPDVWHU
,I\RXKLWRQHRIWKHOLPLWVGHVFULEHGHDUOLHUGRQ¦WMXVWLQFUHDVHWKHPEOLQGO\VHDUFK
IRUWKHDFWXDOUHDVRQIRUWKHSUREOHP,IDWLPHRXWLVFDXVHGE\DIODN\QHWZRUN\RX
VKRXOGIL[WKHQHWZRUNUDWKHUWKDQLQFUHDVLQJWKHWLPHRXW+HUHLVDFRXUVHRIDFWLRQ
WKDW FDQ EH XVHG ZKHQ \RX VXVSHFW D WLPHRXW SUREOHP 7HPSRUDULO\ LQFUHDVH WKH
*timeoutYDULDEOHDQGUHUXQWKHDSSOLFDWLRQ,IWKHWLPHRXWKDSSHQVOHVVIUHTXHQWO\
XQGHUWKHVHFRQGLWLRQV\RXFDQFRQILUPWKDWDWLPHRXWLVWKHSUREOHPEXWVHDUFKIRU
WKHUHDOFDXVHRIWKHHUURU7KLVFDQEHDORQJUXQQLQJDSSOLFDWLRQVORZDFFHVVWRDKXJH
WDEOHRUDIODN\QHWZRUN
Security-related options. 7KHVHRSWLRQVFRQWUROSHUPLVVLRQVDQGRWKHUDVSHFWVRI0\64/
VHUYHUVHFXULW\
skip-grant-tables
$QRWKHULVVXHZLWKFOLHQWDXWKRUL]DWLRQNLFNVLQZKHQWKHFOLHQWODFNVWKHSURSHU
XVHUSHUPLVVLRQVZKHQFRQQHFWLQJWRWKHVHUYHU:HGLVFXVVHGWKLVSUREOHPDELW
LQ£3HUPLVVLRQ,VVXHV¤RQSDJH+HUH,MXVWZDQWWRPHQWLRQKRZWRVDYH\RXUVHOI
LI\RXIRUJHWDSDVVZRUG<RXQHHGWRVWDUWWKHVHUYHUZLWKWKHskip-grant-tables
RSWLRQHGLWWKHSULYLOHJHWDEOHVLQWKHmysqlGDWDEDVHPDQXDOO\DQGWKHQUXQWKH
TXHU\ FLUSH PRIVILEGES$IWHUWKDWQHZSULYLOHJHVDUHLQHIIHFW'RQ¦WIRUJHWWR
UHVWDUWWKHVHUYHUZLWKRXWWKHskip-grant-tablesRSWLRQ2WKHUZLVHDQ\ERG\FDQ
FRQQHFWWR\RXUVHUYHUDIWHUWKHUHVWDUW7RGRWKHRSHUDWLRQVDIHO\LQFOXGHWKH
RSWLRQ skip_networking DORQJ ZLWK skip-grant-tables VR WKDW RQO\ ORFDO
FRQQHFWLRQVDUHDOORZHGGXULQJWKHWLPHZKHQWKHUHDUHQRUHVWULFWLRQVRQDFFHVV
WRWKH0\64/VHUYHU
safe-user-create
'RHVQRWDOORZWKHFUHDWLRQRIXVHUVXVLQJWKH GRANTVWDWHPHQWXQOHVVWKHXVHU
DGGLQJWKHJUDQWKDVWKHINSERTSULYLOHJHLQWRWKHmysql.userWDEOH

Descriptions of Variables | 131


secure_auth
'RHV QRW DOORZ FOLHQWV HDUOLHU WKDQ YHUVLRQ  WR FRQQHFW WR PRGHUQ VHUYHUV
9HUVLRQZDVFKRVHQEHFDXVHDQHZVHFXULW\PRGHOZDVDGGHGWRWKHFRQQHFWLRQ
SURWRFRODWWKDWWLPH
secure_file_priv
5HVWULFWV WKH LOAD_FILE IXQFWLRQ DQG WKH LOAD DATA DQG SELECT … INTO OUTFILE
VWDWHPHQWVWRXVLQJRQO\WKHVSHFLILHGGLUHFWRU\

Performance-Related Options
+HUH,¦OORIIHUDVKRUWRYHUYLHZRIRSWLRQVWKDWDIIHFWSHUIRUPDQFH$JDLQ,DPQRW
GHVFULELQJDOORIWKHPEXWMXVWWKRVHWKDWDUHXVHGPRVWIUHTXHQWO\,QFRQWUDVWZLWK
RSWLRQVIURPWKHSUHYLRXVVHFWLRQWKHVHRSWLRQVGRQ¦WOHDGWRGLIIHUHQWUHVXOWV
)LUVW,ZLOOGLVFXVVRSWLRQVWKDWDIIHFWVHUYHUEHKDYLRUDVDZKROHWKHQVRPHHQJLQH
VSHFLILFRSWLRQV

Buffers and maximums


7KHILUVWJURXSRIRSWLRQVFRQWUROVWKHDPRXQWRIPHPRU\XVHGLQWHUQDOO\E\WKHVHUYHU
DQGFHUWDLQXSSHUOLPLWVRQPHPRU\XVDJH
join_buffer_size
7KLVLVWKHPLQLPXPVL]HRIWKHEXIIHUDOORFDWHGIRUMRLQVWKDWXVHSODLQLQGH[VFDQV
DQGUDQJHVFDQVDQGMRLQVWKDWGRQRWXVHLQGH[HV7KHEXIIHULVDOORFDWHGIRUHDFK
IXOOMRLQEHWZHHQWZRWDEOHV7KXVDTXHU\MRLQLQJWZRWDEOHVDOORFDWHVRQHEXIIHU
DTXHU\MRLQLQJWKUHHWDEOHVDOORFDWHVWZREXIIHUVDQGVRRQ7KLVFDQEHXVHGDVD
VHVVLRQYDULDEOHDQGFDQEHVHWIRUDSDUWLFXODUMRLQ
7RILQGRXWZKHWKHU\RXQHHGWRLQFUHDVH join_buffer_size\RXFDQFKHFNWKH
Select_scanVWDWXVYDULDEOHZKLFKFRQWDLQVWKHQXPEHURIMRLQVWKDWGRDIXOOVFDQ
RIWKHILUVWWDEOHDVZHOODVSelect_full_range_joinZKLFKFRQWDLQVWKHQXPEHURI
MRLQVWKDWXVHDUDQJHVHDUFK7KHYDOXHVRIWKHVHVWDWXVYDULDEOHVZLOOQRWFKDQJH
LI\RXFKDQJHWKHYDOXHRIjoin_buffer_sizeVR\RXFDQXVHWKHPRQO\WRILQGRXW
LI\RXQHHGDODUJHjoin_buffer_sizeQRWWRPHDVXUHWKHHIIHFWLYHQHVVRIDFKDQJH
WRWKDWYDOXH
net_buffer_length
7KHVL]HRIDEXIIHUWKDWWKHVHUYHUFUHDWHVULJKWDIWHUDFOLHQWFRQQHFWVWRKROGWKH
UHTXHVWDQGWKHUHVXOW7KLVVL]HLVLQFUHDVHGWRmax_allowed_packetZKHQQHHGHG
<RXXVXDOO\GRQ¦WQHHGWRFKDQJHWKHGHIDXOWYDOXH E\WHV EXW\RXVKRXOG
NHHSWKHYDOXHLQPLQGZKHQVHWWLQJWKHmax_connectionsRSWLRQ

 2QHH[FHSWLRQLVWKHRSWLPL]HUSDUDPHWHUVLQEXPLAINVWDWHPHQWV

132 | Chapter 3:ಗEffects of Server Options


query_prealloc_size
7KLVEXIIHULVDOORFDWHGIRUVWDWHPHQWSDUVLQJDQGH[HFXWLRQ7KHEXIIHULVQRWIUHHG
EHWZHHQ VWDWHPHQWV ,W PDNHV VHQVH WR LQFUHDVH WKLV EXIIHU LI \RX UXQ FRPSOH[
TXHULHV VR WKDW P\VTOG GRHV QRW KDYH WR VSHQG WLPH DOORFDWLQJ PHPRU\ GXULQJ
TXHU\H[HFXWLRQ,QFUHDVHLWWRWKHVL]HLQE\WHVRI\RXUODUJHVWTXHU\
read_buffer_size
(DFKWKUHDGWKDWGRHVDVHTXHQWLDOVFDQDOORFDWHVWKLVEXIIHUIRUHDFKWDEOHVFDQ
read_rnd_buffer_size
7KLVFRQWUROVWKHVL]HRIWKHEXIIHUWKDWKROGVUHDGUHVXOWVEHWZHHQVRUWLQJWKHP
DQG VHQGLQJ WKHP WR WKH FOLHQW $ ODUJH YDOXH FDQ LPSURYH WKH SHUIRUPDQFH RI
TXHULHVWKDWLQFOXGHORDER BY
sort_buffer_size
(DFKWKUHDGWKDWQHHGVWRGRDVRUWDOORFDWHVWKLVEXIIHUIRULW7RILQGRXWZKHWKHU
\RXQHHGWRLQFUHDVHWKHVL]HRIWKLVEXIIHUFKHFNWKH Sort_merge_passesVWDWXV
YDULDEOH<RXFDQDOVRFKHFNWKHYDOXHVRISort_rangeSort_rowsDQGSort_scanWR
ILQGRXWKRZPDQ\VRUWLQJRSHUDWLRQV\RXGR
7KHVHVWDWXVYDULDEOHVVKRZRQO\WKHQXPEHURIVRUWRSHUDWLRQV7RILQGRXWZKLFK
VL]HWRXVHIRUWKHEXIIHU\RXQHHGWRFKHFNKRZPDQ\URZVRQHRUDQRWKHUTXHU\
FDQVRUWDQGPXOWLSO\LWE\WKHURZVL]H2UVLPSO\WU\WKHGLIIHUHQWYDOXHVXQWLO
Sort_merge_passesVWRSVJURZLQJ

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¤

$ VWDWXV RI £6HQGLQJ GDWD¤ LQ SHOW PROCESSLISTRXWSXWPHDQVD


WKUHDGLVUHDGLQJDQGSURFHVVLQJURZVWKHQVHQGLQJGDWDWRWKH
FOLHQW$V\RXVHHWKLVLVPRUHFRPSOLFDWHGWKDQWKHZRUGVLPSO\
DQGGRHVQRWQHFHVVDULO\PHDQDTXHU\LVVWXFNVHQGLQJGDWD

Descriptions of Variables | 133


thread_cache_size
7KH QXPEHU RI WKUHDGV WKDW VKRXOG EH FDFKHG IRU IXWXUH XVH :KHQ D FOLHQW
GLVFRQQHFWVXVXDOO\LWVWKUHDGVDUHGHVWUR\HG,IWKLVRSWLRQLVVHWWRDSRVLWLYHYDOXH
WKDWQXPEHURIWKUHDGVZLOOEHSXWLQDFDFKHXSRQGLVFRQQHFW7KLVRSWLRQGRHV
QRWGUDPDWLFDOO\LPSURYHSHUIRUPDQFHRQV\VWHPVZLWKDJRRGWKUHDGLPSOHPHQ
WDWLRQEXWVWLOOFDQEHXVHIXOLIDQDSSOLFDWLRQXVHVKXQGUHGVRIFRQQHFWLRQV
thread_stack
7KHVWDFNVL]HIRUHDFKWKUHDG,IVHWWRRVPDOOWKLVYDOXHOLPLWVWKHFRPSOH[LW\RI
64/ VWDWHPHQWV WKH UHFXUVLRQ GHSWK RI VWRUHG SURFHGXUHV DQG RWKHU
PHPRU\FRQVXPLQJDFWLRQVRQWKHVHUYHU7KHGHIDXOWYDOXH .%RQELWV\V
WHPVDQG.%RQELWV\VWHPV ZRUNVILQHIRUPRVWLQVWDOODWLRQV,QFUHDVHWKLV
YDULDEOHLI\RXVWDUWJHWWLQJHUURUPHVVDJHVOLNH"Thread stack overrun"
tmp_table_size
7KHPD[LPXPVL]HRIWKHLQWHUQDOWHPSRUDU\WDEOHLQPHPRU\%\GHIDXOWWKHVHUYHU
VHWVWKLVWRWKHPLQLPXPRImax_heap_table_sizeDQGtmp_table_size,QFUHDVHWKLV
YDULDEOH LI \RX KDYH HQRXJK PHPRU\ DQG WKH VWDWXV YDULDEOH Cre
ated_tmp_disk_tablesLVLQFUHDVLQJ+DYLQJDOOUHVXOWVWKDWUHTXLUHDWHPSRUDU\WD
EOHLQPHPRU\FDQLPSURYHSHUIRUPDQFHDORW
query_cache_size
7KHVL]HRIWKHEXIIHUZKHUHWKH0\64/VHUYHUVWRUHVTXHULHVDQGWKHLUUHVXOWV
,QFUHDVLQJWKHYDOXHFDQLQFUHDVHSHUIRUPDQFHEHFDXVHDIWHUWKHTXHU\LVLQVHUWHG
LQWRWKHFDFKHVXEVHTXHQWH[HFXWLRQVRIWKHVDPHTXHU\ZLOOWDNHUHVXOWVIURPWKH
FDFKHHOLPLQDWLQJWKHZRUNRITXHU\SDUVLQJRSWLPL]DWLRQDQGH[HFXWLRQ%XW
GRQ¦WVHWWKLVYDULDEOHWRRODUJHEHFDXVHZKHQWKHTXHU\QHHGVWREHUHPRYHGIURP
WKHFDFKH¢LHZKHQ\RXKDYHPRGLILHGGDWDLQWKHWDEOH¢WKHPXWH[FRQWHQWLRQ
FDQEORFNSDUDOOHOTXHULHV7KLVLVHVSHFLDOO\WUXHRQPXOWLFRUHPDFKLQHVDQGKLJKO\
FRQFXUUHQW HQYLURQPHQWV ZKHQ PRUH WKDQ HLJKW XVHU VHVVLRQV DFFHVV WKH TXHU\
FDFKH FRQFXUUHQWO\ 5HDVRQDEOH YDOXHV IRU WKLV YDULDEOH DUH OHVV WKDQ  0%
DOWKRXJK\RXFDQVHWLWPXFKODUJHULI\RXDUHQ¦WIULJKWHQHGE\DSRVVLEOHVXGGHQ
VORZGRZQ

%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

134 | Chapter 3:ಗEffects of Server Options


table_definition_cache
7KHQXPEHURIWDEOHGHILQLWLRQVWKDWDUHVWRUHGLQWKHFDFKH:KHQ\RXKDYHDORW
RI WDEOHV \RX FDQ LQFUHDVH WKLV YDOXH 7XQH LW LI QHFHVVDU\ WR NHHS
Opened_table_definitionsVPDOOHUWKDQRUHTXDOWROpen_table_definitionsVLQFH
WKHPRVWUHFHQWWDEOHIOXVK FLUSH TABLESTXHU\ 
table_open_cache
7KHQXPEHURIWDEOHGHVFULSWRUVWKDWDUHVWRUHGLQWKHFDFKH7U\WRWXQHWKLVRSWLRQ
VRWKDWOpened_tablesUHPDLQVVPDOOHUWKDQRUHTXDOWROpen_tables

Options that control the optimizer


7KHVHYDULDEOHVFDQEHVHWDWWKHVHVVLRQOHYHOVR\RXFDQH[SHULPHQWZLWKKRZWKH\
DIIHFWSDUWLFXODUTXHULHV
optimizer_prune_level
,I WKLV YDULDEOH LV RQ WKH RSWLPL]HU SUXQHV OHVV HIIHFWLYH SODQV GLVFRYHUHG E\
LQWHUPHGLDWHVHDUFKHV,IWKHYDULDEOHLVRIIWKHRSWLPL]HUXVHVDQH[KDXVWLYHVHDUFK
7KHGHIDXOWYDOXHLV RQ &KDQJHWKHRSWLRQLI\RXVXVSHFWWKHRSWLPL]HULVQRW
FKRRVLQJWKHEHVWSODQIRU\RXUTXHU\
optimizer_search_depth
7KHPD[LPXPGHSWKRIWKHVHDUFKSHUIRUPHGE\WKHRSWLPL]HU7KHODUJHUWKLV
YDOXHWKHPRUHOLNHO\LWLVWKDWWKHRSWLPL]HUFDQILQGWKHEHVWSODQIRUDFRPSOH[
TXHU\ 7KH SULFH IRU UDLVLQJ WKH YDOXH LV WKH WLPH VSHQW E\ WKH RSWLPL]HU ZKLOH
VHDUFKLQJIRUDSODQ,IVHWWRWKHVHUYHUDXWRPDWLFDOO\SLFNVDUHDVRQDEOHYDOXH
7KHGHIDXOWLV WKHPD[LPXPYDOXH 
optimizer_switch
7KLVYDULDEOHFRQWUROVYDULRXVRSWLPL]HUIHDWXUHV,ZLOOWRXFKRQWKHPRQO\VOLJKWO\
KHUH,QWHOOLJHQWXVHRIWKLVYDULDEOHUHTXLUHVNQRZOHGJHRIKRZWKHRSWLPL]HUZRUNV
DQGDORWRIH[SHULPHQWDWLRQ
index_merge
(QDEOHV RU GLVDEOHV LQGH[ PHUJH RSWLPL]DWLRQ 7KLV RSWLPL]DWLRQ UHWULHYHV
URZVIURPVHYHUDOPHUJHVFDQVDQGPHUJHVWKHLUUHVXOWVLQWRRQH7KLVLVVKRZQ
DV£0HUJH¤LQWKHTypeFROXPQRIEXPLAINRXWSXW
index_merge_intersection
(QDEOHV RU GLVDEOHV WKH LQGH[ PHUJH LQWHUVHFWLRQ DFFHVV DOJRULWKP 7KLV
DOJRULWKPLVXVHGZKHQDWHEREFODXVHFRQWDLQVVHYHUDOUDQJHFRQGLWLRQVWKDW
XVHDNH\DQGDUHFRPELQHGZLWKWKHANDNH\ZRUG$QH[DPSOHLV
key_col1 < 10 AND key_col2 = 'foo'

(YHQ WKRXJK WKH key_col2 = 'foo' FRPSDULVRQ LQYROYHV D VLQJOH YDOXH WKH
RSWLPL]HUWUHDWVLWDVDUDQJHFRQGLWLRQDVH[SODLQHGLQWKH0\64/5HIHUHQFH
0DQXDOLQWKHVHFWLRQ£7KH5DQJH$FFHVV0HWKRGIRU6LQJOH3DUW,QGH[HV¤
KWWSGHYP\VTOFRPGRFUHIPDQHQUDQJHDFFHVVVLQJOHSDUWKWPO 

Descriptions of Variables | 135


index_merge_union
(QDEOHVRUGLVDEOHVWKHLQGH[PHUJHXQLRQDFFHVVDOJRULWKP7KLVDOJRULWKPLV
XVHGZKHQDWHEREFODXVHFRQWDLQVVHYHUDOUDQJHFRQGLWLRQVWKDWXVHDNH\DQG
DUHFRPELQHGZLWKWKHORNH\ZRUG$QH[DPSOHLV
key_col1 = 'foo' OR (key_col2 = 'bar' AND key_col3 = 'baz')

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

136 | Chapter 3:ಗEffects of Server Options


Engine-related options
7KH YDULDEOHV LQ WKLV VHFWLRQ DIIHFW WKH SHUIRUPDQFH RI D VSHFLILF VWRUDJH HQJLQH $V
HOVHZKHUHLQWKLVERRNZHFRQVLGHURQO\,QQR'%DQG0\,6$0RSWLRQV
InnoDB options. :HZLOOVWDUWZLWKRSWLRQVRI,QQR'%VWRUDJHHQJLQHDVEHIRUH
innodb_adaptive_hash_index
'LVDEOHVRUHQDEOHV GHIDXOW ,QQR'%DGDSWLYHKDVKLQGH[HV,QPRVWFDVHVLWLV
JRRGWRKDYHWKLVRSWLRQRQEXWWKHUHDUHDIHZNQRZQH[FHSWLRQVZKHQDQDGDSWLYH
KDVKLQGH[FDQGHFUHDVHSHUIRUPDQFHIRUH[DPSOHZKHQWKHQXPEHURIVLPLODU
TXHU\UHVXOWVLVKXJHDQGWKLVLQGH[WDNHVRUPRUHRIWKHEXIIHUSRRO7KLV
LQIRUPDWLRQLVVKRZQLQWKH,QQR'%PRQLWRURXWSXW,ZLOOQRWGHVFULEHDOORIWKHP
KHUHEHFDXVHFRQVLGHUDWLRQVPD\FKDQJHDV,QQR'%HYROYHVEXW,UHFRPPHQG\RX
VHDUFKWKH:HEIRUDFWXDOWHVWFDVHVLI\RXVXIIHUIURPEDGSHUIRUPDQFH
innodb_additional_mem_pool_size
7KLVSRROKROGVLQIRUPDWLRQDERXWWKHGDWDGLFWLRQDU\DQGLQWHUQDOGDWDVWUXFWXUHV
,QJHQHUDOWKHPRUHWDEOHV\RXKDYHWKHODUJHUWKLVRSWLRQVKRXOGEH%XWEHFDXVH
,QQR'%ZULWHVPHVVDJHVLQWRWKHHUURUORJZKHQWKLVSRROLVWRRVPDOO\RXVKRXOG
ZDLWWRVHHWKHVHPHVVDJHVEHIRUHWZHDNLQJWKHYDOXH
innodb_buffer_pool_size
7KHVL]HRIWKHPHPRU\WKDW,QQR'%DOORFDWHVWRVWRUHGDWDLQGH[HVWDEOHVWUXF
WXUHV DGDSWLYH KDVK LQGH[HV DQG VR RQ 7KLV LV WKH PRVW LPSRUWDQW RSWLRQ IRU
,QQR'%SHUIRUPDQFH<RXFDQVHWLWWRXSWRRI\RXUSK\VLFDO5$0,GHDOO\
WKHEXIIHUZRXOGEHODUJHHQRXJKWRFRQWDLQDOO\RXUDFWLYHO\XVHG,QQR'%WDEOHV
DORQJ ZLWK H[WUD VSDFH 7DNH RWKHU EXIIHUV LQWR DFFRXQW WRR DQG ILQG D JRRG
EDODQFH
6WDWXVYDULDEOHVPDWFKLQJWKHSDWWHUQInnodb_buffer_pool_%VKRZWKHFXUUHQWVWDWH
RIWKH,QQR'%EXIIHUSRRO
innodb_buffer_pool_instances
7KLVRSWLRQVHWVWKHQXPEHURILQVWDQFHVWKDWWKHEXIIHUSRROVKRXOGEHVSOLWLQWR
(DFKLQVWDQFHKDVLWVRZQIUHHOLVWVIOXVKOLVWVOLVWVRIREMHFWVVWRUHGXVLQJOHDVW
UHFHQWO\XVHGDOJRULWKPVDQGRWKHUGDWDVWUXFWXUHVDQGLVSURWHFWHGE\LWVRZQ
PXWH[6HWWLQJWKLVYDULDEOHJUHDWHUWKDQFDQLPSURYHFRQFXUUHQF\RQODUJHV\V
WHPV 7KH VL]H RI HDFK LQVWDQFH LV innodb_buffer_pool_size GLYLGHG E\
innodb_buffer_pool_instancesDQGVKRXOGEHDWOHDVW*%7KLVRSWLRQGRHVQRW
WDNHHIIHFWLIinnodb_buffer_pool_sizeLVOHVVWKDQ*%
innodb_buffer_pool_instancesVSOLWVWKHEXIIHUSRROPXWH[VRLI\RXKDYHHLJKWRU
PRUHFRQFXUUHQWVHVVLRQVWKDWDFFHVVWKH,QQR'%EXIIHUSRROFRQFXUUHQWO\VHWLW
DW OHDVW WR  WKHQ XS WR  7KH QXPEHU GHSHQGV RQ WKH YDOXH RI
innodb_buffer_pool_sizeDQGWKH5$0DYDLODEOHRQ\RXUER[
innodb_checksums
%\GHIDXOW,QQR'%XVHVFKHFNVXPYDOLGDWLRQRQDOOSDJHVUHDGIURPGLVN7KLVOHWV
LWLPPHGLDWHO\LGHQWLI\ZKHWKHUDGDWDILOHZDVFRUUXSWHGGXHWRDEURNHQGLVNRU

Descriptions of Variables | 137


VRPHRWKHULQWHUYHQWLRQ8VXDOO\\RXVKRXOGNHHSWKLVIHDWXUHRQEXWLQUDUHFDVHV
ZKHQ\RXGRQ¦WFDUHDERXWGDWD IRULQVWDQFHDUHDGRQO\VODYHWKDWLVQRWXVHGDV
DEDFNXS \RXFDQJHWDSHUIRUPDQFHLPSURYHPHQWE\WXUQLQJLWRII
innodb_commit_concurrency
7KHQXPEHURIWKUHDGVWKDWFDQFRPPLWDWWKHVDPHWLPH7KHGHIDXOWYDOXHLV
XQOLPLWHG 
innodb_thread_concurrency
7KHQXPEHURIWKUHDGVWKDWFDQUXQFRQFXUUHQWO\LQVLGHRI,QQR'%'RQ¦WPL[WKLV
YDOXHXSZLWKWKHQXPEHURIFRQQHFWLRQWKUHDGVWKH0\64/VHUYHUFUHDWHV7KH
GHIDXOWYDOXHLVLQILQLWHFRQFXUUHQF\RUQRFRQFXUUHQF\FKHFNLQJ
$OWKRXJKPRUHWKUHDGVUXQQLQJLQSDUDOOHOJHQHUDOO\PHDQVKLJKHUSHUIRUPDQFH
\RXFDQH[SHULHQFHPXWH[FRQWHQWLRQVLI\RXUXQPDQ\FRQFXUUHQWXVHUVHVVLRQV
LQSDUDOOHO8VXDOO\\RXVKRXOGQRWZRUU\DERXWWKLVYDULDEOHLI\RXGRQ¦WKDYHPRUH
WKDQFRQFXUUHQWXVHUVHVVLRQV,I\RXKDYHPRUH\RXQHHGWRPRQLWRUIRUPXWH[
ORFNV E\ TXHU\LQJ WKH 3HUIRUPDQFH 6FKHPD RU UXQQLQJ D SHOW ENGINE INNODB
MUTEXTXHU\
,IPXWH[FRQWHQWLRQVDSSHDUWU\WROLPLWWKLVYDULDEOHWRRU$OWHUQDWLYHO\
SODFHWKHP\VTOGSURFHVVLQWRDWDVNVHWRQ/LQX[RUDSURFHVVRUVHWRQ6RODULVDQG
OLPLWLWWRIHZHUFRUHVWKDQWKHZKROHER[KDV7KLVLVWKHEHVWFRXUVHRIDFWLRQRQ
DV\VWHPZLWKPRUHWKDQHLJKWFRUHV$OWHUQDWLYHO\\RXFDQXVHWKH7KUHDG3RRO
3OXJLQ VHHVLGHEDU 

The Thread Pool Plugin


6LQFHYHUVLRQFRPPHUFLDOGLVWULEXWLRQVRI0\64/LQFOXGHWKH7KUHDG3RRO
3OXJLQ
%\GHIDXOWWKH0\64/VHUYHUFUHDWHVDQHZWKUHDGIRUHDFKXVHUFRQQHFWLRQ,ID
ORW RI XVHU FRQQHFWLRQV DUH FUHDWHG PDQ\ WKUHDGV DUH UXQQLQJ LQ SDUDOOHO DQG
FRQWH[WVZLWFKLQJRYHUKHDGEHFRPHVKLJK7KLVFDQOHDGWRUHVRXUFHFRQWHQWLRQ
)RUH[DPSOHIRU,QQR'%WKLVLQFUHDVHVWKHWLPHQHHGHGIRUKROGLQJPXWH[HV
7KH7KUHDG3RRO3OXJLQSURYLGHVDQDOWHUQDWLYHZD\WRKDQGOHWKUHDGV,WSODFHV
DOOFRQQHFWLRQWKUHDGVLQJURXSVWKHQXPEHURIZKLFKLVOLPLWHGE\WKHYDULDEOH
thread_pool_sizeDQGPDNHVVXUHRQO\RQHWKUHDGSHUJURXSLVH[HFXWHGDWDQ\
WLPH7KLVPRGHOUHGXFHVRYHUKHDGDQGJUHDWO\LPSURYHVSHUIRUPDQFH
<RXZLOOILQGPRUHGHWDLOVDERXWWKH7KUHDG3RRO3OXJLQLQWKH0\64/5HIHUHQFH
0DQXDO

innodb_concurrency_tickets
:KHQDWKUHDGLVSHUPLWWHGWRHQWHU,QQR'%LWUHFHLYHVWKLVQXPEHURIFRQFXUUHQF\
WLFNHWVZKLFKSHUPLWLWWROHDYHDQGUHHQWHU,QQR'%XQWLOLWXVHVXSWKHVHWLFNHWV

 7KLVLVQRWDKDUGOLPLWDQGVRPHWLPHVPRUHWKDQRQHWKUHDGSHUJURXSLVH[HFXWLQJ

138 | Chapter 3:ಗEffects of Server Options


7KHGHIDXOWLV$IWHUXVLQJXSLWVWLFNHWVDWKUHDGLVSODFHGLQWRDTXHXHRI
WKUHDGVZDLWLQJWRUHFHLYHDQHZJURXSRIWLFNHWV
innodb_doublewrite
%\GHIDXOW,QQR'%VWRUHVGDWDWZLFHILUVWWRWKHGRXEOHZULWHEXIIHUDQGWKHQWR
GDWDILOHV /LNH innodb_checksums WKLV VDIHW\ RSWLRQ FDQ EH WXUQHG RII WR JHW
LQFUHDVHGSHUIRUPDQFHRQLQVWDOODWLRQVZKHUHGDWDVDIHW\LVQRWWKHILUVWSULRULW\

:KHQVHWWKHYDULDEOHinnodb_doublewriteSUHYHQWV,QQR'%GDWD
FRUUXSWLRQ 7KHUHIRUH GR QRW VZLWFK LW RII XQWLO DEVROXWHO\
QHFHVVDU\

7KH Innodb_dblwr_writesDQG Innodb_dblwr_pages_writtenVWDWXVYDULDEOHVVKRZ


WKH QXPEHU RI GRXEOHZULWH RSHUDWLRQV DQG WKH QXPEHU RI SDJHV ZULWWHQ
UHVSHFWLYHO\
innodb_flush_log_at_trx_commit
'HILQHVZKHQFKDQJHVDUHZULWWHQWRWKHORJILOHDQGIOXVKHGWRGLVN,IVHWWR WKH
GHIDXOW FKDQJHVDUHZULWWHQDQGIOXVKHGDWHDFKWUDQVDFWLRQFRPPLW)RUEHWWHU
SHUIRUPDQFH\RXFDQFKDQJHWKLVYDOXHWR ZULWHWRORJDQGIOXVKRQFHSHUVHFRQG
DQGGRQRWKLQJRQWUDQVDFWLRQFRPPLW RU ZULWHWRILOHDWHDFKFRPPLWEXWIOXVK
RQFHSHUVHFRQG 1RWHWKDWRQO\RSWLRQLV$&,'FRPSOLDQW
7KHInnodb_os_log_fsyncsVWDWXVYDULDEOHVWRUHVWKHQXPEHURIfsync()RSHUDWLRQV
GRQHWRWKHORJILOHInnodb_os_log_pending_fsyncsFRQWDLQVWKHQXPEHURISHQGLQJ
fsync()ZULWHVInnodb_log_writesDQGInnodb_os_log_pending_writesFRQWDLQWKH
QXPEHURIZULWHVDQGSHQGLQJZULWHVUHVSHFWLYHO\
innodb_flush_method
%\GHIDXOWfdatasync()LVXVHGWRIOXVKGDWDILOHVDQGfsync()LVXVHGWRIOXVKORJILOHV
WRGLVN7KLVYDOXHFDQEHFKDQJHGWRRQHRIWKHIROORZLQJ
O_DSYNC
7KHRSHUDWLQJV\VWHPXVHVO_SYNCWRRSHQDQGIOXVKWKHORJILOHVDQGfsync()
WRIOXVKWKHGDWDILOHV
O_DIRECT
7KHRSHUDWLQJV\VWHPXVHVO_DIRECTWRRSHQWKHGDWDILOHVDQGfsync()WRIOXVK
WKHP
&KDQJLQJ WKH YDOXH RI innodb_flush_method FDQ HLWKHU LPSURYH RU VORZ GRZQ
SHUIRUPDQFHVRWHVWLWFDUHIXOO\LQ\RXUHQYLURQPHQW
innodb_io_capacity
$QXSSHUOLPLWWRWKH,2DFWLYLW\SHUIRUPHGE\WKHEDFNJURXQG,QQR'%WDVN7KH
GHIDXOWYDOXHRILVDJRRGFKRLFHIRUPRVWPRGHUQV\VWHPVEXWLWFDQEHWXQHG
EDVHGRQWKHQXPEHURI,2RSHUDWLRQVWKHV\VWHPFDQSHUIRUPVLPXOWDQHRXVO\
,QFUHDVLQJWKLVYDOXHPDNHVVHQVHRQIDVWVWRUDJH

Descriptions of Variables | 139


innodb_log_buffer_size
7KHVL]HRIWKHEXIIHUWKDW,QQR'%XVHVWRZULWHWRWKHORJILOHVRQGLVN:KHQWKH
EXIIHU LV IXOO RSHUDWLRQV VKRXOG ZDLW IRU LW WR EH IOXVKHG EHIRUH FRQWLQXLQJ
,QFUHDVLQJWKLVYDULDEOHFDQVDYHGLVN,2RSHUDWLRQVEXWWKLVPDNHVVHQVHRQO\LI
\RXKDYHELJWUDQVDFWLRQV
7KHInnodb_log_waitsVWDWXVYDULDEOHFRQWDLQVWKHQXPEHURIWLPHVWKLVEXIIHUZDV
WRRVPDOOIRUWKHQXPEHURIQHFHVVDU\,2RSHUDWLRQV
innodb_log_file_size
7KH VL]H RI HDFK ORJILOH /DUJH ORJILOHV UHGXFH FKHFNSRLQW DFWLYLW\ DQG VDYH GLVN
,2+RZHYHUODUJHORJILOHVFDQGUDVWLFDOO\VORZUHFRYHU\DIWHUDFUDVK6HQVLEOH
YDOXHV UDQJH IURP  0% XS WR EXW OHVV WKDQ innodb_buffer_pool_size
log_files_in_group7KHFRPELQHGVL]HRIDOOORJILOHVPXVWEHOHVVWKDQ*%
%HVWSUDFWLFHLVWRVWRUH,QQR'%ORJILOHVGDWDILOHVDQGLIXVHGELQDU\ORJILOHVRQ
GLIIHUHQWGLVNVVRLIRQHRIWKHVHGHYLFHVGLH\RXZLOOQRWORVHDOORIWKHPDWRQFH
innodb_open_files
7KLV YDULDEOH LV PHDQLQJIXO RQO\ ZKHQ \RX XVH innodb_file_per_table
innodb_open_filesLVWKHQXPEHURILEGILOHVWKDW,QQR'%FDQRSHQDWWKHVDPH
WLPH7KHGHIDXOWYDOXHLV,WPDNHVVHQVHWRLQFUHDVHLWWRWKHWRWDOQXPEHURI
,QQR'%WDEOHV
innodb_read_io_threads
7KHQXPEHURI,2WKUHDGVDYDLODEOHIRU,QQR'%UHDGRSHUDWLRQV7KHVHRSHUDWLRQV
KDQGOHUHDGDKHDG,2UHTXHVWVWKDWDV\QFKURQRXVO\SUHIHWFKDJURXSRISDJHV
LQWRWKH,QQR'%EXIIHUSRROWKHQSXUJHDQGLQVHUWEXIIHURSHUDWLRQV7KHGHIDXOW
YDOXHLV
innodb_write_io_threads
7KH QXPEHU RI ,2 WKUHDGV DYDLODEOH IRU ,QQR'% WR ZULWH GLUW\ SDJHV IURP WKH
EXIIHU7KHGHIDXOWLV
innodb_stats_method
+RZWKHVHUYHUWUHDWV18//VZKHQFROOHFWLQJVWDWLVWLFVRQLQGH[YDOXHV7KLVDIIHFWV
WKHFDUGLQDOLW\RIWKHLQGH[DQGWKHUHIRUHWKHTXHU\SODQVFUHDWHGE\WKHRSWLPL]HU
innodb_stats_on_metadata
:KHQ WKLV YDULDEOH LV HQDEOHG GHIDXOW  ,QQR'% XSGDWHV LWV VWDWLVWLFV DW HDFK
PHWDGDWDVWDWHPHQWVXFKDVSHOW TABLE STATUSRUSHOW INDEXRUZKHQDQ\FRQ
QHFWLRQ LVVXHV D TXHU\ RQ WKH INFORMATION_SCHEMA WDEOHV TABLES RU STATISTICS
ZKLFKVHOHFWLQIRUPDWLRQDERXWDQ,QQR'%WDEOH,IWKLVYDULDEOHLVHQDEOHGWKHVH
TXHULHVKDYHWKHVDPHHIIHFWRQWDEOHVWDWLVWLFVDVLI\RXKDGUXQANALYZE TABLEDIWHU
HDFK TXHU\ <RX FDQ GLVDEOH WKLV YDULDEOH LI WKH VHUYHU FDOOV VXFK VWDWHPHQWV

 7KLVLVQRWWUXHDQ\PRUHEHFDXVHWKH,QQR'%3OXJLQLQWURGXFHGLPSURYHPHQWVWKDWVSHHG
XSFUDVKUHFRYHU\

140 | Chapter 3:ಗEffects of Server Options


IUHTXHQWO\RUVHOHFWVGDWDEDVHVZLWKDODUJHQXPEHURIWDEOHV%XWZKHQWKHYDULDEOH
LVGLVDEOHGWDEOHVWDWLVWLFVFDQEHFRPHRXWRIGDWH
innodb_stats_sample_pages
7KHQXPEHURIVDPSOHGLQGH[SDJHVXVHGE\WKH0\64/2SWLPL]HUWRFDOFXODWH
LQGH[GLVWULEXWLRQVWDWLVWLFVVXFKDVZKHQ ANALYZE TABLELVFDOOHG,QFUHDVHWKLV
YDULDEOH WKH GHIDXOW LV   LI \RX VXVSHFW WKDW WKH FDUGLQDOLW\ LV EHLQJ FDOFXODWHG
LPSURSHUO\%XWQRWHWKDWLQFUHDVLQJWKLVYDULDEOHFDQLQFUHDVHWKHWLPHQHHGHGWR
RSHQDWDEOHLIinnodb_stats_on_metadataLVHQDEOHG
MyISAM options. ,QWKLVVHFWLRQZHZLOOGLVFXVVRSWLRQVZKLFKFDQDIIHFWSHUIRUPDQFHRI
0\,6$0VWRUDJHHQJLQH
myisam_max_sort_file_size
7KH PD[LPXP WHPSRUDU\ ILOH VL]H WKDW 0\,6$0 FDQ XVH ZKHQ LW UHFUHDWHV D
0\,6$0LQGH[7KHGHIDXOWYDOXHLV*%,IWKLVYDOXHLVH[FHHGHG0\64/ZLOO
XVHDNH\FDFKHZKLFKFDQVORZGRZQLQGH[FUHDWLRQ7KHWHPSRUDU\ILOHLVDGLVN
ILOHVRLW¦VOLPLWHGRQO\E\GLVNVSDFH
myisam_use_mmap
:KHQ WKLV YDULDEOH LV VHW WKH VHUYHU XVHV PHPRU\ PDSSLQJ ZKHQ UHDGLQJ DQG
ZULWLQJ0\,6$0WDEOHV7KHGHIDXOWEHKDYLRULVXVLQJV\VWHPFDOOVIRUWKHVHRSHU
DWLRQV$OWKRXJK myisam_use_mmapXVXDOO\LPSURYHVSHUIRUPDQFHDORWWKHUHDUH
FRXSOHRINQRZQEXJVVRWHVW\RXUDSSOLFDWLRQDIWHUVHWWLQJWKLVYDULDEOH
myisam_mmap_size
7KH PD[LPXP DPRXQW RI PHPRU\ WKDW FDQ EH XVHG IRU PHPRU\ PDSSLQJ RI
FRPSUHVVHG0\,6$0ILOHV7KHGHIDXOWVDUHODUJHRQELWV\VWHPV
DQGRQELWV\VWHPV<RXFDQGHFUHDVHWKLVYDOXHWR
DYRLGVZDSSLQJLI\RXXVHPDQ\FRPSUHVVHG0\,6$0WDEOHV
myisam_sort_buffer_size
7KHVL]HRIWKHEXIIHUDOORFDWHGZKHQVRUWLQJRUFUHDWLQJ0\,6$0LQGH[HVGXULQJ
REPAIR TABLECREATE INDEXRUALTER TABLERSHUDWLRQV
myisam_stats_method
+RZWKHVHUYHUWUHDWV18//VZKHQFROOHFWLQJVWDWLVWLFVRQLQGH[YDOXHV7KLVDIIHFWV
WKHFDUGLQDOLW\RIWKHLQGH[DQGWKHUHIRUHWKHTXHU\SODQVFUHDWHGE\WKHRSWLPL]HU
bulk_insert_buffer_size
7KHVL]HRIDVSHFLDOWUHHOLNHFDFKHWKDW0\,6$0XVHVIRUEXONLQVHUWV INSERT …
SELECTINSERT … VALUES (…), (…)šDQGLOAD DATA INFILEVWDWHPHQWV
key_buffer_size
,QGH[EORFNVIRU0\,6$0WDEOHVDUHEXIIHUHGDQGVKDUHGEHWZHHQWKUHDGV7KLV
YDULDEOHFRQWUROVWKHVL]HRIWKDWEXIIHU<RXFDQFUHDWHPXOWLSOHNH\EXIIHUV6HDUFK
IRUWKLVYDULDEOHGHVFULSWLRQDQGUHDGDERXWWKHNH\FDFKHLQWKH0\64/5HIHUHQFH
0DQXDO

Descriptions of Variables | 141


preload_buffer_size
7KHVL]HRIWKHEXIIHUWKDWLVDOORFDWHGWRSUHORDGLQGH[HV

Calculating Safe Values for Options


:KHQ\RXWU\WRRSWLPL]HVHUYHUSHUIRUPDQFHE\LQFUHDVLQJEXIIHUVRUPD[LPXPVLWLV
FUXFLDOWRWKLQNJOREDOO\DERXWPHPRU\XVH/DUJHEXIIHUVFDQFUDVKWKH0\64/VHUYHU
ZLWK DQ £2XW RI PHPRU\¤ HUURU ,Q WKLV VHFWLRQ , RIIHU IRUPXODV WKDW ZLOO KHOS \RX
FDOFXODWHZKHWKHU\RXDUHH[FHHGLQJDYDLODEOHPHPRU\,ZLOOQRWGHVFULEHWKHRSWLRQV
WKHPVHOYHVLQWKLVSDUW<RXFDQUHIHUWRSUHYLRXVVHFWLRQVRUWRWKH0\64/5HIHUHQFH
0DQXDO IRU PRUH GHWDLOHG GHVFULSWLRQV &DOFXODWLRQV GHSHQG RQ ZKHQ DQ RSWLRQ LV
DOORFDWHG DQG ZKHWKHU LW LV VKDUHG VR , GLYLGH WKHP LQWR UHOHYDQW FDWHJRULHV LQ WKLV
VHFWLRQ

Options set for the whole server


7KHVHRSWLRQVDUHJOREDODIIHFWLQJDOOFRQQHFWLRQVDQGTXHULHV6RPHDUHDOORFDWHGDW
VHUYHUVWDUWXSZKHUHDVRWKHUVWDNHHIIHFWODWHUVXFKDVWKHTXHU\FDFKHZKLFKLVLQLWLDOO\
]HURDQGJURZVXQWLOLWUHDFKHVLWVPD[LPXPYDOXH,WFDQWDNHDELWRIWLPHXQWLOWKH
0\64/ VHUYHU UHDFKHV DOO WKH OLPLWV DQG IXOO\ DOORFDWHV DOO WKH PHPRU\ \RX DOORZ
7KHUHIRUH\RXVKRXOGFDOFXODWHWKHDPRXQWRI5$0P\VTOGFDQDFTXLUHDQGDGGXS
DOOWKHEXIIHUVL]HVWRPDNHVXUH\RXGRQ¦WH[FHHGLW
7KHIROORZLQJLVWKHOLVWRIPHPRU\EXIIHUVDOORFDWHGIRUWKHZKROHVHUYHU
‡ query_cache_size
‡ innodb_additional_mem_pool_size
‡ innodb_buffer_pool_size
‡ innodb_log_buffer_size
‡ key_buffer_size
8VH WKH IROORZLQJ IRUPXOD WR FDOFXODWH KRZ PXFK 5$0 LQ PHJDE\WHV \RX QHHG WR
DOORFDWHWKHVHEXIIHUV
SELECT (@@query_cache_size + @@innodb_additional_mem_pool_size +
@@innodb_buffer_pool_size + @@innodb_log_buffer_size + @@key_buffer_size)/(1024*1024);

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

142 | Chapter 3:ಗEffects of Server Options


‡ innodb_open_files

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)

Buffers allocated for a specific operation


7KHVH EXIIHUV DUH DOORFDWHG DV QHHGHG ZKHQ WKH VHUYHU KDV WR FDUU\ RXW D SDUWLFXODU
RSHUDWLRQ,WLVKDUGWRFDOFXODWHWKHH[DFWDPRXQWRI5$0WKH\FDQDOORFDWH$QDO\]H
\RXUTXHULHVWRILQGRXWZKLFKUHTXLUHDORWRIUHVRXUFHVDQGFDOFXODWHVRPHWKLQJOLNH
WKHIROORZLQJ
(buffer size) * (number of buffers allocated for particular kind of query)
* (number of such queries that can be executed in parallel)

'RWKLVIRUDOOYDULDEOHVDQGFDOFXODWHWKHVXPRIWKHUHVXOWV
,WLVJRRGSUDFWLFHWRNHHSWKHVHRSWLRQVVPDOOVRORQJDVWKH\DUHDGHTXDWHIRUPRVW
TXHULHV7KHQLIDSDUWLFXODUTXHU\QHHGVPRUHPHPRU\MXVWLQFUHDVHWKHYDULDEOH¦V
YDOXHIRUWKDWVHVVLRQ)RUH[DPSOHLI\RXQHHGWRVHW max_join_sizeUHDOO\KLJKIRUD
VWDWLVWLFVTXHU\WKDW\RXUXQRQFHSHUZHHNWKHUHLVQRVHQVHWRVHWLWJOREDOO\VHWLWMXVW
EHIRUHUXQQLQJWKHTXHU\(YHQZLWKWKLVSUHFDXWLRQGRQ¦WIRUJHWDERXWPHPRU\XVDJH
DVDZKROH

Descriptions of Variables | 143


6RPHRIWKHVHRSWLRQVDUHDOORFDWHGRQFHSHUWKUHDG7KHVHDUH
‡ read_rnd_buffer_size
‡ sort_buffer_size
‡ myisam_mmap_size
‡ myisam_sort_buffer_size
‡ bulk_insert_buffer_size
‡ preload_buffer_size
2WKHUVFDQEHDOORFDWHGPRUHWKDQRQFHSHUWKUHDG7KHVHDUH
‡ join_buffer_size
‡ read_buffer_size
‡ tmp_table_size
<RXFDQXVHWKHIROORZLQJIRUPXODWRFDOFXODWHWKHPD[LPXPDPRXQWRIPHPRU\LQ
PHJDE\WHVWKDWWKH0\64/VHUYHUFDQDOORFDWHIRUVXFKRSWLRQV
set @join_tables = YOUR_ESTIMATE_PER_THREAD;
set @scan_tables = YOUR_ESTIMATE_PER_THREAD;
set @tmp_tables = YOUR_ESTIMATE_PER_THREAD;

SELECT @@max_connections * (@@global.read_rnd_buffer_size +


@@global.sort_buffer_size + @@myisam_mmap_size +
@@global.myisam_sort_buffer_size + @@global.bulk_insert_buffer_size +
@@global.preload_buffer_size + @@global.join_buffer_size * IFNULL(@join_tables,
1) + @@global.read_buffer_size * IFNULL(@scan_tables, 1) +
@@global.tmp_table_size * IFNULL(@tmp_tables, 1)) / (1024 * 1024)

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;

SELECT (@@query_cache_size + @@innodb_additional_mem_pool_size +


@@innodb_buffer_pool_size + @@innodb_log_buffer_size + @@key_buffer_size +
@@max_connections * (@@global.net_buffer_length + @@thread_stack +
@@global.query_prealloc_size + @@global.read_rnd_buffer_size +
@@global.sort_buffer_size + @@myisam_mmap_size +
@@global.myisam_sort_buffer_size + @@global.bulk_insert_buffer_size +
@@global.preload_buffer_size + @@binlog_cache_size +
@@binlog_stmt_cache_size + @@global.join_buffer_size * IFNULL(@join_tables,
1) + @@global.read_buffer_size * IFNULL(@scan_tables, 1) +
@@global.tmp_table_size * IFNULL(@tmp_tables, 1))) / (1024 * 1024)

2UIRUYHUVLRQVROGHUWKDQ
set @join_tables = YOUR_ESTIMATE_PER_THREAD;
set @scan_tables = YOUR_ESTIMATE_PER_THREAD;

144 | Chapter 3:ಗEffects of Server Options


set @tmp_tables = YOUR_ESTIMATE_PER_THREAD;

SELECT (@@query_cache_size + @@innodb_additional_mem_pool_size +


@@innodb_buffer_pool_size + @@innodb_log_buffer_size + @@key_buffer_size +
@@max_connections * (@@global.net_buffer_length + @@thread_stack +
@@global.query_prealloc_size + @@global.read_rnd_buffer_size +
@@global.sort_buffer_size + @@myisam_mmap_size +
@@global.myisam_sort_buffer_size + @@global.bulk_insert_buffer_size +
@@global.preload_buffer_size + @@binlog_cache_size +
@@global.join_buffer_size * IFNULL(@join_tables,1) + @@global.read_buffer_size *
IFNULL(@scan_tables, 1) + @@global.tmp_table_size * IFNULL(@tmp_tables, 1))) /
(1024 * 1024)

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

Descriptions of Variables | 145


CHAPTER 4
MySQL’s Environment

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

Physical Hardware Limits


$FRPPRQXVDJHPLVWDNHLVWRKDYHXQUHDOLVWLFH[SHFWDWLRQVIRUSHUIRUPDQFH2QHFDQ
H[SHFWWKDWWKH0\64/VHUYHUQHHGVWREHWXQHGZKLOHIRUJHWWLQJWKHODWHQF\RIKDUGZDUH
FRPSRQHQWV7KHUHIRUHLWLVLPSRUWDQWWRXQGHUVWDQGZKDWFDQFDXVHWKHODWHQF\
7KHIROORZLQJKDUGZDUHUHVRXUFHVDIIHFWWKH0\64/VHUYHU
‡ 5$0
‡ &38
‡ 1XPEHURIFRUHV
‡ 'LVN,2
‡ 1HWZRUNEDQGZLGWK
/HW¦VGLVFXVVHDFKRIWKHPLQDELWRIGHWDLO

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

148 | Chapter 4:ಗMySQL’s Environment


Processors and Their Cores
0\64/¦VSHUIRUPDQFHGRHVQRWVFDOHOLQHDUO\ZLWKLQFUHDVLQJ&38VSHHG7KLVGRHV
QRWPHDQ\RXFDQ¦WPDNHXVHRIDIDVW&38EXWGRQ¦WH[SHFWSHUIRUPDQFHZLOOVFDOH
E\LQFUHDVLQJ&38VSHHGLQWKHVDPHZD\LWFDQLQFUHDVHE\DGGLQJPRUH5$0
+RZHYHUWKHQXPEHURIFRUHVLVLPSRUWDQWZKHQ\RXVHWRSWLRQVWKDWDIIHFWLQWHUQDO
WKUHDGFRQFXUUHQF\7KHUHLVQRVHQVHLQLQFUHDVLQJWKHYDOXHVRIVXFKRSWLRQVLI\RX
GRQ¦WKDYHHQRXJKFRUHV7KLVFDQEHHDVLO\GHPRQVWUDWHGXVLQJWKHEHQFKPDUNXWLOLW\
QDPHGV\VEHQFK7DEOHVKRZVWKHUHVXOWVRIDVPDOOWHVWRQDPDFKLQHZLWKIRXU
FRUHV,XVHGWKH2/73V\VEHQFKWHVWZLWKWKUHDGV
7DEOH7LPHVSHQWH[HFXWLQJDQHYHQWZLWKGLIIHUHQWLQQRGEBWKUHDGBFRQFXUUHQF\YDOXHV
innodb_thread_concurrency Execution time
1 7.8164
2 4.3959
4 2.5889
8 2.6708
16 3.4669
32 3.4235

$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

Physical Hardware Limits | 149


QRUPDO XVH 2Q :LQGRZV \RX FDQ XVH SHUIPRQ IRU WKH VDPH SXUSRVH +HUH LV DQ
H[DPSOHRXWSXWRILRVWDW
$iostat -x 5
Linux 2.6.18-8.1.1.el5 (blade12) 11/11/2011 _x86_64_

avg-cpu: %user %nice %system %iowait %steal %idle


1.27 0.00 0.32 0.65 0.00 97.79

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

avg-cpu: %user %nice %system %iowait %steal %idle


38.69 0.00 6.43 47.84 0.00 8.64

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

avg-cpu: %user %nice %system %iowait %steal %idle


8.90 0.00 11.30 75.10 0.00 5.60

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

avg-cpu: %user %nice %system %iowait %steal %idle


23.55 0.00 23.95 46.19 0.00 7.11

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

150 | Chapter 4:ಗMySQL’s Environment


svctm %util
1.40 100.02
0.18 100.02

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

Example of the Effect of Latencies


7R ILQLVK WKLV SDUW RI WKH FKDSWHU , ZLOO VKRZ \RX VPDOO H[DPSOH RI KRZ KDUGZDUH
ODWHQFLHVDIIHFWDWULYLDO UPDATETXHU\:HZLOOXVHDQ,QQR'%WDEOHZLWK autocommit
WXUQHGRQ:HZLOODOVRWXUQRQWKHELQDU\ORJILOH
UPDATE test_rrbs SET f1 = md5(id*2) WHERE id BETWEEN 200000 AND 300000;

7KLVVLPSOHTXHU\FRXOGH[SHULHQFHODWHQFLHVZKHQ
7KHFOLHQWVHQGVDFRPPDQGWRWKHVHUYHUWKDWWDNHVDKDOIRI577
7KHWHEREFODXVHRIWKHUPDATELVH[HFXWHGDQGP\VTOGUHDGVWKHGLVN
P\VTOGGRHVDQfsyncFDOOWRSUHSDUHIRUWKHWUDQVDFWLRQEHFDXVHautocommitLVRQ
P\VTOGGRHVDQfsyncFDOOWRZULWHLQWRDELQDU\ORJILOH

Physical Hardware Limits | 151


P\VTOGGRHVDQfsyncFDOOWRFRPPLWFKDQJHV
7KHFOLHQWUHFHLYHVWKHUHVXOWIURPWKHVHUYHUZKLFKLVDQRWKHUDVSHFWRI577

Operating System Limits


2WKHUOLPLWVRQ0\64/DUHVHWE\RSHUDWLQJV\VWHPV)RUH[DPSOH,VDZDFDVHZKHQ
DVHUYHUIDLOHGEHFDXVHWKH/LQX[KRVWVSHFLILHGvm.overcommit_ratio = 507KLVRSWLRQ
VSHFLILHVWKHSHUFHQWDJHRIWKHV\VWHP¦VWRWDOYLUWXDOPHPRU\WKDWFDQEHDOORFDWHGYLD
malloc()DWWHPSWVWRDOORFDWHPRUHPHPRU\E\DSURFHVVZLOOIDLO)LIW\SHUFHQWLVWKH
GHIDXOW YDOXH IRU PDQ\ /LQX[ LQVWDOODWLRQV 6R ZKHQ mysqld DOORFDWHV DERXW  RI
H[LVWLQJ5$0DQGWKHQWULHVWRDOORFDWHPRUHLWIDLOV,QDPXOWLWDVNLQJVHWXSVXFKDQ
RSWLRQPD\EHXVHIXOEHFDXVHLWSURWHFWVRWKHUFULWLFDOSURFHVVHVIURPDJUHHG\0\64/
VHUYHUEXWLW¦VDEVROXWHO\ULGLFXORXVLQDGHGLFDWHGVHUYHU
$QRWKHU LPSRUWDQW 8QL[ RSWLRQ LV ulimit ZKLFK UHVWULFWV YDULRXV UHVRXUFHV IRU
XVHUV:KHQ\RXVHWUHVRXUFHVXVLQJWKH ulimitFRPPDQGRUDQRWKHUV\VWHPXWLOLW\
UHPHPEHUWKDWWKH0\64/VHUYHUUXQVDVDVLPSOHXVHUDQGLVVXEMHFWWRWKHVDPHOLPLWV
DVHYHU\RQHHOVH
£6HUYHUUHODWHG RSWLRQV¤ RQ SDJH  PHQWLRQHG KRZ 26 UHVWULFWLRQV DIIHFW WKH
open_files_limit YDULDEOH DQG ,¦OO VKRZ DQ H[DPSOH KHUH 6XSSRVH WKH VHUYHU¦V
ulimitRQRSHQILOHV WKH-nRSWLRQ LVVHWWRWKHGHIDXOWRQPDQ\V\VWHPV,I\RX
WU\WRVWDUWP\VTOGZLWK--open-files-limit=4096LWZRXOGQRWRYHUULGHWKHRSHUDWLQJ
V\VWHPOLPLW
$ulimit -n
1024

$./bin/mysqld --defaults-file=support-files/my-small.cnf --basedir=.


--datadir=./data --socket=/tmp/mysql_ssmirnova.sock --port=33051 --log-error
--open-files-limit=4096 &
[1] 31833

$./bin/mysql -uroot -S /tmp/mysql_ssmirnova.sock -e "SELECT


@@open_files_limit"
+--------------------+
| @@open_files_limit |
+--------------------+
| 1024 |
+--------------------+

7KLVRSWLRQLVYHU\LPSRUWDQWLI\RXKDYHPDQ\WDEOHVDQGDYDOXHWKDW¦VWRRVPDOOFDQ
OHDGWRDVORZGRZQEHFDXVHWKH0\64/VHUYHUKDVWRVSHQGWLPHRSHQLQJDQGFORVLQJ
WDEOHVRULWPD\HYHQUHMHFWFRQQHFWLRQDWWHPSWVLIWKHVHUYHUFDQ¦WRSHQQHZWDEOHVGXH
WRODFNRIUHVRXUFHV

 $OWKRXJKWKHSURSHUZD\WRVHWRSHUDWLQJV\VWHPUHVRXUFHOLPLWVLVWRXVH\RXUVSHFLILFSODWIRUPWRROVLW
LVVWLOOZRUWKPHQWLRQLQJWKHEXLOWLQVKHOOFRPPDQGulimitGXHWRLWVHDVHRIXVHDQGDYDLODELOLW\IRUHYHU\
XVHU,WFDQHLWKHUVKRZDOOFXUUHQWUHVWULFWLRQVLIUXQDVulimit -aRUVHWVRIWOLPLWVIRUWKHFXUUHQWXVHU

152 | Chapter 4:ಗMySQL’s Environment


,ZRQ¦WGHVFULEHKRZWRWXQH26OLPLWVLQGHWDLOKHUHEHFDXVHWKLVLQIRUPDWLRQLVVSHFLILF
WRHDFK26,KDYHQ¦WPHQWLRQHG:LQGRZVEXWUHVWDVVXUHGLWKDVOLPLWVWRR
:KHQ\RXVXVSHFWWKDWWKH26LVOLPLWLQJ\RXU0\64/VHUYHUILUVWFKHFNWKHUHVRXUFHV
GHVFULEHGHDUOLHU5$0&38DQGQHWZRUNEDQGZLGWK&KHFNZKHWKHUP\VTOGLVXVLQJ
OHVVWKDQWKHKDUGZDUHRIIHUV8VXDOO\SHUIRUPDQFHSUREOHPVRFFXUZKHQ5$0RU&38
DUHOLPLWHG$OVRFKHFNWKHQXPEHURIRSHQILOHVDOORZHG
,I\RXILQGWKDWP\VTOGFDQDQGVKRXOGXVHPRUHUHVRXUFHVFKHFNYDULRXVDVSHFWVRI
RSHUDWLQJV\VWHPWXQLQJ)RUH[DPSOHWKH26¦VNHUQHORSWLRQVRUXVHUGHIDXOWVPLJKW
VHW QR OLPLW RQ WKH DPRXQW RI 5$0 DYDLODEOH EXW PLJKW VSHFLILFDOO\ OLPLW WKH XVHU
UXQQLQJP\VTOG7KLVLVDFRPPRQFDVHZKHQRYHUDOO26OLPLWVDUHKXJHRUHYHQQRW
VHWZKLOHGHIDXOWVIRUXVHUDFFRXQWVDUHVPDOO
,I0\64/LVXVLQJOLPLWHGUHVRXUFHV\RXPD\VRPHWLPHVZRQGHUZKHWKHULWLVLQWURXEOH
EHFDXVH RI ODFN RI UHVRXUFHV RU MXVW LVQ¦W XVLQJ WKHP EHFDXVH LWV ORDG LV ORZ DW WKH
PRPHQW:KHQWKHVHUYHULVLQWURXEOHLWHLWKHUSULQWVPHVVDJHVWRWKHHUURUORJILOHRU
VWDUWVSHUIRUPLQJSRRUO\$QRWKHUWHOOWDOHVLJQLVZKHQ\RXWU\WRLQFUHDVHDQRSWLRQ
EXWLWGRHVQRWLQFUHDVH7KHHDUOLHUopen_files_limitH[DPSOHLOOXVWUDWHGWKLVVLWXDWLRQ
,QVXFKFDVHV\RXZLOOHLWKHUILQGPHVVDJHVLQWKHHUURUORJILOHLI\RXVHWWKHRSWLRQDW
VWDUWXSRUVHHDZDUQLQJZKHQ\RXVHWWKHRSWLRQG\QDPLFDOO\,W¦VDOVRDJRRGLGHDWR
FKHFNWKHUHDOYDOXHRIWKHVXVSHFWHGYDULDEOH

Effects of Other Software


(YHU\WKLQJZH¦YHGLVFXVVHGVRIDULVLPSRUWDQWZKHQWKH0\64/VHUYHUUXQVLQDQ\
HQYLURQPHQW,GHDOO\LWVKRXOGUXQLQDGHGLFDWHGHQYLURQPHQWDQGXVHDOOSK\VLFDO
UHVRXUFHVWKHPDFKLQHKDV%XWVRPHVLWHVXVH0\64/LQVKDUHGHQYLURQPHQWV7KLV
LQFOXGHVVKDUHGKRVWLQJZKHUHPDQ\LQVWDQFHVRIWKHP\VTOGVHUYHUDUHUXQQLQJRQ
EHKDOIRIGLIIHUHQWFXVWRPHUVDQGV\VWHPVVLPXOWDQHRXVO\UXQQLQJP\VTOGZLWKFOLHQW
DSSOLFDWLRQVDQGRWKHUSURFHVVHV
:KHQ\RXWXQHD0\64/LQVWDOODWLRQLQVXFKFRQILJXUDWLRQV\RXQHHGWRFKHFNWZR
DGGLWLRQDOWKLQJVKRZPDQ\UHVRXUFHVRWKHUSURFHVVHVXVHLQWKHLUQRUPDORSHUDWLRQV
DQGKRZPDQ\UHVRXUFHVWKH\DOORFDWHDWFULWLFDOWLPHV
8QGHUQRUPDOORDGV\RXFDQJXHVVKRZPDQ\UHVRXUFHVDUHOHIWDIWHURWKHUSURJUDPV
UHVHUYH WKHLUV DQG VHW 0\64/¦V RSWLRQV DSSURSULDWHO\ &ULWLFDO ORDGV DUH XVXDOO\
VXUSULVLQJDQGFDQOHDGWRVXGGHQP\VWHULRXV0\64/HUURUVRUHYHQFUDVKHV7KHUHLV
QRXQLYHUVDOUXOHDERXWZKDWWRGRLQWKHVHVLWXDWLRQV-XVWUHPHPEHUWKDWWKLUGSDUW\
VRIWZDUHFDQDIIHFWD0\64/LQVWDOODWLRQDQDO\]HWKHSRWHQWLDOORDGDQGWDNHDFWLRQ
WRFRPSHQVDWHIRUWKHHIIHFWV
7KXVLI\RXDQWLFLSDWHWKDWVRPHRWKHUDSSOLFDWLRQKDVDFULWLFDOORDGDWWLPH;PHDVXUH
LWVUHVRXUFHXVHXQGHUWKHORDGDQGDGMXVW0\64/VHUYHURSWLRQVDFFRUGLQJO\,QVXFK
HQYLURQPHQWVLWPDNHVVHQVHWROLPLWUHVRXUFHVDWWKH26OHYHORUXVHYLUWXDOL]DWLRQ,Q

Effects of Other Software | 153


FRQWUDVWWRSUHYLRXVVHFWLRQV,DPDGYLVLQJKHUHWRDGGUHVWULFWLRQVUDWKHUWKDQUHPRYH
WKHP
7KHZRUVWFDVHRFFXUVZKHQDQXQXVXDOO\KHDY\ORDGFDQQRWEHSUHGLFWHG<RXOHDUQ
DERXWLWRQO\ZKHQ\RXKLWDSUREOHP6RLI0\64/VWDUWVIDLOLQJZKHQLWVKRXOGQRW
DOZD\VUHPHPEHUWKHHIIHFWVRIFRQFXUUHQWSURFHVVHVFKHFN26ORJVDQGVHHZKHWKHU
RWKHUDSSOLFDWLRQVFDQDIIHFW0\64/¦VDFFHVVWRUHVRXUFHV,WLVDOVRYDOXDEOHWRLQVWDOO
VRIWZDUHWKDWPRQLWRUVWKHDFWLYLW\RIDOOSURFHVVHVUXQQLQJRQWKHVDPHER[WRJHWKHU
ZLWK\RXU0\64/LQVWDOODWLRQ
■ $JRRGPHWKRGWRDVFHUWDLQZKHWKHUWKH0\64/VHUYHUZDVDIIHFWHGE\DQRWKHU
26SURFHVVLVWRUXQDSUREOHPDWLFTXHU\LQDQLVRODWHGHQYLURQPHQW7KLVLVWKH
VDPH PHWKRG UHFRPPHQGHG LQ £+RZ &RQFXUUHQF\ $IIHFWV 3HUIRU
PDQFH¤RQSDJH

154 | Chapter 4:ಗMySQL’s Environment


CHAPTER 5
Troubleshooting Replication
,DOUHDG\WRXFKHGRQUHSOLFDWLRQLVVXHVLQSUHYLRXVFKDSWHUVVKRZLQJKRZWKHSUREOHPV
GLVFXVVHGLQHDFKFKDSWHUFDQDIIHFWUHSOLFDWHGHQYLURQPHQWV7KLVFKDSWHUIRFXVHVRQ
LVVXHVVSHFLILFWRUHSOLFDWLRQLWVHOI7KHVHDUHPRVWO\UHSOLFDWLRQIDLOXUHVGXHWRHUURUV
RUVORZGRZQVVXFKDVDVODYHWKDWODJVVHYHUDOKRXUVEHKLQGWKHPDVWHU
0\64/¦VUHSOLFDWLRQLVDV\QFKURQRXV7KLVPHDQVWKHPDVWHUGRHVQRWFDUHZKHWKHU
GDWDRQWKHVODYHLVFRQVLVWHQW$OWKRXJKFLUFXODUPXOWLSOHPDVWHUUHSOLFDWLRQFDQEHVHW
XSLQDSUDFWLFDOVHQVHLWLVDFKDLQRIVHUYHUVZLWKHDFKRIWKHPVHUYLQJDVDVODYHDQG
DPDVWHUDWWKHVDPHWLPH
MySQL Multiple Master Setup
7R LOOXVWUDWH WKH FRQFHSW EHKLQG 0\64/ PXOWLSOH PDVWHU UHSOLFDWLRQ OHW¦V FRQVLGHU
)LJXUH

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

6LQFH YHUVLRQ  0\64/ SDFNDJHV LQFOXGH D VHPLV\QFKURQRXV


UHSOLFDWLRQSOXJLQ,IWKLVSOXJLQLVWXUQHGRQWKHPDVWHUZLOOZDLWIRU
rk- i- DFRQILUPDWLRQIURPRQHRILWVVODYHVWKDWLWUHFHLYHGDQGVXFFHVVIXOO\
DSSOLHGHDFKHYHQW7KLVLVVWLOOQRWV\QFKURQRXVUHSOLFDWLRQEHFDXVH
WKHPDVWHUGRHVQRWNQRZZKHWKHUWKHVODYHKDVWKHVDPHGDWDDIWHU
DSSO\LQJ WKH HYHQW , GLVFXVVHG WKLV SRVVLELOLW\ LQ £6WDWHPHQW%DVHG
5HSOLFDWLRQ,VVXHV¤RQSDJH )XUWKHUPRUHLIPDQ\VODYHVDUHFRQ
QHFWHGWRWKHVDPHPDVWHUWKHUHLVQRJXDUDQWHHWKDWGDWDLVUHSOLFDWHG
RQDOORIWKHVODYHV
7URXEOHVKRRWLQJVHPLV\QFKURQRXVUHSOLFDWLRQLVWKHVDPHDVWURXEOH
VKRRWLQJ DV\QFKURQRXV UHSOLFDWLRQ 7KH RQO\ GLIIHUHQFH LV WKH HIIHFW
RI LWV VSHFLILF RSWLRQV 6R , ZRQ¦W GHVFULEH LVVXHV VSHFLILF WR
VHPLV\QFKURQRXVUHSOLFDWLRQ,I\RXHQFRXQWHUSUREOHPVZLWKLWMXVW
IROORZWKHPHWKRGVGHVFULEHGLQ&KDSWHU

7KH0\64/VODYHUXQVWZRWKUHDGVUHODWHGWRUHSOLFDWLRQWKH,2WKUHDGZKLFKKDQGOHV
DOOWKHWUDIILFZLWKWKHPDVWHUDQGWKH64/WKUHDGZKLFKUHUXQVWKHHYHQWVWKHPVHOYHV
WR UHSOLFDWH UHVXOWV RQ WKH VODYH 7KHVH WKUHDGV H[SHULHQFH GLIIHUHQW SUREOHPV WKDW

156 | Chapter 5:ಗTroubleshooting Replication


VKRXOGEHVROYHGXVLQJGLIIHUHQWWHFKQLTXHVVR,GLVFXVVHDFKLQLWVRZQVHFWLRQLQWKLV
FKDSWHU

Displaying Slave Status


%HIRUHZHVWDUWWURXEOHVKRRWLQJWKUHDGV,¦OOSUHVHQWDQH[FHOOHQWVRXUFHRIUHSOLFDWLRQ
VWDWHLQIRUPDWLRQWKHSHOW SLAVE STATUSTXHU\IRUVODYHV
7KHIROORZLQJH[DPSOHVZHUHWDNHQZKHQUXQQLQJDVODYHZLWKRXWHUURUVDQGDVODYH
ZKRVHPDVWHUKDVVWRSSHGWRVKRZKRZHUURUVZRXOGORRN,¦OOGLVFXVVWKHRXWSXWLQ
FKXQNV
mysql> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
Slave_IO_State: Connecting to master

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:

Displaying Slave Status | 157


Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 106

7KH 106LQ Exec_Master_Log_PosUHSUHVHQWVWKHSRVLWLRQLQWKHPDVWHUELQDU\ORJWKDW


ZDVMXVWH[HFXWHG7KLVFDQEHGLIIHUHQWIURPRead_Master_Log_PosLIWKHVODYHLVEHKLQG
WKHPDVWHU
Relay_Log_Space: 106
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 2

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

158 | Chapter 5:ಗTroubleshooting Replication


Problems with the I/O Thread
&RPPRQ,2HUURUVLQFOXGH
‡ 7KHVODYHFDQQRWFRQQHFWWRWKHPDVWHU
‡ 7KHVODYHFRQQHFWVWRPDVWHUEXWUHSHDWHGO\GLVFRQQHFWV
‡ 7KHVODYHLVIDUEHKLQGPDVWHU
:KHQ DQ ,2 HUURU KDSSHQV WKH VODYH VWDWXV WKDW ZH VDZ LQ WKH SUHYLRXV VHFWLRQ
EHFRPHV Slave_IO_Running: No DQG WKH UHDVRQ DSSHDUV LQ WKH Last_IO_Errno DQG
Last_IO_ErrorILHOGV7KHHUURUORJILOHDOVRFRQWDLQVPHVVDJHVDERXW,2WKUHDGIDLOXUHV
LIlog_warningsLVVHWWR WKHGHIDXOW 
:KHQWKHVODYHFDQQRWFRQQHFWWKHILUVWWKLQJWRFKHFNLVZKHWKHUWKHUHSOLFDWLRQXVHU
KDVWKHFRUUHFWSHUPLVVLRQVRQWKHPDVWHU7KHUHSOLFDWLRQXVHU WKHXVHU\RXVSHFLI\
DV master_user LQ WKH CHANGE MASTER TXHU\ WKDW EHJLQV UHSOLFDWLRQ  PXVW KDYH WKH
REPLICATION SLAVESULYLOHJHRQWKHPDVWHU,ILWGRHVQRWMXVWJUDQWVXFKDSULYLOHJHWR
WKLVXVHURQWKHPDVWHU
2QFH\RXDUHVXUHWKHUHSOLFDWLRQXVHUKDVWKHFRUUHFWSHUPLVVLRQV\RXQHHGWRFKHFN
WKHQHWZRUN8VHWKHSLQJXWLOLW\WRILQGRXWZKHWKHUWKHPDVWHUKRVWFDQEHUHDFKHG
+HUHLVDQH[DPSOH
$ping 192.168.0.4
PING 192.168.0.4 (192.168.0.4): 56 data bytes
64 bytes from 192.168.0.4: icmp_seq=0 ttl=64 time=0.113 ms
64 bytes from 192.168.0.4: icmp_seq=1 ttl=64 time=0.061 ms
^C
--- 192.168.0.4 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.061/0.087/0.113/0.026 ms

,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

Problems with the I/O Thread | 159


,IWKHSUHFHGLQJWHVWVVXFFHHGEXWWKHUHSOLFDWLRQ,2WKUHDGLVVWLOOVWRSSHGFRQQHFW
XVLQJWKH0\64/FRPPDQGOLQHFOLHQWWREHVXUH\RXFDQFRQQHFWWRWKHPDVWHUXVLQJ
WKHFUHGHQWLDOVRIWKHUHSOLFDWLRQXVHU+HUHLVDQH[DPSOHZKHUH,VXFFHVVIXOO\HVWDEOLVK
DFRQQHFWLRQDQGGHWHUPLQHWKDWWKHUHSOLFDWLRQXVHUKDVWKHULJKWSULYLOHJHV
$mysql -h 127.0.0.1 -P 33511 -urepl -preplrepl
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 6783
Server version: 5.1.59-debug-log Source distribution

Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its


affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> SELECT user(), current_user();


+----------------+----------------+
| user() | current_user() |
+----------------+----------------+
| repl@localhost | repl@localhost |
+----------------+----------------+
1 row in set (0.13 sec)

mysql> SHOW GRANTS\G


*************************** 1. row ***************************
Grants for repl@localhost: GRANT REPLICATION SLAVE ON
*.* TO 'repl'@'localhost' IDENTIFIED BY PASSWORD
'*17125BDFB190AB635083AF9B26F9E8F00EA128FE'
1 row in set (0.00 sec)

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

160 | Chapter 5:ಗTroubleshooting Replication


1752426772:1752426864(92) ack 1474226199 win 91 <nop,nop,timestamp 1939999898
649946687>
22:28:12.195317 IP apple.60344 > master.mysql.com.33051: . ack 92 win 65535
<nop,nop,timestamp 649946998 1939999898>
^C
2 packets captured
37 packets received by filter
0 packets dropped by kernel

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

Problems with the I/O Thread | 161


BINLOG '
CIJjTg//AQAAZgAAAGoAAAAAAAQANS4xLjU5LWRlYnVnLWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAEzgNAAgAEgAEBAQEEgAAUwAEGggAAAAICAgC
'/*!*/;
# at 106
#110904 16:50:14 server id 511 end_log_pos 192 Query thread_id=7251
exec_time=0 error_code=0
use test/*!*/;
SET TIMESTAMP=1315144214/*!*/;
SET @@session.pseudo_thread_id=7251/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1,
@@session.unique_checks=1, @@session.autocommit=1/*!*/;
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
SET
@@session.character_set_client=8,@@session.collation_connection=8,@@session.
collation_server=33/*!*/;
SET @@session.lc_time_names=0/*!*/;
SET @@session.collation_database=DEFAULT/*!*/;
create table t1(f1 int)
/*!*/;
# at 192
#110904 16:50:20 server id 511 end_log_pos 260 Query thread_id=7251
exec_time=0 error_code=0
SET TIMESTAMP=1315144220/*!*/;
BEGIN
/*!*/;
# 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==
'/*!*/;
# 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\

162 | Chapter 5:ಗTroubleshooting Replication


$mysqlbinlog --verbose --start-position=260 --stop-position=335 \
/Users/apple/Applications/mysql-5.1/data511/mysqld511-bin.000007.corrupted
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
ERROR: Error in Log_event::read_log_event(): 'Found invalid event in binary
log', data_len: 102, event_type: 15
ERROR: Could not read a Format_description_log_event event at offset 4; this
could be a log format error or read error.
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;

,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*/;

,QDGGLWLRQWRWKH --verboseRSWLRQ,XVHG --start-positionDQG --stop-positionWR


VKRZKRZWROLPLWP\VTOELQORJRXWSXWWRSDUWLFXODUSRVLWLRQVLIWKHORJILOHLVODUJH
<RXFDQSLSHP\VTOELQORJRXWSXWLQWRWKH0\64/FOLHQWDQGKDYHLWH[HFXWHWKHTXHULHV
7KLVZRUNVIRU6%5DQG5RZ%DVHG5HSOLFDWLRQ 5%5 DQGLVXVHIXOZKHQ\RXZDQW
WRGHEXJKRZELQDU\ORJHYHQWVDUHDSSOLHGWRWKHVODYH

Problems with the I/O Thread | 163


,IWKHUHLVDSUREOHPZLWKWKHPDVWHUORJILOHILQGRXWZK\LWKDSSHQHG)LUVWUHVWDUW
UHSOLFDWLRQPDQXDOO\5HVWRUHHYHQWVIURP Exec_Master_Log_PosWRWKHODWHVWSRVVLEOH
SRVLWLRQDQGDSSO\WKHPPDQXDOO\7KHQZDLWXQWLOSeconds_Behind_MasterLV0DQG
FRPSDUHWKHWDEOHVRQWKHPDVWHUDQGVODYH
,IDORWRIFKDQJHVDUHFRUUXSWHGDQGILQGLQJZKLFKURZVDUHPRGLILHGLVSUDFWLFDOO\
LPSRVVLEOH\RXSUREDEO\QHHGWREDFNXSWKHPDVWHUWKHQORDGWKHEDFNXSRQWKHVODYH
DQGUHVWDUWUHSOLFDWLRQ<RXFDQUHSOD\UHSOLFDWLRQIRUDVLQJOHWDEOH)LJXUHRXWWKHODVW
SRLQWLQWKHELQDU\ORJZKHUHWKHGDWDZDVFRUUHFWO\UHSOLFDWHGWKHQVHWWKHreplicate-
wild-ignore-tableRSWLRQDQGUXQ
START SLAVE [SQL_THREAD] UNTIL
MASTER_LOG_FILE = 'log_name', MASTER_LOG_POS = log_pos
START SLAVE [SQL_THREAD] UNTIL
RELAY_LOG_FILE = 'log_name', RELAY_LOG_POS = log_pos

ZKHUHlog_posLVWKHSRVLWLRQRIWKHODVWFRUUHFWFKDQJHRIWKDWWDEOHLQHLWKHUWKHPDVWHU
ELQDU\ILOHRUUHOD\ORJILOH$IWHUWKHVODYHUHDFKHVWKLVSRVLWLRQDQGVWRSVUHPRYHWKH
RSWLRQreplicate-wild-ignore-tableDQGUHVWDUWWKHVHUYHU

How to Check Whether Tables Are Consistent


7KHUHDUHIHZZD\VWRFKHFNZKHWKHUWDEOHVRQDPDVWHUDQGDVODYHDUHFRQVLVWHQW+HUH
LVTXLFNRYHUYLHZRIWKHP8VHRQHRUDQRWKHUGHSHQGLQJRQWKHSUREOHP\RXKLW
CHECKSUM TABLE
$V VKRXOG EH FOHDU IURP WKH QDPH WKLV TXHU\ UHWXUQV D WDEOH FKHFNVXP 7KLV
0\64/VWDWHPHQWGRHVQRWUHTXLUHDGGLWLRQDOLQVWDOODWLRQDQGLVDOZD\VDYDLODEOH
mysql> CHECKSUM TABLE test;
+--------------+------------+
| Table | Checksum |
+--------------+------------+
| test.test | 4220395591 |
+--------------+------------+
1 row in set (0.43 sec)

: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.

164 | Chapter 5:ಗTroubleshooting Replication


SWWDEOHFKHFNVXP
7KLV LV SDUW RI WKH 3HUFRQD 7RRONLW DQG WKH PRVW SRZHUIXO WRRO DPRQJ WKRVH
GLVFXVVHGKHUH,WFRQQHFWVWRDPDVWHUDQGDVODYHDQGFRPSDUHVZKHWKHUWDEOHV
KDYHWKHVDPHVWUXFWXUHDQGWKHVDPHGDWD7RGRWKLVWKHWRROFUHDWHVDWDEOHWKDW
VWRUHVDFKHFNVXPIURPWKHPDVWHUWDEOH$IWHUWKLVYDOXHLVUHSOLFDWHGDVHFRQG
UXQRISWWDEOHFKHFNVXPFKHFNVWKHGDWDRQDVODYH
+HUHLVDQH[DPSOHRIFKHFNLQJUHSOLFDWLRQ
$pt-table-checksum --replicate=test.checksum --create-replicate-table
h=127.0.0.1,P=33511,u=root --databases book
DATABASE TABLE CHUNK HOST ENGINE COUNT CHECKSUM TIME WAIT STAT LAG
book t1 0 127.0.0.1 MyISAM 5 42981178 0 NULL NULL NULL
book ts 0 127.0.0.1 MyISAM 65 aeb6b7a0 0 NULL NULL NULL

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

Problems with the I/O Thread | 165


YHUVLRQUHSOLFDWLRQFKHFNVXPVZHUHDOVRLQVHUWHG7KLVVROYHVWKHUHVWRIWKHFRU
UXSWLRQSUREOHPVFDXVHGE\QHWZRUNEUHDNDJH
7KHVHIL[HVGRQRWDXWRPDWLFDOO\UHFRYHUFRUUXSWHGUHOD\ORJVEXWSUHYHQWWKHPIURP
EHFRPLQJFRUUXSWHGGXHWRHLWKHUDSUREOHPRQWKHPDVWHURUDQHWZRUNLVVXH6LQFH
YHUVLRQ  WKH relay-log-recovery RSWLRQ LV DYDLODEOH ZKLFK WXUQV RQ DXWRPDWLF
UHFRYHU\ZKHQWKHVODYHUHVWDUWV
%XWHYHQLI\RXXVHQHZHUYHUVLRQVRI0\64/ZLWKWKHVHIL[HV\RXVKRXOGFKHFNWKH
QHWZRUN7KHHDUOLHU\RXILQGSUREOHPVZLWKDQHWZRUNWKHVRRQHU\RXFDQIL[WKHP
(YHQ ZLWK DXWRPDWLF UHFRYHU\ UHVROYLQJ QHWZRUN LVVXHV WDNHV WLPH DQG FDQ VORZ
GRZQUHSOLFDWLRQ
,QWKLVVHFWLRQZH¦YHKDGWRFRQVLGHUVRPH64/WKUHDGHUURUVHYHQWKRXJKWKHFDXVHV
ZHUHRQWKH,2WKUHDG,QWKHQH[WVHFWLRQ,ZLOOGLVFXVV64/WKUHDGSUREOHPVWKDW
DUHQRWUHODWHGWRWKH,2WKUHDG

Problems with the SQL Thread


$V,DOUHDG\PHQWLRQHGLQ£6WDWHPHQW%DVHG5HSOLFDWLRQ,VVXHV¤RQSDJHHDFKVODYH
KDVDVLQJOH64/WKUHDGVRDOOLWVHUURUVFDQEHWHVWHGLQDVLQJOHWKUHDGHG0\64/FOLHQW
(YHQLI\RXUXQWKHPXOWLWKUHDGHGVODYHSUHYLHZ\RXFDQDOZD\VDVNLWWRXVHDVLQJOH
WKUHDGZKHQ\RX¦UHWU\LQJWRUHSURGXFHDQHUURU,IUHGXFLQJDFWLYLW\WRRQH64/WKUHDG
IDLOVWRPDNHWKHSUREOHPJRDZD\XVHWKHIROORZLQJWHFKQLTXHVWRIL[ORJLFHUURUVRQ
WKHVLQJOHWKUHDGWKHQVZLWFKWRPXOWLSOHWKUHDGVDJDLQ
,W¦VHDV\WRUHFUHDWHDTXHU\WKDWFDXVHGDVODYHWRIDLOMXVWUXQLWXVLQJWKH0\64/
FRPPDQGOLQHXWLOLW\
:KHQ\RXJHWDQ64/HUURURQWKHVODYHLWVWRSV SHOW SLAVE STATUSVKRZVWKH64/
WKUHDGHUURUWKDWFDXVHGWKHSUREOHP
Last_SQL_Errno: 1146
Last_SQL_Error: Error 'Table 'test.t1' doesn't exist' on query.
Default database: 'test'.
Query: 'INSERT INTO t1 VALUES(1)'

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)

166 | Chapter 5:ಗTroubleshooting Replication


$IWHUWKHWDEOHLVFUHDWHGZHFDQUHVWDUWWKHVODYH64/WKUHDG
mysql> STOP SLAVE SQL_THREAD;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> SHOW WARNINGS;


+-------+------+--------------------------------+
| Level | Code | Message |
+-------+------+--------------------------------+
| Note | 1255 | Slave already has been stopped |
+-------+------+--------------------------------+
1 row in set (0.00 sec)

mysql> START SLAVE SQL_THREAD;


Query OK, 0 rows affected (0.10 sec)

mysql> SHOW SLAVE STATUS\G


*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
<skipped>
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
<skipped>
Last_Errno: 0
Last_Error:
<skipped>
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
1 row in set (0.00 sec)

1RZWKHSUREOHPLVVROYHGDQGWKHVODYHUXQVVXFFHVVIXOO\DJDLQ

When Data Is Different on the Master and Slave


,I\RXKDYHHUURUVWKDWFDQQRWEHVROYHGVRHDVLO\FKHFNZKHWKHUWKHWDEOHGHILQLWLRQLV
WKHVDPHRQWKHPDVWHUDQGVODYH<RXVKRXOGDOVRFKHFNZKHWKHUERWKWDEOHVKDGWKH
VDPHGDWDEHIRUHWKHSUREOHPDWLFTXHU\UDQ

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

Problems with the SQL Thread | 167


‡ INSERT ON DUPLICATE KEY UPDATE ZKLFK LI UXQ RQ WKH VODYH DORQJ ZLWK RWKHU
XSGDWHVLQRWKHUFRQQHFWLRQVLQDGLIIHUHQWRUGHUIURPWKHPDVWHUFDQXSGDWHWKH
ZURQJURZVDQGVNLSURZVWKDWZHUHXSGDWHGRQWKHPDVWHU
‡ 5XQQLQJFRQFXUUHQWLQVHUWVRQD0\,6$0WDEOHRQWKHPDVWHUZLWKRXWWDNLQJLQWR
DFFRXQWWKHH[LVWHQFHRIDVODYH
‡ 8VHRIQRQGHWHUPLQLVWLFIXQFWLRQV
,WLVDOVRLPSRUWDQWWRUHPHPEHUWKDWDVODYHLVQRWFUDVKSURRIVRLIP\VTOGFUDVKHG
UHVWDUWLQJLWFDQUHSHDWWKHWUDQVDFWLRQH[HFXWHGMXVWEHIRUHWKHFUDVKDQGWKXVOHDYHWKH
VODYHZLWKGLIIHUHQWGDWDIURPWKHPDVWHU$VLPLODULVVXHKDSSHQVZKHQWKHVODYHIDLOV
ZKLOHLQWKHPLGGOHRIXSGDWLQJDQRQWUDQVDFWLRQDOWDEOHVXFKDV0\,6$0

Circular Replication and Nonreplication Writes on the Slave


,I\RXZULWHWRDVODYHRXWVLGHRIUHSOLFDWLRQ\RXKDYHWRFDUHDERXWGDWDFRQVLVWHQF\
7ZRJRRGZD\VWRDYRLGSUREOHPVDUHWRPDNHVXUHWKHZULWHVDIIHFWGLIIHUHQWREMHFWV
IURP WKH FKDQJHV EHLQJ UHSOLFDWHG DQG WR DOZD\V XVH SULPDU\ NH\V ZLWK GLIIHUHQW
VHTXHQFHVRQWKHPDVWHUDQGVODYH<RXFDQHQVXUHGLIIHUHQWSULPDU\NH\YDOXHVE\
XVLQJ AUTO_INCREMENT JLYLQJ HDFK PDVWHU D GLIIHUHQW VWDUWLQJ SRLQW ZLWK WKH
auto_increment_offsetRSWLRQDQGVHWWLQJauto_increment_incrementWRWKHQXPEHURI
VHUYHUVLQWKHUHSOLFDWLRQVHWXS
&LUFXODUUHSOLFDWLRQZKHUHHDFKPDVWHULVDVODYHRIDQRWKHUPDVWHUFDQEHDIIHFWHG
E\WKHVDPHLVVXHEHFDXVHVXFKDVHWXSGRHVQRWSUHYHQWZULWHVRQWKHVODYHWKDWFDQ
FRQIOLFWZLWKWKHGDWDEHLQJUHSOLFDWHG
0\64/DOORZV\RXWRFUHDWHFLUFXODUUHSOLFDWLRQVHWXSVEXWGRHVQRWJXDUDQWHHGDWD
FRQVLVWHQF\IRUVXFKVHWXSVGXHWRWKHLUDV\QFKURQRXVUHSOLFDWLRQGHVLJQ<RXQHHGWR
WDNHFDUHRIGDWDFRQVLVWHQF\\RXUVHOI7KHUHIRUHIURPDWURXEOHVKRRWLQJSHUVSHFWLYH
GHEXJJLQJHUURUVFDXVHGE\FLUFXODUUHSOLFDWLRQDUHWKHVDPHDVDQ\RWKHUUHSOLFDWLRQ
SUREOHP,QDELGLUHFWLRQDOVHWXSUHPHPEHUWKDWVHUYHUVFDQEHERWKPDVWHUVDQGVODYHV
RIHDFKRWKHU6RZKHQ\RXPHHWDQHUURUGHWHUPLQHZKLFKRIWKHPLVSOD\LQJWKHPDVWHU
UROHDQGZKLFKWKHVODYH¦VWKHQDFWFRUUHVSRQGLQJO\<RXZLOOSUREDEO\QHHGWRWHVW
UHSOLFDWLRQZLWKRQHVHUYHUSOD\LQJMXVWWKHPDVWHUUROHDQGWKHRWKHUWKHVODYH¦VWKHQ
VZDSUROHV
7RLOOXVWUDWHWKLVWHFKQLTXHOHW¦VWDNHDVLPSOHPXOWLPDVWHUVHWXSIURP£0\64/0XO
WLSOH0DVWHU6HWXS¤RQSDJH )LJXUH 

 $ 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¤

168 | Chapter 5:ಗTroubleshooting Replication


s

A
IP B
1/
A

)LJXUH7ZRVHUYHUVWKDWUHSOLFDWHHDFKRWKHU

,I\RXPHHWDSUREOHPLQVXFKDVHWXSWDNHDSDLU DVLQ)LJXUH DQGVROYHWKHSUREOHP


DVLILWZHUHVLPSOHPDVWHUVODYHUHSOLFDWLRQ6WRSDOOXSGDWHVRQBZKLOH\RXDUHZRUNLQJ
RQWKHSUREOHP

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

Problems with the SQL Thread | 169


RIKRZWRVHWXSPXOWLPDVWHUUHSOLFDWLRQLQ&KDSWHU£5HSOLFDWLRQIRU+LJK$YDLOD
ELOLW\¤RI0\64/+LJK$YDLODELOLW\E\&KDUOHV%HOOHWDO 2¦5HLOO\ 
■ *RRGGHVLJQLVFUXFLDOWRFUHDWLQJDWURXEOHIUHHFLUFXODUPXOWLPDVWHUUHSOLFDWLRQ
VHWXS

Incomplete or Altered SQL Statements


,IDQHUURUPHVVDJHGRHVQRWVKRZWKHIXOOTXHU\DQGWKHHUURUORJGRHVQRWFRQWDLQWKH
IXOOTXHU\HLWKHU ZKLFKFDQKDSSHQLIWKHTXHU\LVODUJHUWKDQE\WHV \RXQHHG
WRUXQWKHP\VTOELQORJXWLOLW\RQHLWKHUWKHPDVWHUELQDU\ORJRUWKHVODYH¦VUHOD\ORJWR
JHWWKHIXOOYHUVLRQRIWKHTXHU\DVWKHVODYHJRWLWDQGWKHQDQDO\]HZK\LWIDLOHG
7KDWFDQKHOSZLWKVWDWHPHQWEDVHGUHSOLFDWLRQZKLFKORJVDQGVHQGVTXHULHVLQWKH
RULJLQDOKXPDQUHDGDEOH64/%XWZKDWGR\RXGRLIURZIRUPDWZDVXVHG"5RZHYHQWV
DUH WKH VDPH HYHQWV DV TXHULHV DQG FDQ EH UXQ WKURXJK DQ\ 0\64/ FOLHQW 8VH
P\VTOELQORJZLWKWKH--verboseRSWLRQWRJHWWKH64/UHSUHVHQWDWLRQRIURZHYHQWV
■ $OZD\VXVHWKHVDPHTXHU\RQWKHVODYHWKDWZDVH[HFXWHGZKHQWKHPDVWHUELQDU\
ORJHYHQWZDVDSSOLHG8VLQJWKHP\VTOELQORJXWLOLW\WRFKHFNZKDWTXHU\UDQZLOO
VDYH\RXWLPH7KHELQDU\ORJVRPHWLPHVFRQWDLQVDTXHU\WKDWLVDELWGLIIHUHQW
IURP ZKDW ZDV RULJLQDOO\ H[HFXWHG RQ WKH PDVWHU DQG VLGH HIIHFWV FRXOG EH
LQWURGXFHG,I\RXLJQRUHVXFKDVLGHHIIHFW\RXFRXOGVSHQGKRXUVWU\LQJWRUHSHDW
DSUREOHPWKDWMXVWFDQ¦WEHIRXQGE\UXQQLQJWKHTXHU\DVWKHPDVWHUUDQLW

Different Errors on the Master and Slave


$QRWKHU VWDWXV PHVVDJH WKDW FDQ EH FRQIXVLQJ LV £4XHU\ FDXVHG GLIIHUHQW HUURUV RQ
PDVWHUDQGVODYH¤7KHPHVVDJHXVXDOO\FRQWDLQVWKHHUURU0RVWFRQIXVLQJLVZKHQ
VXFKDPHVVDJHVD\VWKHUHZDVQRHUURURQWKHVODYH¢£(UURURQVODYH¥QRHUURU¦  ¤¢
EXWWKHUHZDVRQHRQWKHPDVWHU7KLVFDQKDSSHQIRUH[DPSOHLIDQHUURUZDVFDXVHG
E\DWULJJHURQWKHPDVWHUEXWWKHXSGDWHRQWKHPDVWHUWDEOHVXFFHHGHG7KHTXHU\RQ
WKHRULJLQDOWDEOHZLOOEHZULWWHQWRWKHELQDU\ORJILOHZLWKDQRWHFRQWDLQLQJWKHHUURU
QXPEHUIRUWKHIDLOHGWULJJHU,QWKLVFDVHLIWKHWULJJHUVXFFHVVIXOO\ILQLVKHGRQWKHVODYH
RUWKHVODYH¦VWDEOHGRHVQRWKDYHDWULJJHUDWDOOWKHTXHU\RQWKHVODYHZLOOUHWXUQQR
HUURUDQGWKXV\RXZLOOJHWVXFKDPHVVDJH
7RTXLFNO\IL[WKLVLVVXHVNLSWKHHUURUXVLQJ SET GLOBAL SLAVE_SKIP_COUNTER=1;DQG
FRQWLQXHUHSOLFDWLRQ'RQ¦WIRUJHWWRILQGWKHUHDOFDXVHRIWKHSUREOHPWRSUHYHQWWKH
VDPHHUURUIURPUHFXUULQJ
,IDSUREOHPRFFXUUHGRQWKHPDVWHUGXHWRDGHDGORFNLQDWULJJHUIL[WKHVODYHPDQXDOO\
EHFDXVHWKHPDVWHUDQGVODYHWDEOHVFDQFRQWDLQGLIIHUHQWGDWD7RGRWKLV\RXQHHGWR
ILQGRXWZKLFKWDEOHVFRQWDLQGLIIHUHQWGDWDDQGXSGDWHWKHVODYHWRPDWFKWKHPDVWHU

170 | Chapter 5:ಗTroubleshooting Replication


Configuration
$QRWKHULPSRUWDQWWKLQJWRFKHFNLVWKHFRQILJXUDWLRQRSWLRQVRIWKHPDVWHUDQGVODYH
,GHDOO\WKH\VKRXOGEHWKHVDPHEXWVRPHWLPHVWKHUHDUHJRRGUHDVRQVVXFKDVGLIIHUHQW
KDUGZDUHRUWKHNLQGRIORDGWRPDNHWKHPGLIIHUHQW:KHQWKH\DUHGLIIHUHQWDQG\RX
VWDUWLQJUHFHLYH64/HUURUVWKDWFDQQRWEHHDVLO\H[SODLQHGFKHFNWKHRSWLRQVWKDWFDQ
FKDQJHVHUYHUEHKDYLRU,GHVFULEHGVRPHRIWKHPLQ&KDSWHU
-XVW DV IRU WKH VLQJOHVHUYHU VHWXS ZKHQ , UHFRPPHQGHG \RX UXQ mysqld ZLWK WKH
--no-defaultsRSWLRQWRNQRZZKHWKHULWLVDIIHFWHGE\\RXUFXVWRPRSWLRQVKHUH,
UHFRPPHQGFRS\LQJWKHPDVWHU¦VRSWLRQVLQWRWKHVODYHFRQILJXUDWLRQVRWKDWWKHVODYH
KDVH[DFWO\WKHVDPHRSWLRQVDVWKHPDVWHU$GMXVWRQO\WKRVHRSWLRQVWKDWGLIIHUEH
WZHHQVHUYHUVVXFKDV server_idZKLFKPXVWDOZD\VEHXQLTXH'HWHUPLQHZKHWKHU
WKHSUREOHPLVVWLOOUHSURGXFLEOH,ILWLVQRW\RXFDQIHHOFRQILGHQWWKDWDFRQILJXUDWLRQ
YDULDEOHLVWKHUHDVRQIRUWKHIDLOXUH$WWKDWSRLQW\RXQHHGRQO\WRILQGWKHWURXEOHVRPH
YDULDEOH XVLQJ WKH WHFKQLTXHV GHVFULEHG LQ £+DVWH 0DNHV :DVWH¤ RQ SDJH  DQG
DGMXVWLWFRUUHVSRQGLQJO\
■ $OZD\VFRPSDUHWKHRSWLRQVRQWKHPDVWHUDQGVODYHIRUGLIIHUHQFHV

When the Slave Lags Far Behind the Master


£3UREOHPV ZLWK WKH ,2 7KUHDG¤ RQ SDJH  GLVFXVVHG WKH VLWXDWLRQ ZKHQ
Seconds_Behind_MasterJURZVODUJHEHFDXVHWKHQHWZRUNLVIODN\$QRWKHUUHDVRQIRU
KXJHGHOD\VLVZKHQWKHVODYHSHUIRUPVPRUHVORZO\WKDQWKHPDVWHU
7KHVODYHFDQEHVORZHUWKDQWKHPDVWHULILWKDVVORZHUKDUGZDUHVPDOOHUEXIIHUVRU
LWVRZQUHDGORDGWKDWFRPSHWHVZLWKWKHUHSOLFDWHGORDGIRUUHVRXUFHV$QRWKHUSRVVLEOH
FDXVHRIVORZQHVVLVZKHQDPDVWHUH[HFXWHVTXHULHVLQSDUDOOHOEXWWKHVODYHH[HFXWHV
DOOWKHELQDU\ORJHYHQWVLQDVLQJOHWKUHDGRQHDIWHUDQRWKHU
7KHILUVWWKLQJ\RXQHHGWRGRZKHQDVODYHODJVEHKLQGWKHPDVWHULVWRILQGZKDWLV
FDXVLQJWKLVEHKDYLRUDQGKRZLWFDQEHLPSURYHG
6ORZKDUGZDUHLVDQHDV\FDVHDQGFDQEHVROYHGE\EX\LQJIDVWHUKDUGZDUH%XWEHIRUH
VSHQGLQJWKHPRQH\DQDO\]HZKHWKHUWKHPDVWHULVXVLQJDOOLWVKDUGZDUHDQGZKHWKHU
SHUIRUPDQFHUHODWHGRSWLRQVRQWKHVODYHDUHRSWLPL]HG)RUH[DPSOHLIWKHPDVWHUUXQV
LQDVKDUHGHQYLURQPHQWDQGWKHVODYHLVRQDGHGLFDWHGEXWVORZHUVHUYHU\RXKDYHD
FKDQFHWRLPSURYHLWVVSHHG&DOFXODWHKRZPDQ\UHVRXUFHVWKHPDVWHUDFWXDOO\XVHV
DQG KRZ PXFK WKH VODYH¦V SHUIRUPDQFH FDQ EH LPSURYHG E\ WXQLQJ FRQILJXUDWLRQ
SDUDPHWHUV
,IWKHKDUGZDUHLVWKHVDPHRQERWKVHUYHUVRUWKHVODYHUXQVRQDQHYHQIDVWHUPDFKLQH
EXWVWLOOODJVEHKLQGFKHFNGLIIHUHQFHVLQSHUIRUPDQFHUHODWHGRSWLRQV$QDO\]HWKHLU
HIIHFWDQGWXQHWKHVODYHFRUUHVSRQGLQJO\&RQILJXULQJWKHVDPHRSWLRQVRQWKHPDVWHU
DQGVODYHLVDJRRGVWDUW,QWKLVFDVH\RXFDQEHVXUHWKDWWKHRSWLRQVDUHJRRGIRU

Problems with the SQL Thread | 171


UHSOLFDWHG HYHQWV VR \RX VKRXOG DGMXVWLQJ RQO\ WKRVH RSWLRQV RQ WKH VODYH WKDW FDQ
LPSURYHDFRQFXUUHQWORDG
7KHKDUGHVWFDVHWRVROYHLVDVODYHZKRVHVORZQHVVLVFDXVHGE\SHUIRUPLQJRSHUDWLRQV
LQDVLQJOHWKUHDGZKLOHWKHPDVWHUH[HFXWHVWKHPLQSDUDOOHO7KHRQO\WKLQJ\RXFDQ
GRLQWKLVFDVHEHVLGHVWU\LQJWKHPXOWLWKUHDGHGVODYHSUHYLHZLVWRXSJUDGHWKHKDUG
ZDUHRQWKHVODYHDQGWXQHSHUIRUPDQFHUHODWHGRSWLRQVDVPXFKDVSRVVLEOH
,QDOOWKHVHFDVHV\RXDOVRVKRXOGDQDO\]HWKHHIIHFWRITXHULHVWKDWUXQRQWKHVODYH
FRQFXUUHQWO\ZLWKWKHVODYH64/WKUHDG,GHVFULEHGFRQFXUUHQF\WURXEOHVKRRWLQJLQ
&KDSWHU

172 | Chapter 5:ಗTroubleshooting Replication


CHAPTER 6
Troubleshooting Techniques and Tools

,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

Slow Query Log


7KHVORZTXHU\ORJFRQWDLQVTXHULHVWKDWUXQORQJHUWKDQlong_query_timeVHFRQGV7KH
GHIDXOWYDOXHRIWKLVYDULDEOHLVEXW\RXFDQGHFUHDVHLW,QIDFWE\VHWWLQJWKHYDOXH
WR]HUR\RXFDQORJDOOTXHULHV6LQFHYHUVLRQ\RXFDQWXUQORJJLQJWRWKHVORZORJ
RQDQGRIIG\QDPLFDOO\DVQHHGHGMXVWDVIRUWKHJHQHUDOTXHU\ORJ<RXFDQDOVRUHGLUHFW
RXWSXWWRDWDEOHVRLWFDQEHTXHULHGOLNHDQ\RWKHU
)RUSHUIRUPDQFHWXQLQJILQGWKHVORZHVWTXHULHVFKHFNWKHPRQHE\RQHLQLVRODWLRQ
DQG WKHQ FKDQJH WKH TXHU\ VWDWHPHQW RU PDNH RWKHU QHFHVVDU\ FKDQJHV VXFK DV WR
LQGH[HV<RXFDQVWDUWIURPWKHGHIDXOWlong_query_timeWKHQGHFUHDVHLWELWE\ELWWR
]HURWRILQGPRUHDQGPRUHTXHULHV7KLVPHWKRGUHYHDOVWKHVORZHVWTXHULHVILUVW
%\GHIDXOWWKLVRSWLRQGRHVQRWORJDGPLQLVWUDWLYHVWDWHPHQWVDQGIDVWTXHULHVWKDWGRQ¦W
XVHLQGH[HVEXW\RXFDQORJVXFKTXHULHVE\VHWWLQJWKH log-slow-admin-statements
DQGlog_queries_not_using_indexesRSWLRQVUHVSHFWLYHO\
2QHGLVDGYDQWDJHRIWKHVORZTXHU\ORJLVWKDW\RXFDQ¦WRPLWTXHULHVWKDW\RXWKLQN
GRQ¦WQHHGWREHRSWLPL]HG:ULWLQJWKHORJWRDWDEOHFDQKHOS\RXVFUHHQRXWZKDW
\RXGRQ¦WQHHGWRVHHEHFDXVH\RXFDQXVHWHEREFODXVHVJURXSLQJDQGVRUWLQJWRIRFXV
GRZQRQWKHTXHULHVWKDW\RXWKLQNDUHLPSRUWDQW

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

Reading mysql slow query log from


/Users/apple/Applications/mysql-5.1/data512/mysqld512-apple-slow.log

174 | Chapter 6:ಗTroubleshooting Techniques and Tools


Count: 3 Time=0.03s (0s) Lock=0.03s (0s) Rows=0.7 (2), root[root]@localhost
SELECT * FROM t2 WHERE f1=N

Count: 1 Time=0.03s (0s) Lock=0.00s (0s) Rows=1.0 (1), root[root]@localhost


select @@version_comment limit N

Count: 1 Time=0.02s (0s) Lock=0.03s (0s) Rows=3.0 (3), root[root]@localhost


SELECT * FROM t2

Count: 3 Time=0.00s (0s) Lock=0.00s (0s) Rows=0.3 (1), root[root]@localhost


select TEXT from test where ID=N

Count: 1 Time=0.00s (0s) Lock=0.00s (0s) Rows=3.0 (3), root[root]@localhost


select * from t2

1RWHWKDWDOWKRXJKWKHXWLOLW\LVVPDUWHQRXJKWRJURXSVLPLODUTXHULHVXVLQJGLIIHUHQW
SDUDPHWHUVLWWUHDWVTXHULHVWKDWGLIIHUV\QWDFWLFDOO\RQO\LQLQVLJQLILFDQWZD\V¢VXFK
DVXVLQJDGLIIHUHQWOHWWHUFDVHRUKDYLQJGLIIHUHQWZKLWHVSDFH¢DVGLIIHUHQWTXHULHV

Tools That Can Be Customized


8VXDOO\MXVWILQGLQJVORZTXHULHVLVQRWHQRXJK<RX¦OOZDQWWRNQRZVXFKWKLQJVDV
ZKLFKHUURURUZDUQLQJZDVUHWXUQHGDQGKRZPDQ\URZVZHUHXSGDWHGRUVHOHFWHG
7KHUHDUHWKUHHZD\VWRJHWWKLVLQIRUPDWLRQWKURXJK\RXUDSSOLFDWLRQE\ZULWLQJD
SOXJLQRUE\XVLQJDSUR[\
$Q DSSOLFDWLRQ FDQ XVH WKH PHWKRGV GHVFULEHG LQ £*HWWLQJ ,QIRUPDWLRQ $ERXW D
4XHU\¤RQSDJHWRUHFHLYHDQGORJLQIRUPDWLRQ,ZRQ¦WRIIHUGHWDLOVRUH[DPSOHV
EHFDXVHWKH\GHSHQGVRPXFKRQ\RXUSURJUDPPLQJODQJXDJHDQGRWKHUFRQWH[W,I
\RXDUHLQWHUHVWHGLQTXHU\H[HFXWLRQWLPHMXVWPHDVXUHLWLQWKHDSSOLFDWLRQEHIRUHDQG
DIWHUDmysql_queryRUmysql_real_queryFDOO7KHDGYDQWDJHRIWKLVPHWKRGLVWKDWLWLV
YHU\WXQDEOH7KHGLVDGYDQWDJHLVWKDW\RXQHHGWRPRGLI\WKHDSSOLFDWLRQZKLFKLVQ¦W
SRVVLEOHIRUSHRSOHXVLQJWKLUGSDUW\VRIWZDUH
,I\RXZDQWWRZULWHD0\64/VHUYHUSOXJLQIRUDXGLWLQJSXUSRVHVUHIHUWRWKHVHFWLRQ
£:ULWLQJ$XGLW3OXJLQV¤LQWKH0\64/5HIHUHQFH0DQXDO2QFHLQVWDOOHGD0\64/
VHUYHUSOXJLQEHFRPHVSDUWRIWKH0\64/VHUYHUDQGFDQEHDFFHVVHGWKURXJK64/
TXHULHV%HVLGHVWKLVDGYDQWDJHWKHVROXWLRQLVFRPSOHWHO\LQGHSHQGHQWIURPWKHDS
SOLFDWLRQGRHVQRWQHHGDQ\FKDQJHVWRH[LVWLQJFRGHDQGFDQEHXVHGE\PXOWLSOH
DSSOLFDWLRQV7KHGLVDGYDQWDJHLVWKDWLWPXVWEHFRPSLOHGIRUDVSHFLILFYHUVLRQRIWKH
0\64/VHUYHUDQGLQVWDOOHGZKLFKLVQRWJRRGLI\RXGLVWULEXWH\RXUSOXJLQWRDZLGH
DXGLHQFH
7KHWKLUGVROXWLRQLVWRXVHDVFULSWDEOHSUR[\$SUR[\LVDGDHPRQWKDWVLWVEHWZHHQ
WKHVHUYHUDQGFOLHQWDQGFDQEHFRQILJXUHGLQGHSHQGHQWO\IURPERWKWKHVHUYHUDQGWKH
FOLHQW%HFDXVHLWJHWVDOOWUDIILF\RXFDQGRZKDWHYHU\RXZDQWZLWKLW7KHDGYDQWDJHV
RIWKLVPHWKRGDUHWKDW\RXDUHFRPSOHWHO\LQGHSHQGHQWIURPERWKWKHVHUYHUDQGFOLHQW
VR\RXGRQ¦WQHHGWRFKDQJHDQ\WKLQJWKDW\RXKDYHLQKHULWHGIURPRWKHUSHRSOH7KH
GLVDGYDQWDJHLVWKDWWKHSUR[\DGGVDQDGGLWLRQDOOD\HURISURFHVVLQJVRLWZLOOVORZ

The Query | 175


GRZQWKHDSSOLFDWLRQDQGFUHDWHDQHZVLQJOHSRLQWRIIDLOXUHEHWZHHQWKHFOLHQWDQG
VHUYHU

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

176 | Chapter 6:ಗTroubleshooting Techniques and Tools


<RXFDQDGDSWWKLVVFULSWWR\RXUQHHGV0\64/3UR[\KDVDFFHVVWRWKHTXHU\DQG
UHVXOWVHWERWKEHIRUHDQGDIWHULWVH[HFXWLRQZKLFKDOORZV\RXWRVDYHPXFKPRUH
LQIRUPDWLRQWKDQDVLPSOHJHQHUDOORJILOHHUURUVZDUQLQJVQXPEHURIDIIHFWHGURZV
TXHU\H[HFXWLRQWLPHDQGHYHQWKHIXOOUHVXOWVHW
$ORWRIXVHIXOVFULSWVFDQDOVREHIRXQGDW0\64/)RUJH

The MySQL Command-Line Interface


0\64/FRPPDQGOLQHFOLHQWDOVRNQRZQDV0\64/&/,LVWKHILUVWWRRO\RXVKRXOG
XVHIRUWHVWLQJPRVWVLWXDWLRQV
:KHQTXHULHVGRQRWZRUNSURSHUO\WKHILUVWVXVSHFWLVDEXJLQWKHDSSOLFDWLRQ%XW
HYHU\TXHU\FDQEHDIIHFWHGE\QXPHURXVLVVXHVHVSHFLDOO\FOLHQWDQGVHUYHURSWLRQV
6RLI\RXWKLQN\RX¦UHVHQGLQJWKHFRUUHFWTXHU\EXWJHWWLQJZURQJUHVXOWVWHVWLWLQWKH
0\64/&/,7KLVLVWKHHDVLHVWDQGIDVWHVWZD\WRFRQILUP\RXUJXHVV
:KHQPHPEHUVRI0\64/6XSSRUW%XJV9HULILFDWLRQ*URXSVXVSHFWFOLHQWEXJVRU
PRVWRIWHQ PLVFRQILJXUDWLRQVZHDOZD\VDVNIRUTXHULHVWKDWZHFDQWHVWLQWKH0\64/
&/,+HUH,¦OOH[SODLQEULHIO\ZK\WKLVLVLPSRUWDQWDQGZK\RWKHUWRROVGRQRWVXLWWKH
ILUVWURXQGRIWURXEOHVKRRWLQJVRZHOO

%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

Welcome to the MySQL monitor. Commands end with ; or \g.


Your MySQL connection id is 415
Server version: 5.1.60-debug Source distribution

Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its


affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

The Query | 177


mysql> SELECT * FROM t1;
Field 1: `f1`
Catalog: `def`
Database: `test`
Table: `t1`
Org_table: `t1`
Type: LONG
Collation: binary (63)
Length: 11
Max_length: 2
Decimals: 0
Flags: NOT_NULL PRI_KEY AUTO_INCREMENT NUM PART_KEY

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

178 | Chapter 6:ಗTroubleshooting Techniques and Tools


mysql> SELECT `name` FROM `t1`;
Field 1: `name`

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

The Query | 179


VXFKDV0\64/:RUNEHQFKZKLFKVXSSRUWVRQO\87)6XFKDVHWXSSUHYHQWV\RX
IURPWHVWLQJDQRWKHUFKDUDFWHUVHW6RPHFOLHQWV :RUNEHQFKDJDLQ GLVFRQQHFWDQG
UHFRQQHFWDIWHUHDFKTXHU\2WKHUVFDQEHDIIHFWHGE\VPDOOWKUHDGEXIIHUVZKLFKLV
FRPPRQIRUZHEEDVHGFOLHQWV6RPHWLPHV\RXFDQUHFRQILJXUHWKHFOLHQWEXWZKHQLQ
GRXEWLW¦VPXFKHDVLHUWRVZLWFKWRWKHFRPPDQGOLQHDQGWU\WKHTXHU\LQWKH0\64/
&/,
2QHRIWKHVWUHQJWKVRIWKH0\64/&/,LVWKDWLW¦VYHU\WUDQVSDUHQWLQUHJDUGWRRSWLRQV
\RXFDQDOZD\VVHHDQGWXQHLWVFRQILJXUDWLRQ/LNHHYHU\SLHFHRIVRIWZDUHDGPLWWHGO\
WKH0\64/&/,FRXOGKDYHDEXJ%XWWKHWRROLVLQUHJXODUKHDY\XVHE\PLOOLRQVRI
XVHUVDQGDFWLYHO\XVHGLQWHUQDOO\DW2UDFOHVRWKHFKDQFHVWKDW\RX¦OOEHDIIHFWHGE\D
EXJLQLWLVYHU\ORZ

nrÿ- $OORIWKHFRQQHFWRUVLQWKHLUXQFRQILJXUHGVWDWHZLWKWKHH[FHSWLRQRI

'*4 &RQQHFWRU3+3 VWDUW ZLWK character_set_client VHW WR UTF8 DQG


character_set_results VHW WR 18// 7KLV LV DFWXDOO\ D £GHEXJJLQJ¤
PRGHUHJDUGLQJFKDUVHWVDQGLVQRWUHFRPPHQGHGLQDFRPPDQGOLQH
FOLHQW
7KHUHDVRQEHKLQGWKLVEHKDYLRULVWROHWWKHGULYHUORJLFGHWHUPLQHWKH
EHVWZD\RIGLVSOD\LQJDQGVWRULQJUHVXOWVWRRUIURPWKHFOLHQWDQGWR
DYRLG £GRXEOHFRQYHUVLRQ¤ EXJV ZKLFK DUH UDWKHU FRPPRQ E\
SUHYHQWLQJWKHVHUYHUIURPFRQYHUWLQJWH[WXDOUHVXOWVLQWRFKDUVHWUHVXOWV
+RZHYHU WKLV WULFN GRHV QRW ZRUN RQ DGKRF TXHULHV VXFK DV SHOW
CREATE TABLE ZKHUH LW VKRXOG WUHDW BINARY DV UTF8 RU SELECT
varbinary_col FROM some_table ZKHUH LW UHDOO\ VKRXOG EH ELQDU\ RU
ZLWKSELECT CONCAT(char_field1, 1) AS aZKHUHaZLOOKDYHBINARYIODJ
VHW
7KXV DOO RI WKH FRQQHFWRUV KDYH VRPH VRUW RI ZRUNDURXQG LQ WKHLU
FRQQHFWLRQ RSWLRQV WKDW WHOOV WKH GULYHU WR WUHDW IXQFWLRQ UHVXOWV DV
UTF8LQVWHDGRIBINARYVWULQJV$OVRHYHQWKRXJKHDFKFRQQHFWRUKDVLWV
RZQGHIDXOWHQFRGLQJWKH\LVVXHSET NAMES UTF87KLVLVPRVWO\WRDYRLG
WKHGHIDXOWEHKDYLRURIWKHOLEP\VTOFOLHQWOLEUDU\ZKLFKVHWVDOOFKDUDF
WHUVHWUHODWHGYDULDEOHVWRlatin1

■ ,I\RXWKLQNDTXHU\VKRXOGUXQILQHEXWLWLVJLYLQJ\RXXQH[SHFWHGUHVXOWVEHIRUH
\RXFRQVLGHUWKHSRVVLELOLW\RIDEXJLQWKH0\64/VHUYHUFRGHWU\WKHTXHU\LQ
WKH0\64/&/,

180 | Chapter 6:ಗTroubleshooting Techniques and Tools


..
0..4ÿ
4
,ORYHDXWRPDWLRQ:KHQ,FUHDWHWHVWVIRUEXJUHSRUWV,XVHDVFULSWWKDW
UXQV 0\64/ 7HVW )UDPHZRUN WHVWV VHH £0\64/ 7HVW )UDPH
a,:' ZRUN¤RQSDJH LQDEXQFKRI0\64/VHUYHUGLVWULEXWLRQV7KLV
KHOSVPHWRWHVWDSUREOHPLQPDQ\YHUVLRQVZLWKVLQJOHDFRPPDQG
%XWRQFHWKLVKDELWSOD\HGDEDGMRNHRQPH,WHVWHGRQHRIWKHEXJ
UHSRUWVDQGFRXOGQRWUHSHDWLW,VSHQWDORWRIWLPHFRPPXQLFDWLQJZLWK
WKHUHSRUWHUDQGWULHGPDQ\RSWLRQVZLWKRXWDQ\OXFN,UHOLHGHQWLUHO\
RQRXUWHVWVXLWHDQGGLGQ¦WVXVSHFWWKDWWKHFOLHQWFRXOGEHLQWURGXFLQJ
VLGHHIIHFWV7KHQP\FROOHDJXHWULHGWKHWHVWFDVHLQWKH0\64/&/,
DQGJRWWKHDEVROXWHVDPHUHVXOWVDVWKHRULJLQDOUHSRUWHU7KHEXJZDV
FRQILUPHGDQGIL[HG
7KLV H[SHULHQFH VKRZV KRZ GDQJHURXV LW LV WR LJQRUH SRVVLEOH FOLHQW
GLIIHUHQFHV DQG KRZ LPSRUWDQW LW LV WR WU\ WKH 0\64/ &/, EHIRUH
DQ\WKLQJHOVH

Effects of the Environment


, DOUHDG\ GLVFXVVHG VRPH HIIHFWV RI HQYLURQPHQWV VXFK DV FRQFXUUHQW WKUHDGV WKH
RSHUDWLQJV\VWHPKDUGZDUHFRQFXUUHQWO\UXQQLQJVRIWZDUHDQGWKH0\64/VHUYHUDQG
FOLHQWRSWLRQVLQWKLVERRN%XWDTXHU\HYHQLILWLVUXQQLQJLQDVLQJOHFOLHQWFRQQHFWHG
WRDGHGLFDWHG0\64/VHUYHUFDQDOVREHDIIHFWHGE\WKHFRQWH[WLQZKLFKLWLVUXQ
:KHQ \RX FDOO D TXHU\ IURP D VWRUHG SURFHGXUH IXQFWLRQ WULJJHU RU HYHQW WKHVH
FRQWH[WVFDQRYHUULGHFXUUHQWVHVVLRQRSWLRQVZLWKWKHLURZQGHIDXOWV7KHUHIRUHLI\RX
HQFRXQWHUDSUREOHP\RXFDQ¦WH[SODLQWU\WKHVDPHTXHU\RXWVLGHRIWKHURXWLQH,IWKH
UHVXOWVDUHGLIIHUHQWFKHFNWKHURXWLQH¦VFKDUDFWHUVHWDQG64/PRGH([DPLQHWKHERG\
RIWKHURXWLQHWRFKHFNZKHWKHUDOOQHFHVVDU\REMHFWVH[LVWDQGZKHWKHUDYDULDEOHWKDW
FDQDIIHFWWKHTXHU\ZDVVHW$QRWKHUHQYLURQPHQWYDULDEOHWKDWPDWWHUVLVtime_zone
ZKLFKDIIHFWVWKHUHVXOWVRIWLPHIXQFWLRQVVXFKDVNOW()DQGCURDATE()
■ ,IDTXHU\GRHVQRWZRUNSURSHUO\FKHFNWKHHQYLURQPHQWLQZKLFKLWZDVFDOOHG

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
...

182 | Chapter 6:ಗTroubleshooting Techniques and Tools


The MySQL Sandbox, version 3.0.05
(C) 2006,2007,2008,2009 Giuseppe Maxia
installing with the following parameters:
upper_directory = /users/ssmirnova/sandboxes
...
........ sandbox server started
Your sandbox server was installed in
$HOME/sandboxes/msb_5_4_2

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

installing and starting master


installing slave 1
installing slave 2
starting slave 1
... sandbox server started
starting slave 2
....... sandbox server started
initializing slave 1
initializing slave 2
replication directory installed in $HOME/sandboxes/rsandbox_5_1_51

$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.

master [localhost] {msandbox} ((none)) > \q


Bye

$./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.

slave1 [localhost] {msandbox} ((none)) > SHOW SLAVE STATUS\G


*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 127.0.0.1
Master_User: rsandbox
Master_Port: 26366
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 1690
Relay_Log_File: mysql_sandbox26367-relay-bin.000002
Relay_Log_Pos: 1835
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 1690
Relay_Log_Space: 2003
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
1 row in set (0.00 sec)

slave1 [localhost] {msandbox} ((none)) > \q


Bye

$./stop_all
executing "stop" on slave 1
executing "stop" on slave 2
executing "stop" on master

184 | Chapter 6:ಗTroubleshooting Techniques and Tools


2QFHWKHVDQGER[LVUXQQLQJH[SHULPHQWZLWKLWVRSWLRQV
2QHJRUJHRXVDGYDQWDJHRIXVLQJWKH0\64/6DQGER[IRUDVLQJOHVHUYHULVZKHQ\RX
QHHG WR FRPSDUH PDQ\ HQYLURQPHQWV ,I \RX DUH ZRUNLQJ ZLWK RQO\ RQH YHUVLRQ RI
VRIWZDUHRQRQHW\SHRIV\VWHP\RXFDQMXVWORDGSURGXFWLRQGDWDIURPDEDFNXSRI
0\64/ RQWR \RXU GHYHORSPHQW PDFKLQH :LWK UHSOLFDWLRQ WKLV ZRXOG QRW ZRUN
EHFDXVH\RXZLOOQHHGDWOHDVWWZR0\64/LQVWDQFHV$QGDUHSOLFDWLRQVDQGER[FDQ
GUDPDWLFDOO\VDYHWLPHHYHQLI\RXGRQ¦WFDUHDERXWYHUVLRQVRUFXVWRPHQYLURQPHQWV
EHFDXVHLWWDNHVRQO\DFRXSOHRIPLQXWHVWRLQVWDOODQGVHWXSDVPDQ\0\64/LQVWDQFHV
DV\RXQHHG

7RROVIURP:RUNEHQFK8WLOLWLHVVHWFDQKHOSWRFUHDWHDVDQGER[FRS\
RI\RXUSURGXFWLRQGDWDEDVH
a,:' mysqldbcopy
&RSLHV D GDWDEDVH HLWKHU FUHDWLQJ D QHZ GDWDEDVH RQ WKH VDPH
VHUYHUXQGHUDGLIIHUHQWQDPHRUSODFLQJWKHGDWDEDVHRQDGLIIHUHQW
VHUYHUZLWKWKHVDPHQDPHRUDGLIIHUHQWRQH
mysqlreplicate
&RQILJXUHVDQGVWDUWVUHSOLFDWLRQDPRQJWZRVHUYHUV
mysqlserverclone
6WDUWVDQHZLQVWDQFHRIDUXQQLQJVHUYHU

Errors and Logs


$QRWKHULPSRUWDQWWURXEOHVKRRWLQJWHFKQLTXHVRXQGVVLPSOHUHDGDQGDQDO\]HLQIRU
PDWLRQIURPWKHVHUYHU7KLVLVDYHU\LPSRUWDQWVWHS,Q&KDSWHU,GLVFXVVHGWRROV
WKDWFDQKHOS\RXJHWDQGDQDO\]HLQIRUPDWLRQDORQJZLWKH[DPSOHV+HUH,ZDQWWR
DGGGHWDLOV,VNLSSHGEHIRUH

Error Information, Again


(UURUPHVVDJHVDUHNH\DQGVKRXOGQHYHUEHLJQRUHG<RXFDQILQGLQIRUPDWLRQDERXW
HUURUVLQWKH0\64/5HIHUHQFH0DQXDODWKWWSGHYP\VTOFRPGRFUHIPDQHQHUURU
KDQGOLQJKWPO7KLVSDJHOLVWVFOLHQWDQGVHUYHUHUURUPHVVDJHVEXWRPLWVPHVVDJHV
VSHFLILFWRDVWRUDJHHQJLQH1RUGRHVLWH[SODLQHUURUVWKDWFRPHIURPWKHRSHUDWLQJ
V\VWHP 6WULQJV RI LQIRUPDWLRQ GHVFULELQJ RSHUDWLQJ V\VWHP HUURUV FDQ EH GHULYHG
WKURXJKWKHSHUURUXWLOLW\ VHH£5HWULHYLQJ(UURU6WULQJV7KURXJKSHUURU¤RQSDJH 
$QRWKHUYHU\LPSRUWDQWWRROLVWKHP\VTOGHUURUORJILOHZKLFKFRQWDLQVLQIRUPDWLRQ
DERXWWDEOHFRUUXSWLRQVHUYHUFUDVKHVUHSOLFDWLRQHUURUVDQGPXFKPRUH$OZD\VKDYH
LWWXUQHGRQDQGDQDO\]HLWZKHQ\RXHQFRXQWHUDSUREOHP$ORJIURPDQDSSOLFDWLRQ
FDQQRWDOZD\VUHSODFHWKH0\64/VHUYHUHUURUORJEHFDXVHWKHODWWHUFDQFRQWDLQSURE
OHPVDQGGHWDLOVQRWYLVLEOHWRWKHDSSOLFDWLRQ

Errors and Logs | 185


Crashes
, GLVFXVVHG FUDVKHV DQG D JHQHUDO WURXEOHVKRRWLQJ VHTXHQFH DSSOLFDEOH WR WKHP LQ
£:KHQ WKH 6HUYHU 'RHV 1RW $QVZHU¤ RQ SDJH  6WDUW E\ XVLQJ WKH WHFKQLTXHV
GHVFULEHGLQWKHSUHYLRXVVHFWLRQORRNLQWKHHUURUORJILOHDQGDQDO\]HLWVFRQWHQW7KLV
ZRUNVLQPRVWFDVHVEXWWKLVVHFWLRQGLVFXVVHVZKDWWRGRLIWKHHUURUORJGRHVQRW
FRQWDLQHQRXJKLQIRUPDWLRQWRKHOS\RXWURXEOHVKRRWWKHFUDVK
7KHODWHVWYHUVLRQVRIWKH0\64/VHUYHUFDQSULQWDEDFNWUDFHHYHQLQUHOHDVHEXLOGV
7KHUHIRUHLIWKHHUURUORJILOHGRHVQRWFRQWDLQDEDFNWUDFHFKHFNZKHWKHUWKHP\VTOG
ELQDU\LVVWULSSHG 2Q8QL[VW\OHV\VWHPVWKHfileFRPPDQGZLOOUHSRUWZKHWKHUDQ
H[HFXWDEOHILOHLVVWULSSHG ,ILWLVUHSODFHWKHP\VTOGELQDU\ZLWKWKHRQHWKDWFDPH
ZLWK\RXU0\64/GLVWULEXWLRQ,I\RXEXLOWLW\RXUVHOIFRPSLOHDYHUVLRQZLWKV\PEROV
IRUXVHLQWHVWLQJ
■ &KHFNZKHWKHUWKHP\VTOGELQDU\FRQWDLQVV\PEROVHJLVQRWVWULSSHG
,Q VRPH FDVHV \RX PD\ QHHG WR UXQ D GHEXJ ELQDU\ 7KLV LV D ILOH QDPHG
P\VTOGGHEXJORFDWHGLQWKHELQGLUHFWRU\XQGHUWKH0\64/LQVWDOODWLRQURRW
7KHGHEXJELQDU\FRQWDLQVDVVHUWLRQVWKDWFDQKHOSWRFDWFKWKHSUREOHPDWDQHDUOLHU
VWDJH,QWKLVFDVH\RXSUREDEO\ZLOOJHWDEHWWHUHUURUPHVVDJHEHFDXVHWKHHUURUZLOO
EHFDXJKWZKHQWKHVHUYHUGRHVVRPHWKLQJZURQJUDWKHUWKDQZKHQDPHPRU\OHDN
RFFXUV 8VLQJ WKH UHOHDVH ELQDU\ \RX GRQ¦W JHW DQ HUURU PHVVDJH XQWLO WKH PHPRU\
OHDNDFWXDOO\OHDGVWRDFUDVK
7KHSULFHIRUXVLQJGHEXJELQDU\LVDSHUIRUPDQFHGHFUHDVH
,IWKHHUURUORJILOHGRHVQRWKDYHHQRXJKLQIRUPDWLRQDERXWWKHFUDVKWRKHOS\RXILQG
WKHVRXUFHRIWKHSUREOHPWU\WKHWZRPHWKRGVWKDWIROORZ,QDQ\FDVHDOZD\VZRUN
IURPHYLGHQFHDV,GLGZKHQGLVFXVVLQJWKHEDFNWUDFHIURPWKHHUURUORJILOHLQ£:KHQ
WKH6HUYHU'RHV1RW$QVZHU¤RQSDJH'RQ¦WMXVWPDNHLQWXLWLYHJXHVVHVEHFDXVH
LI \RX WU\ WR VROYH D SUREOHP XVLQJ D ZURQJ JXHVV \RX FDQ LQWURGXFH HYHQ PRUH
SUREOHPV
■ $OZD\VWHVW$Q\JXHVVFDQEHZURQJ

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

186 | Chapter 6:ಗTroubleshooting Techniques and Tools


ERRN([SHUW0\64/E\'U&KDUOHV$%HOO $SUHVV <RXFDQDOVRILQGXVHIXOLQIRU
PDWLRQLQWKHERRNV8QGHUVWDQGLQJ0\64/,QWHUQDOVE\6DVKD3DFKHY 2¦5HLOO\ DQG
0\64/3OXJLQ'HYHORSPHQWE\$QGUHZ+XWFKLQJVDQG6HUJHL*ROXEFKLN 3DFNW 
$WVRPHSRLQWRIFRXUVH\RXKDYHWRGLYHLQWRWKH0\64/VRXUFHFRGHLWVHOI
,ZRQ¦WGHVFULEHKRZWRGHDOZLWKFRUHILOHVKHUHLQGHWDLOEHFDXVHWKDWZRXOGUHTXLUH
DZKROHERRNDERXWWKH0\64/VRXUFHFRGHEXW,ZLOOVKRZDVPDOOH[DPSOH
7RHQDEOHWKHFUHDWLRQRIFRUHILOHVVWDUWP\VTOGZLWKWKH coreRSWLRQDQGDGMXVWWKH
RSHUDWLQJV\VWHPWRDOORZFRUHILOHVRIXQOLPLWHGVL]HWREHFUHDWHG'LIIHUHQWRSHUDWLQJ
V\VWHPVXVHGLIIHUHQWWRROVWRFRQWUROWKHFUHDWLRQRIFRUHILOHV)RUH[DPSOH6RODULV
XVHVFRUHDGPZKHUHDVRQP\0DF26;7LJHUER[,KDYHWRHGLWHWFKRVWFRQILJ2Q
:LQGRZV \RX VKRXOG KDYH GHEXJJLQJ V\PEROV IRU ERWK P\VTOG DQG WKH RSHUDWLQJ
V\VWHP2Q8QL[VW\OHV\VWHPVWKHVLPSOHVWPHWKRGLVWKHulimit -cFRPPDQGZKLFK
VKRXOG EH VHW WR unlimited EXW FRQVXOW \RXU 26 PDQXDO WR ILQG RXW LI \RX QHHG D
FRQILJXUDWLRQFKDQJHVRPHZKHUHHOVHWRR
$IWHUWKHFRUHILOHLVFUHDWHG\RXFDQDFFHVVLWVFRQWHQWXVLQJDGHEXJJHU,XVHgdbKHUH
EXWWKLVLVQRWUHTXLUHGXVH\RXUIDYRULWHGHEXJJHU
$gdb ../libexec/mysqld var/log/main.bugXXXXX/mysqld.1/data/core.21965

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]

warning: Can't read pathname for load map: Input/output error.


[Thread debugging using libthread_db enabled]
Core was generated by `/users/ssmirnova/build/mysql-5.1/libexec/mysqld
--defaults-group-suffix=.1 --de'.
Program terminated with signal 11, Segmentation fault.

Errors and Logs | 187


#0 0x00832416 in __kernel_vsyscall ()
(gdb)

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

General log file


$QRWKHUZD\WRFDWFKZKDWLVJRLQJRQLVWRXVHWKHWZRVROXWLRQV,PHQWLRQHGLQ£7RROV
7KDW &DQ %H &XVWRPL]HG¤ RQ SDJH  WKH JHQHUDO ORJILOH DQG WKH XVH RI D SUR[\
VROXWLRQ$VWKHFRQFHSWLVVLPLODUKHUH,¦OOVKRZKRZWRFDWFKHUURUVZLWKWKHJHQHUDO
TXHU\ORJDQGOHW\RXGHGXFHSUR[\VROXWLRQVRQ\RXURZQLI\RXGHFLGHWRXVHRQH,¦OO
XVHWKHH[DPSOHIURP£:KHQWKH6HUYHU'RHV1RW$QVZHU¤RQSDJHDJDLQEXWLQ
WKLVFDVH,¦OOUXQLWRQP\0DF%RRN7KHHUURUORJFRQWDLQV
091002 16:49:48 - mysqld got signal 10 ;
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.

188 | Chapter 6:ಗTroubleshooting Techniques and Tools


key_buffer_size=8384512
read_buffer_size=131072
max_used_connections=1
max_connections=100
threads_connected=1
It is possible that mysqld could use up to
key_buffer_size + (read_buffer_size + sort_buffer_size)*max_connections = 225784
K

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

Information-Gathering Tools | 189


<RX FDQ TXHU\ INFORMATION_SCHEMA WDEOHV OLNH DQ\ RWKHU WDEOH WKLV LV WKHLU JUHDW
DGYDQWDJHRYHURWKHUWRROV7KHRQO\SUREOHPLVWKDWINFORMATION_SCHEMAWDEOHVDUHQRW
RSWLPL]HGWRZRUNIDVWVRTXHULHVRQWKHPFDQEHVORZHVSHFLDOO\RQWDEOHVWKDWFRQWDLQ
LQIRUPDWLRQDERXWPDQ\REMHFWV
, ZRQ¦W GHVFULEH HDFK DQG HYHU\ WDEOH KHUH EHFDXVH WKH 0\64/ 5HIHUHQFH 0DQXDO
FRQWDLQVDJUHDWGHDORIGHWDLODERXWWKHLUVWUXFWXUH VHHKWWSGHYP\VTOFRPGRFUHI
PDQHQLQIRUPDWLRQVFKHPDKWPO ,QVWHDG,¦OOVKRZDIHZTXHULHVWRGHPRQVWUDWH
WKHVRUWRIXVHIXOLQIRUPDWLRQ\RXFDQJHWIURPWKHINFORMATION_SCHEMA<RX¦OOVWLOOQHHG
WKHXVHUPDQXDOIRUGHWDLOV,SXWWKHOLQNWRWKH0\64/5HIHUHQFH0DQXDOKHUH
EHFDXVH,PHQWLRQDIHZWDEOHVLQWURGXFHGLQWKLVYHUVLRQ
7RJHWDQLGHDRIZKDWFDQEHGRQHZLWK INFORMATION_SCHEMAOHW¦VVWDUWE\H[WUDFWLQJ
DQRYHUYLHZRIKRZPDQ\WDEOHVLQHDFKVWRUDJHHQJLQHDUHLQFXUUHQWXVH,¦PH[FOXGLQJ
WKHmysqlGDWDEDVHIURPWKHOLVWEHFDXVHDOOLWVWDEOHVDOZD\VXVHWKH0\,6$0VWRUDJH
HQJLQH
mysql> SELECT count(*), engine FROM tables WHERE table_schema !=
'mysql' GROUP BY engine;
+----------+--------------------+
| count(*) | engine |
+----------+--------------------+
| 255 | InnoDB |
| 36 | MEMORY |
| 14 | MyISAM |
| 17 | PERFORMANCE_SCHEMA |
+----------+--------------------+
4 rows in set (4.64 sec)

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

190 | Chapter 6:ಗTroubleshooting Techniques and Tools


*************************** 2. row ***************************
CONSTRAINT_SCHEMA: collaborate2011
CONSTRAINT_NAME: customers_bugs_ibfk_1
TABLE_SCHEMA: collaborate2011
TABLE_NAME: customers_bugs
*************************** 3. row ***************************
CONSTRAINT_SCHEMA: collaborate2011
CONSTRAINT_NAME: items_links_ibfk_1
TABLE_SCHEMA: collaborate2011
TABLE_NAME: items_links
*************************** 4. row ***************************
CONSTRAINT_SCHEMA: collaborate2011
CONSTRAINT_NAME: mysql_issues_ibfk_1
TABLE_SCHEMA: collaborate2011
TABLE_NAME: mysql_issues
*************************** 5. row ***************************
CONSTRAINT_SCHEMA: collaborate2011
CONSTRAINT_NAME: oracle_srs_ibfk_1
TABLE_SCHEMA: collaborate2011
TABLE_NAME: oracle_srs
5 rows in set (9.58 sec)

,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

InnoDB Information Schema Tables


:HDOUHDG\GLVFXVVHGWKH INNODB_TRX INNODB_LOCKSDQG INNODB_LOCK_WAITSWDEOHVLQ
£,1)250$7,21B6&+(0$ 7DEOHV¤ RQ SDJH  LQ WKH FRQWH[W RI FRQFXUUHQF\
WURXEOHVKRRWLQJ+HUH,¦OODOVRJLYHDTXLFNRYHUYLHZRIRWKHUWDEOHV
INNODB_TRXSURYLGHVDORWRIGHWDLODERXWFXUUHQWO\UXQQLQJWUDQVDFWLRQV<RXFDQXVH
LWHYHQZKHQORFNLQJDQGFRQFXUUHQF\DUHQRWDQLVVXHEXWLQWKHFRQWH[WRIORFNLQJ
SUREOHPV\RXFDQGRVXFKWKLQJVDVILQGWUDQVDFWLRQVWKDWUXQIRUORQJWLPH UHSODFH
'00:30:00'ZLWKDUHOHYDQWWLPHIRU\RXUVLWXDWLRQ 
SELECT TRX_ID, TRX_MYSQL_THREAD_ID FROM INNODB_TRX
WHERE TIMEDIFF(NOW(),TRX_STARTED) > '00:30:00';

<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';

Information-Gathering Tools | 191


7R JHW DQ RYHUYLHZ RI KRZ ODUJH \RXU WUDQVDFWLRQV DUH UHWULHYH WKH QXPEHU RI
URZV ORFNHG TRX_ROWS_LOCKED  WKH VL]H RI ORFN VWUXFWXUHV LQ PHPRU\
TRX_LOCK_MEMORY_BYTES RUWKHURZVPRGLILHG TRX_ROWS_MODIFIED 
SELECT TRX_ID, TRX_MYSQL_THREAD_ID, TRX_ROWS_MODIFIED
FROM INNODB_TRX ORDER BY TRX_ROWS_MODIFIED DESC;

<RX FDQ DOVR FKHFN WKH WUDQVDFWLRQ LVRODWLRQ OHYHO ZKHWKHU IRUHLJQ NH\ FKHFNV DUH
WXUQHGRQDQGRWKHULQIRUPDWLRQ

1RWH WKDW WUDQVDFWLRQV DSSHDU LQ INNODB_TRX RQO\ DIWHU WKH\


RSHQDQ,QQR'%WDEOH([FHSWLRQVDUHWUDQVDFWLRQVVWDUWHGZLWK START
TRANSACTION WITH CONSISTENT SNAPSHOTZKLFKKDVWKHVDPHHIIHFWDVD
START TRANSACTIONTXHU\IROORZHGE\DSELECTIURPHYHU\,QQR'%WDEOH

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\

192 | Chapter 6:ಗTroubleshooting Techniques and Tools


,WGRHVQ¦WPDWWHUZKLFKVWUXFWXUH\RXGHILQHIRUWKHVHWDEOHVRUZKDWGDWDEDVH\RXDGG
WKHPWRVRORQJDVWKH\XVHWKH,QQR'%VWRUDJHHQJLQH
7KHPRQLWRUVDUHWXUQHGRIIRQVKXWGRZQ7RUHHQDEOHWKHPRQVWDUWXS\RXQHHGWR
UHFUHDWHWKHWDEOHV3XWDROPDQGCREATEVWDWHPHQWVLQWR\RXUinit-fileRSWLRQLI\RX
ZDQWWKHPFUHDWHGDXWRPDWLFDOO\
7KHVWDQGDUGPRQLWRUFRQWDLQVVRPHWKLQJVLPLODUWRWKHRXWSXWWKDWIROORZVZKLFK
FRPHVIURPYHUVLRQRI0\64/,¦OOEUHDNXSWKHRXWSXWZLWKH[SODQDWLRQV
mysql> SHOW ENGINE INNODB STATUS\G
*************************** 1. row ***************************
Type: InnoDB
Name:
Status:
=====================================
110910 14:56:10 INNODB MONITOR OUTPUT
=====================================
Per second averages calculated from the last 7 seconds
-----------------
BACKGROUND THREAD
-----------------

$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

 innodb_monitor innodb_lock_monitor innodb_table_monitor DQG innodb_tablespace_monitor DUH QRW


VXSSRVHGWREHXVHGDVUHDOWDEOHVEXWLQVWHDGSURYLGHDPHWKRGWRWHOO,QQR'%WRZULWHGHEXJJLQJRXWSXW
LQWR STDERR$OWKRXJK\RXFDQXVHWKHPDVDQ\RWKHUWDEOHEHSUHSDUHGIRUWKHLUFRQWHQWWRGLVDSSHDU
DIWHUVHUYHUUHVWDUW

Information-Gathering Tools | 193


,QQR'%VWDUWXSVRLQIRUPDWLRQKHUHDERXWZDLWVGRHVQRWPHDQWKDWWKHUHDUHDFWXDO
ZDLWV<RXQHHGWRTXHU\WKH3HUIRUPDQFH6FKHPDRUFKHFNWKHPXWH[VWDWXVWRLGHQWLI\
ZKHWKHUZDLWVDUHRFFXUULQJDWWKHPRPHQW
OS WAIT ARRAY INFO: reservation count 519, signal count 476

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
----------

194 | Chapter 6:ಗTroubleshooting Techniques and Tools


OS WAIT ARRAY INFO: reservation count 1324, signal count 1246
--Thread 5680 has waited at buf0buf.c line 2766 for 0.00 seconds the semaphore:
Mutex at 038BE990 created file buf0buf.c line 1208, lock var 1
waiters flag 1
Mutex spin waits 1248, rounds 36397, OS waits 745
RW-shared spins 252, rounds 7560, OS waits 252
RW-excl spins 53, rounds 9750, OS waits 310
Spin rounds per wait: 29.16 mutex, 30.00 RW-shared, 183.96 RW-excl

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
--------

Information-Gathering Tools | 195


7KLVVWDUWVDVHFWLRQDERXWLQWHUQDO,QQR'%WKUHDGVWKDWSHUIRUPYDULRXV,2RSHUD
WLRQV<RXFDQXVHWKLVWRILQGRXWKRZPDQ\,2RSHUDWLRQV,QQR'%SHUIRUPV7KH
UDWHVVKRZKRZHIIHFWLYHWKH\DUH
I/O thread 0 state: waiting for i/o request (insert buffer thread)
I/O thread 1 state: waiting for i/o request (log thread)
I/O thread 2 state: waiting for i/o request (read thread)
I/O thread 3 state: waiting for i/o request (read thread)
I/O thread 4 state: waiting for i/o request (read thread)
I/O thread 5 state: waiting for i/o request (read thread)
I/O thread 6 state: waiting for i/o request (write thread)
I/O thread 7 state: waiting for i/o request (write thread)
I/O thread 8 state: waiting for i/o request (write thread)
I/O thread 9 state: waiting for i/o request (write thread)

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)

196 | Chapter 6:ಗTroubleshooting Techniques and Tools


7KLVVKRZVWKHQXPEHURIFHOOVLQWKHDGDSWLYHKDVKLQGH[WDEOHDQGWKHQXPEHURI
UHVHUYHGEXIIHUIUDPHV
0.00 hash searches/s, 40.71 non-hash searches/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

Information-Gathering Tools | 197


7KLVVKRZVWKHVL]HRIWKHEXIIHUSRROLQSDJHVDQGWKHQXPEHURIIUHHEXIIHUVLQLW+HUH
\RXFDQVHHWKDWWKHEXIIHULVIXOODQGLWPDNHVVHQVHWRLQFUHDVHLW,QWKLVFDVHLWZDV
VHWWRWKHGHIDXOWYDOXHRQP\PDFKLQHVR,KDYHURRPIRUDQLQFUHDVH
Database pages 3007
Old database pages 1090
Modified db pages 860

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

198 | Chapter 6:ಗTroubleshooting Techniques and Tools


7KLVOLQHVKRZVWKUHHUDWLRV7KHILUVWLVWKHUDWLRRIWKHQXPEHURISDJHVUHDGWRWKH
QXPEHURIEXIIHUSRROSDJHJHWV7KHVHFRQGLVWKHUDWLRRIWKHQXPEHURISDJHVPDGH
\RXQJWREXIIHUSRROSDJHJHWV7KHWKLUGLVWKHUDWLRRIWKHQXPEHURISDJHVQRWPDGH
\RXQJWREXIIHUSRROSDJHJHWV$OORIWKHVHYDOXHVDUHUHVHWHDFKWLPHWKH\DUHTXHULHG
Pages read ahead 0.00/s, evicted without access 0.00/s

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
============================

1 row in set (0.00 sec)

,GLVFXVVHGWKH,QQR'%/RFN0RQLWRULQ£6+2:(1*,1(,112'%67$786DQG
,QQR'%0RQLWRUV¤RQSDJHLQGHWDLOVR,ZRQ¦WVD\DQ\PRUHDERXWLWKHUH
7ZRPRQLWRUVDUHOHIWWRGLVFXVVWKH,QQR'%7DEOHVSDFH0RQLWRUDQGWKH,QQR'%
7DEOH0RQLWRU

Information-Gathering Tools | 199


7KH,QQR'%7DEOH0RQLWRUSULQWVWKHFRQWHQWVRIWKHLQWHUQDO,QQR'%GLFWLRQDU\<RX
FDQXVHWKLVPRQLWRUWRVHHKRZ,QQR'%VWRUHVDWDEOHIRUH[DPSOHLI\RXVXVSHFWLWLV
FRUUXSWHG6DPSOHRXWSXWORRNVOLNH
===========================================
110911 15:27:40 INNODB TABLE MONITOR OUTPUT
===========================================
--------------------------------------
TABLE: name collaborate2011/customers_bugs, id 1110, flags 1, columns 5, indexes 3,
appr.rows 0
COLUMNS: iid: DATA_INT DATA_BINARY_TYPE len 4; bugid: DATA_INT
DATA_BINARY_TYPE len 4; DB_ROW_ID: DATA_SYS prtype 256 len 6; DB_TRX_ID:
DATA_SYS prtype 257 len 6; DB_ROLL_PTR: DATA_SYS prtype 258 len 7;
INDEX: name GEN_CLUST_INDEX, id 2960, fields 0/5, uniq 1, type 1
root page 3, appr.key vals 0, leaf pages 1, size pages 1
FIELDS: DB_ROW_ID DB_TRX_ID DB_ROLL_PTR iid bugid
INDEX: name iid, id 2961, fields 2/3, uniq 2, type 2
root page 4, appr.key vals 0, leaf pages 1, size pages 1
FIELDS: iid DB_ROW_ID
FOREIGN KEY CONSTRAINT collaborate2011/customers_bugs_ibfk_1:
collaborate2011/customers_bugs ( iid )
REFERENCES collaborate2011/items ( id )
--------------------------------------
TABLE: name collaborate2011/items, id 1106, flags 1, columns 9, indexes 1,
appr.rows 5137
COLUMNS: id: DATA_INT DATA_BINARY_TYPE DATA_NOT_NULL len 4; short_description:
DATA_VARMYSQL len 765; description: DATA_BLOB len 10; example: DATA_BLOB len
10; explanation: DATA_BLOB len 10; additional: DATA_BLOB len 10; DB_ROW_ID:
DATA_SYS prtype 256 len 6; DB_TRX_ID: DATA_SYS prtype 257 len 6; DB_ROLL_PTR:
DATA_SYS prtype 258 len 7;
INDEX: name PRIMARY, id 2951, fields 1/8, uniq 1, type 3
root page 3, appr.key vals 5137, leaf pages 513, size pages 545
FIELDS: id DB_TRX_ID DB_ROLL_PTR short_description description example
explanation additional
FOREIGN KEY CONSTRAINT collaborate2011/community_bugs_ibfk_1: collaborate2011/
community_bugs ( iid )
REFERENCES collaborate2011/items ( id )
FOREIGN KEY CONSTRAINT collaborate2011/customers_bugs_ibfk_1: collaborate2011/
customers_bugs ( iid )
REFERENCES collaborate2011/items ( id )
FOREIGN KEY CONSTRAINT collaborate2011/items_links_ibfk_1: collaborate2011/
items_links ( iid )
REFERENCES collaborate2011/items ( id )
FOREIGN KEY CONSTRAINT collaborate2011/mysql_issues_ibfk_1: collaborate2011/
mysql_issues ( iid )
REFERENCES collaborate2011/items ( id )
FOREIGN KEY CONSTRAINT collaborate2011/oracle_srs_ibfk_1: collaborate2011/
oracle_srs ( iid )
REFERENCES collaborate2011/items ( id )

7KLVRXWSXWVKRZVLQIRUPDWLRQDERXWWKHWDEOHIURP([DPSOHDQGDQRWKHUIURP
WKHVDPHGDWDEDVH7KHRXWSXWLVUHDVRQDEO\VHOIH[SODQDWRU\DQGH[SODLQHGLQGHWDLO
LQWKH0\64/5HIHUHQFH0DQXDOVR,ZRQ¦WGHVFULEHWKHILHOGV,MXVWZDQWHGWRSXWLW
KHUHVR\RXDUHDFTXDLQWHGZLWKZKDWLWORRNVOLNH

200 | Chapter 6:ಗTroubleshooting Techniques and Tools


7KH,QQR'%7DEOHVSDFH0RQLWRUGLVSOD\VLQIRUPDWLRQDERXWWKHILOHVHJPHQWVLQWKH
VKDUHGWDEOHVSDFH7KLVLQIRUPDWLRQKHOSV\RXILQGSUREOHPVZLWKWDEOHVSDFHVVXFKDV
IUDJPHQWDWLRQRUFRUUXSWLRQ1RWHWKDWLI\RXXVHWKH innodb_file_per_tableRSWLRQ
LQIRUPDWLRQ DERXW LQGLYLGXDO WDEOHVSDFHV LV QRW GLVSOD\HG E\ WKLV PRQLWRU 6DPSOH
RXWSXWORRNVOLNHWKHIROORZLQJ
================================================
110911 20:33:50 INNODB TABLESPACE MONITOR OUTPUT
================================================
FILE SPACE INFO: id 0
size 5760, free limit 5440, free extents 51
not full frag extents 5: used pages 290, full frag extents 3
first seg id not used 857
SEGMENT id 1 space 0; page 2; res 1568 used 1339; full ext 20
fragm pages 32; free extents 0; not full extents 4: pages 27
SEGMENT id 2 space 0; page 2; res 1 used 1; full ext 0
fragm pages 1; free extents 0; not full extents 0: pages 0
SEGMENT id 3 space 0; page 2; res 1 used 1; full ext 0
fragm pages 1; free extents 0; not full extents 0: pages 0
...

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)

mysql> SELECT * FROM setup_instruments LIMIT 2;


+---------------------------------------------+---------+-------+
| NAME | ENABLED | TIMED |
+---------------------------------------------+---------+-------+
| wait/synch/mutex/sql/PAGE::lock | YES | YES |
| wait/synch/mutex/sql/TC_LOG_MMAP::LOCK_sync | YES | YES |
+---------------------------------------------+---------+-------+
2 rows in set (0.43 sec)

mysql> SELECT * FROM setup_timers;

Information-Gathering Tools | 201


+------+------------+
| NAME | TIMER_NAME |
+------+------------+
| wait | CYCLE |
+------+------------+
1 row 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)

mysql> SELECT * FROM RWLOCK_INSTANCES LIMIT 2\G


*************************** 1. row ***************************
NAME: wait/synch/rwlock/innodb/index_tree_rw_lock
OBJECT_INSTANCE_BEGIN: 503973272
WRITE_LOCKED_BY_THREAD_ID: NULL
READ_LOCKED_BY_COUNT: 0
*************************** 2. row ***************************
NAME: wait/synch/rwlock/innodb/index_tree_rw_lock
OBJECT_INSTANCE_BEGIN: 503813880
WRITE_LOCKED_BY_THREAD_ID: NULL
READ_LOCKED_BY_COUNT: 0
2 rows in set (0.08 sec)

mysql> SELECT * FROM MUTEX_INSTANCES LIMIT 2\G


*************************** 1. row ***************************
NAME: wait/synch/mutex/innodb/rw_lock_mutex
OBJECT_INSTANCE_BEGIN: 491583300
LOCKED_BY_THREAD_ID: NULL
*************************** 2. row ***************************
NAME: wait/synch/mutex/innodb/rw_lock_mutex
OBJECT_INSTANCE_BEGIN: 345609668
LOCKED_BY_THREAD_ID: NULL
2 rows in set (0.00 sec)

mysql> SELECT * FROM COND_INSTANCES LIMIT 2\G


*************************** 1. row ***************************
NAME: wait/synch/cond/innodb/commit_cond
OBJECT_INSTANCE_BEGIN: 10609120
*************************** 2. row ***************************
NAME: wait/synch/cond/sql/MYSQL_BIN_LOG::update_cond
OBJECT_INSTANCE_BEGIN: 35283728
2 rows in set (0.00 sec)

202 | Chapter 6:ಗTroubleshooting Techniques and Tools


7DEOHVZKRVHQDPHVEHJLQZLWKEVENT_WAITS_VWRUHLQIRUPDWLRQDERXWHYHQWV
mysql> SELECT COUNT(*), EVENT_NAME FROM EVENTS_WAITS_CURRENT GROUP
BY EVENT_NAME;
+----------+-----------------------------------------+
| count(*) | EVENT_NAME |
+----------+-----------------------------------------+
| 1 | wait/io/table/sql/handler |
| 6 | wait/synch/mutex/innodb/ios_mutex |
| 1 | wait/synch/mutex/innodb/kernel_mutex |
| 1 | wait/synch/mutex/innodb/log_sys_mutex |
| 1 | wait/synch/mutex/innodb/rw_lock_mutex |
| 1 | wait/synch/mutex/innodb/thr_local_mutex |
| 2 | wait/synch/mutex/sql/LOCK_thread_count |
+----------+-----------------------------------------+
7 rows in set (0.26 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)

SHOW [GLOBAL] STATUS


,DOUHDG\GLVFXVVHGVWDWXVYDULDEOHVUHODWHGWRFRQILJXUDWLRQRSWLRQVLQ&KDSWHU+HUH
,¦OO DGG VRPH LQIRUPDWLRQ DERXW RWKHU VWDWXV YDULDEOHV /LNH VHUYHU YDULDEOHV VWDWXV
YDULDEOHVFDQEHJOREDORUSHUVHVVLRQ:KHQDFOLHQWFRQQHFWVWKHVHVVLRQYDULDEOHVDUH

Information-Gathering Tools | 203


VHWWR]HUR*OREDOYDULDEOHVVKRZWKHVWDWXVVLQFHVHUYHUVWDUWXSRUVLQFHWKHPRVWUHFHQW
FLUSH STATUSTXHU\
:KHQ WURXEOHVKRRWLQJ ZLWK VWDWXV YDULDEOHV GRQ¦W MXVW ORRN DW LVRODWHG YDOXHV EXW
LQVWHDGIROORZWKHPRYHUWLPH2QHKXJHQXPEHULQLWVHOIPD\QRWPHDQDQ\WKLQJ
SHUKDSV\RX¦YHMXVWEHHQOXFN\HQRXJKWRH[SHULHQFH\HDUVRIXSWLPH,ILW¦VODUJHDQG
JURZLQJUDSLGO\WKRXJK\RXPLJKWEHVHHLQJV\PSWRPVRIDSUREOHP
:HUHFRPPHQGWRRXUFXVWRPHUVWRWDNH SHOW GLOBAL STATUSRXWSXWDWLQWHUYDOVRI
WRPLQXWHVGXULQJFULWLFDOORDGVDQGWRFRPSDUHWKHYDOXHVRIYDULDEOHVDWGLIIHUHQW
WLPHV7KLVLVWKHHDVLHVWZD\WRILQGPHDQLQJIXOLQIRUPDWLRQ
7KHIROORZLQJOLVWIRFXVHVLQRQSDUWLFXODUW\SHVRIVWDWXVYDULDEOHV
Com_*VWDWXVYDULDEOHV
7KHVH FRQWDLQ WKH QXPEHU RI VWDWHPHQWV LVVXHG RI YDULRXV W\SHV )RU LQVWDQFH
Com_selectVKRZVKRZPDQ\SELECTTXHULHVZHUHUXQDQGCom_beginVKRZVKRZ
PDQ\WUDQVDFWLRQVZHUHVWDUWHG
8VHWKHVHYDULDEOHVWRJHWDQRYHUYLHZRI\RXUORDG)RUH[DPSOHLI\RXKDYHDODUJH
Com_selectYDOXHZLWK]HURYDOXHVIRUCom_insertCom_updateDQGCom_delete\RX
FDQDGMXVWFRQILJXUDWLRQRSWLRQVWRIDYRUSELECTTXHULHV
Handler_*Select_*DQGSort_*YDULDEOHV
Handler_*YDULDEOHVVKRZZKDWKDSSHQVLQWKHWDEOHLQWHUQDOO\ZKHQDTXHU\LVUXQ
)RUH[DPSOH Handler_deleteVKRZVKRZPDQ\URZVZHUHDFWXDOO\GHOHWHG<RX
FDQXVHWKLVYDULDEOHWRZDWFKWKHSURJUHVVRIDDELETEWKDWLVFXUUHQWO\UXQQLQJRQ
DODUJHWDEOH
Select_*YDULDEOHVVKRZWKHQXPEHUVRIWKHYDULRXVNLQGVRIMRLQVWKDWDUHXVHG
Sort_*YDULDEOHVVKRZLQIRUPDWLRQDERXWVRUWV7KHVHFDQKHOS\RXILQGRXWKRZ
HIIHFWLYH\RXUTXHULHVDUHLQWHUPVRISHUIRUPDQFH
,GLVFXVVHGWKHVHYDULDEOHVLQ£4XHULHV7KDW0RGLI\'DWD¤RQSDJHVR,ZRQ¦W
VSHQGPRUHWLPHRQWKHPKHUHEXWWKH\ZDUUDQWGHWDLOHGVWXG\
Innodb_*YDULDEOHV
$VFDQEHJXHVVHGIURPWKHQDPHWKHVHYDULDEOHVVKRZWKHLQWHUQDOVWDWXVRIWKH
,QQR'%VWRUDJHHQJLQH6WXG\WKHPDQGKRZWKH\DUHDIIHFWHGE\YDULRXV,QQR'%
RSWLRQVLI\RXXVHWKLVVWRUDJHHQJLQH
Performance_schema_*YDULDEOHV
7KH SHUIRUPDQFH VFKHPD SURYLGHV LQIRUPDWLRQ DERXW WKRVH REMHFWV IRU ZKLFK
£LQVWUXPHQWDWLRQSRLQWV¤ZHUHFUHDWHGLQWKH0\64/VHUYHURUWKHVWRUDJHHQJLQH
VRXUFH FRGH 7KHVH YDULDEOHV VKRZ KRZ PDQ\ LQVWUXPHQWDWLRQV FRXOG QRW EH
ORDGHGRUFUHDWHG
Ssl_*YDULDEOHV
7KHVHVKRZVWDWLVWLFVDERXW66/FRQQHFWLRQV

204 | Chapter 6:ಗTroubleshooting Techniques and Tools


*open*DQG*create*YDULDEOHV
9DULDEOHVWKDWFRQWDLQWKHVHNH\ZRUGVVKRZKRZPDQ\REMHFWVRIYDULRXVNLQGV
ZHUHRSHQHGRUFUHDWHG
7KHSXUSRVHVRIRWKHUVWDWXVYDULDEOHVHLWKHUFDQEHGHGXFHGIURPWKHLUQDPHVRUFDQ
EHIRXQGLQ&KDSWHU

Localizing the Problem (Minimizing the Test Case)


, DOUHDG\ VKRZHG WKH YDOXH RI PLQLPL]LQJ D WHVW FDVH LQ £6LQJOH 6HUYHU ([DP
SOH¤RQSDJHZKHUH,UHGXFHGDQLQFRUUHFWSELECTWRDCREATE TABLEWKDWUHSURGXFHG
WKHZURQJSDUDPHWHUV+HUH,ZLOOGLVFXVVWKHSULQFLSOHRIDPLQLPDOWHVWFDVHLQPRUH
JHQHUDOWHUPV
$VDQH[DPSOHWDNHWKHIROORZLQJKXJHTXHU\
SELECT
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.FIELD7,
TABLE4.FIELD7) AS ALIAS1,

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

WHERE TABLE1.FIELD14 > DATE_sub(now(), INTERVAL 16 DAY)


and TABLE1.FIELD1 IN ('P', 'R','D')
AND TABLE1.DFIELD5 = TABLE4.FIELD5
AND TABLE1.FIELD15 = TABLE8.FIELD16
AND TABLE6.FIELD7 = TABLE8.FIELD17
AND TABLE4.FIELD18 = TABLE9.FIELD18
AND TABLE1.FIELD19 = TABLE7.FIELD19
AND TABLE1.FIELD20 = TABLE2.FIELD21
AND TABLE4.FIELD6 = TABLE11.FIELD7

GROUP BY TABLE4.FIELD6, FIELD9;

 7KLVH[DPSOHLVEDVHGRQ&RPPXQLW\EXJ

Localizing the Problem (Minimizing the Test Case) | 205


:HFDQLVRODWHWKHSUREOHPLQWRDVPDOOHUHTXLYDOHQW
SELECT
IF(T1.F1 = 'R', A1.F2, T2.F2) AS A4,
IF(T1.F1 = 'R' , A1.F3, T2.F3) AS F3,
SUM( IF ( (SELECT A7.F2
FROM T2 A7, T4 A2, T2 A3
WHERE
A7.F4 = A2.F10
AND A3.F2 = A4
LIMIT 1 ) IS NULL, 0, T3.F5)) AS A6

FROM T2, T3, T1


JOIN T2 A1 ON T1.F9 = A1.F4

GROUP BY A4;

:LWKWKLVHTXLYDOHQWLWLVYHU\HDV\WRWHVWDSUREOHP,QWKHIROORZLQJVHFWLRQ,GHVFULEH
KRZ,FUHDWHVXFKVPDOOWHVWFDVHVWKHQUHWXUQWRXVHFDVHV

General Steps to Take in Troubleshooting


+HUHDUHWKHVWHSV,WDNHWRORFDOL]HDSUREOHP7KH\DUHQ¦WSHUIHFWO\OLQHDUEHFDXVH
WKHUHDUHGLIIHUHQWSDWKVWRWDNHIRUGLIIHUHQWSUREOHPV%XWWKHVHTXHQFHFDQVHUYHDV
DFKHFNOLVW
7U\WRLGHQWLI\WKHDFWXDOTXHU\WKDWFDXVHVWKHSUREOHP
,¦YHGLVFXVVHGPDQ\ZD\VWRGHWHUPLQHWKHTXHU\RULQWKHFDVHRIDFRQFXUUHQF\
LVVXHWKHVHWRITXHULHVWKDWFDXVHWKHSUREOHPFROOHFWLYHO\2QFH\RXREWDLQWKH
TXHU\DQGLWVHQYLURQPHQW\RX¦UHKDOIZD\GRQH(LWKHUWKHSUREOHPLVUHSHDWDEOH
RULWKDVVRPHWKLQJWRGRZLWKFRQFXUUHQF\DQG\RXFDQLQYHVWLJDWHWKRVHLVVXHV
&KHFNWRPDNHVXUHWKHTXHU\¦VV\QWD[LVFRUUHFW
7KHHDVLHVWZD\WRGRWKLVLVWRUXQWKHTXHU\LQWKH0\64/&/,,IWKHTXHU\LV
V\QWDFWLFDOO\LQFRUUHFWLWZLOOUHWXUQDQHUURU,QHLWKHUFDVHRQFH\RXILJXUHRXW
ZKLFKSDUWRIWKHV\QWD[LVZURQJ\RXKDYHWKHVRXUFHRIWKHSUREOHP2WKHUZLVH
FRQWLQXHWRWKHQH[WVWHS
&RQILUPWKDWWKHSUREOHPLVLQWKHTXHU\
,IWKHSUREOHPLVDZURQJUHVXOWRUDSHUIRUPDQFHLVVXHFKHFNWRPDNHVXUHWKH
SUREOHPLVUHSHDWDEOHLQWKH0\64/&/,
<RXPD\QRWLFHWKDW,DPEUDQFKLQJRXWLQYDULRXVGLUHFWLRQVZKLOHOLVWLQJVWHSVWR
IROORZ7KHVHV\PSWRPVFDQQRWDOZD\VEHUHVROYHGWKURXJKDVLQJOHSDWKEHFDXVH
SUREOHPVGLIIHUDQGWKHPRVWHIIHFWLYHPHWKRGVWRILQGWKHFDXVHFDQYDU\
,IWKHTXHU\UHWXUQVZURQJGDWDWU\WRUHZULWHLWWRJHWFRUUHFWUHVXOWVLHWKRVHWKDW\RX
H[SHFWWRREWDLQ
,IWKHSUREOHPLVUHSHDWDEOHZLWKDVLQJOHTXHU\LWDOZD\VFDQEHUHZULWWHQWRUHIOHFW
\RXUQHHGV7KLVLVWKHWLPHZKHQ\RXFDQPDNH\RXUTXHU\VKRUWHUUHGXFHWKH
GDWDVHWDQGWHVW\RXUFKDQJHV:KHQPRGLI\LQJWKHTXHU\GRQRWPDNHWKHW\SLFDO

206 | Chapter 6:ಗTroubleshooting Techniques and Tools


PLVWDNHRIIRUFLQJDVLQJOHTXHU\WRSURGXFHWKHILQDOUHVXOW$RQHTXHU\VROXWLRQ
WR JHW WKH QHFHVVDU\ UHVXOW VHW LV QRW DOZD\V IDVWHU WKDQ D VHTXHQFH RI PXOWLSOH
TXHULHV
,IDUHZULWHGRHVQRWKHOSFKHFNWKHVHUYHURSWLRQVDQGWU\WRGHWHUPLQHZKHWKHUWKH\¦UH
DIIHFWLQJUHVXOWV
7KLVPHWKRGFDQEHXVHGWRJHWKHUZLWKWKHSUHYLRXVRQH([SHULHQFHGXVHUVNQRZ
ZKHQWRVXVSHFWWKHHIIHFWRIDFRQILJXUDWLRQRSWLRQ:KHQLQGRXEWWU\RSWLRQV
DIWHUVLPSOLI\LQJWKHTXHU\
,I\RXGHFLGHWKDWWKHTXHU\LVFRUUHFWJREDFNZDUGXQWLO\RXILQGDVWDWHPHQWRUDFWLRQ
WKDWFRUUXSWHGWKHGDWDRQZKLFKWKHTXHU\LVDFWLQJ
$IWHU\RXDUHVXUHWKHTXHU\LVDEVROXWHO\FRUUHFWDQGWKDWQRFRQILJXUDWLRQRSWLRQ
LVDIIHFWLQJLWVUHVXOWVWKHUH¦VQRORQJHUDQ\VHQVHLQEODPLQJWKHTXHU\&KHFNWKH
GDWDIRUFRUUXSWLRQDQGILQGRXWZKDWZDVRULJLQDOO\UHVSRQVLEOH7KLVFRXOGEHDQ
DSSOLFDWLRQRUH[WHUQDOIDFWRUVVXFKDVSK\VLFDOGLVNFRUUXSWLRQRUDPRGLILFDWLRQ
RIGDWDEDVHILOHVDWWKHRSHUDWLQJV\VWHPOHYHO
,I WKH SUREOHP LV QRW UHSHDWDEOH LQ WKH 0\64/ &/, H[DPLQH ZKHWKHU LW FRXOG EH D
FRQFXUUHQF\LVVXH
8VHDOOWKHPHDQVIURP&KDSWHUWRILQGRXWZKDWLVFDXVLQJWKHSUREOHP,VWDUW
IURPSHOW PROCESSLISTDQGILQLVKZLWKDSSOLFDWLRQOHYHOWHFKQLTXHV
,IWKHSUREOHPFDXVHVDFUDVKRUDKDQJFKHFNWKHHUURUORJILUVW
$OWKRXJKLQIRUPDWLRQDERXWWKHODWHVWFUDVKLVDWWKHHQGRIWKHORJXVHWKHIXOOILOH
DQGSD\DWWHQWLRQWRROGHUPHVVDJHVWRR7KH\FDQFRQWDLQLQIRUPDWLRQDERXWWDEOH
FRUUXSWLRQRUVLPLODULVVXHVWKDWRFFXUUHGLQWKHSDVWWKXVJLYLQJ\RXDEHWWHULGHD
DERXWZKDWLVJRLQJRQ
,IWKHHUURUORJILOHGRHVQ¦WJLYH\RXDFOXHWU\WRILQGWKHODVWTXHU\EHIRUHWKHFUDVK
$VGHVFULEHGHDUOLHU\RXFDQGRWKLVXVLQJWKHJHQHUDOTXHU\ORJDSSOLFDWLRQOHYHO
ORJJLQJRUDSUR[\
8VHmysqld-debugWRJHQHUDWHDFRUHILOHIURPDIDLOHGVHUYHUWKHQDQDO\]HLW
&RQQHFWDGHEXJJHUWRWKHUXQQLQJSURFHVVLIWKLVLVDUHSHDWDEOHKDQJQRWDFUDVK
$QDO\]HDQGDGMXVWFRQILJXUDWLRQRSWLRQV
2SWLRQVFDQFDXVHDKDQJRUFUDVKWRR$QDO\]HHYHU\SRVVLEOHRSWLRQWKDWFDQKDYH
DQHIIHFWDQGDGMXVWWKHPFRUUHVSRQGLQJO\
8VHRSHUDWLQJV\VWHPWRROVWRILQGRXWZKLFKH[WHUQDOSURFHVVFRXOGDIIHFWP\VTOG
$IWHU\RXWU\HYHU\WKLQJUHODWHGWRWKH0\64/VHUYHULWVHOIDQGDUHVXUHLWZRUNV
SURSHUO\FKHFNLWVHQYLURQPHQW
7KLVJHQHUDODFWLRQSODQVSOLWVDODUJHXQNQRZQLVVXHLQWRVPDOOHUSDUWVWKDWFDQEH
DQDO\]HGDQGVROYHG7KHH[HFXWLRQSDWKQHHGQRWDOZD\VEHIROORZHGLQRUGHUEHFDXVH
VRPHWLPHV\RXILQGWKHUHDVRQIRUDSUREOHPULJKWDZD\DQGFDQJRULJKWWRWKHIL[%XW
WKHRUGHUVKRZQZRUNVIRUFDVHVZKHQWKHFDXVHLVKDUGWRGHWHUPLQHDQG\RXQHHG
JXLGDQFHWRILQGLW,VNLSSHGWKHDFWXDOIL[HVEHFDXVHHDUOLHUSDUWVRIWKHERRNGLVFXVVHG
WKHPLQGHWDLO

General Steps to Take in Troubleshooting | 207


Minimizing the Test Case in Environments with Incomplete Information
)LQGLQJWKHVPDOOHVWWHVWFDVHIRUDSUREOHPLVDJHQHUDOVWUDWHJ\WKDW\RXFDQXVHLQ
PDQ\VLWXDWLRQVQRWMXVW64/DSSOLFDWLRQV
:KHQ,VWDUWHGZRUNLQJRQWKLVERRN,IRXQG,KDGQRWLQVWDOOHGWKH;0/SOXJLQIRU
P\IDYRULWHHGLWRU,RSHQHGWKHSOXJLQPDQDJHUDQGIRXQGWKDWPDQ\SOXJLQVZHUH
RXWRIGDWH
$QGKHUH,PDGHDPLVWDNH,GRZQORDGHGDQGLQVWDOOHGWKHPDOO
7KHH[DFWUHDVRQWKLVZDVDEDGLGHDLVWKDWP\IDYRULWHHGLWRUUXQVLQWKH-DYDYLUWXDO
PDFKLQHDQG,QHHGDQRXWGDWHGYHUVLRQRILWWRUXQDSURJUDPUHTXLUHGIRUP\GDLO\
WDVNV
%XWVLQFHODVW\HDUWKHHGLWRUDQGLWVSOXJLQVVZLWFKHGWRWKHODWHVWYHUVLRQRI-DYD6R
WKHQH[WWLPH,VWDUWHGWKHHGLWRU,JRWDORWRIHUURUVDERXWWKHZURQJYHUVLRQVRIWKH
SOXJLQDQGILQDOO\WKHSURJUDPKXQJ
,GLGQRWZDQWWRUHLQVWDOOHYHU\WKLQJEHFDXVH,GLGQRWZDQWWRORVHP\FXUUHQWVHWWLQJV
$QG,ZDVVXUHWKHVRXUFHRIWKHSUREOHPZDVRQHRIWKHSOXJLQVQRWWKHHGLWRULWVHOI
%XWKDYLQJLQVWDOOHGGR]HQVRISOXJLQV,¦GKDYHDKDUGWLPHGHWHUPLQLQJZKLFKRQH
SUHYHQWHGWKHHGLWRUIURPVWDUWLQJ
6R,RSHQHGWKHHGLWRU¦VRSWLRQVGLUHFWRU\DQGFRSLHGWKHFRQWHQWRIWKHSOXJLQVVXE
GLUHFWRU\WRDQRWKHUVDIHSODFH,ZDVVXUSULVHGWRVHHWKDWWKHHGLWRUVWLOOGLGQRWVWDUW
1H[W,GHWHUPLQHGZKLFKILOHVZHUHWRXFKHGZKHQ,KDGRSHQHGWKHHGLWRUWKHODVWWLPH
DQGPRYHGWKHPWRDQRWKHUVDIHSODFHWRR
7KLV WLPH WKH HGLWRU VWDUWHG DQG UHFUHDWHG LWV HQYLURQPHQW 7KLV ZDV JRRG EXW ,
ZDQWHGP\SUHIHUHQFHVEDFN
6R,VWDUWHGWRDGGWKHRSWLRQILOHVEDFNRQHE\RQHUHVWDUWLQJWKHHGLWRUDIWHUHDFKRQH
XQWLO,IRXQGWKHILOHWKDWZDVFRUUXSWHG)RUWXQDWHO\LWGLGQRWFRQWDLQWKHRSWLRQV,
ZDQWHGWRUHVWRUHVR,MXVWJRWULGRILWDQGOHWHGLWRUWKHUHFUHDWHLW
1RZWKHSOXJLQV¦WXUQFDPH,DJDLQDGGHGWKHPRQHE\RQHLQWRWKHGLUHFWRU\XQWLO,
VWDUWHGWRJHWHUURUV$IWHUH[DPLQLQJWKHPDOO,JRWP\LQVWDOODWLRQZRUNLQJDJDLQ
■ 7KHSULQFLSOHRIDPLQLPDOWHVWFDVHFDQEHXVHGHYHQLQHQYLURQPHQWVZKHUH\RX
KDYHOLPLWHGLQIRUPDWLRQ

Testing Methods
&UHDWLQJDPLQLPDOWHVWFDVHFDQFRQILUPWKHSUREOHPEXW\RXFDQGRHYHQPRUHZLWK
LW7KHPLQLPDOWHVWFDVHPDNHVLWHDV\WRSLQSRLQWWKHUHDVRQIRUWKHSUREOHP:KHQ
\RXORRNDWDJOINWKDWFRQQHFWVVHYHUDOWDEOHVZLWKFRPSOLFDWHGWHEREFRQGLWLRQVLW¦V
KDUGWRVD\ZKDWH[DFWO\LVZURQJ%XWUHGXFLQJWKHTXHU\WRDFRXSOHRIWDEOHVQDUURZV

208 | Chapter 6:ಗTroubleshooting Techniques and Tools


WKH SRVVLELOLWLHV GUDPDWLFDOO\ 6RPHWLPHV \RX IL[ WKH SUREOHP DORQJ WKH ZD\ ZKHQ
PLQLPL]LQJWKHTXHU\
■ 0LQLPL]LQJWKHWHVWFDVHXVXDOO\UHYHDOVDQGIL[HVWKHSUREOHP
,QWKLVVHFWLRQZH¦OOFRQVLGHUZKDWWRGRLI\RXFUHDWHWKHWHVWEXWFDQ¦WIL[WKHLVVXHRQ
\RXURZQ7KHUHFDQEHWZRUHDVRQVIRUWKLVDEXJLQWKH0\64/FRGHRUDPLVXQGHU
VWDQGLQJ RI KRZ VRPH IHDWXUH ZRUNV ,¦OO DVVXPH \RX DOUHDG\ UHDG WKH SDUWV RI WKH
0\64/5HIHUHQFH0DQXDOSHUWDLQLQJWRWKHSUREOHPDQGIRXQGQRDQVZHU7KHUHDUH
VWLOOVRPHUHVRXUFHV\RXFDQWU\

Try the Query in a Newer Version


7KHUHDVRQIRUWU\LQJDQHZHUYHUVLRQRI0\64/LVWKDWLQFDVH\RXUSUREOHPZDV
DFWXDOO\FDXVHGE\DEXJLQWKHVHUYHU\RXPD\ILQGWKDWLW¦VDOUHDG\IL[HG,QVWDOOLQJ
DQGXVLQJDQHZYHUVLRQRI0\64/PLJKWVRXQGFRPSOLFDWHG%XWLI\RXIROORZHGP\
DGYLFHLQ£6DQGER[HV¤RQSDJHDQGKDYHDVDQGER[LW¦VHDV\HVSHFLDOO\LI\RXXVH
DPLQLPDOGDWDVHWDQGFRPELQHWKHVDQGER[ZLWK\RXUPLQLPDOWHVWFDVH

Check for Known Bugs


,IWU\LQJDQHZHUYHUVLRQGRHVQRWZRUN\RXFDQFKHFNWKHEXJGDWDEDVHVIRUNQRZQ
EXJV<RXFRXOGHYHQFRQVLGHUVHDUFKLQJIRUDEXJUHSRUWEHIRUH\RXWU\WKHQHZYHUVLRQ
RI0\64/$V\RXHQFRXQWHUPRUHSUREOHPVDQGEHFRPHPRUHH[SHULHQFHG\RX¦OOJHW
DVHQVHRIZKLFKWRGRILUVW2QHVLPSOHUXOH\RXFDQIROORZLVWKLVLIWKHSUREOHPLV
UHSHDWDEOH ZLWK D GDWDVHW \RX FDQ HDVLO\ FUHDWH WU\ D QHZ YHUVLRQ RI 0\64/ ILUVW
RWKHUZLVHVHDUFKWKHEXJGDWDEDVHVILUVW
<RXFDQVWDUWWKHVHDUFKIURPWKHFRPPXQLW\EXJGDWDEDVH,I\RXDUHDQ2UDFOHFXV
WRPHU\RXFDQXVHWKHLQWHUQDOEXJGDWDEDVHLQVLGHWKHVXSSRUWSRUWDO,I\RXILQGD
FDVHWKDWVHHPVWRPDWFK\RXUVLWXDWLRQWKLVZLOOWHOO\RXZKHWKHULWZDVFRQVLGHUHGD
EXJDQGZKHWKHULWZDVDOUHDG\IL[HG
,I LW ZDV D EXJ HLWKHU GRZQORDG DQG WHVW WKH YHUVLRQ ZKHUH LW ZDV IL[HG RU ILQG D
ZRUNDURXQGXQWLOLWLVIL[HG,IWKHUHLVDNQRZQZRUNDURXQG\RX¦OOILQGLWDVDSXEOLF
FRPPHQW6HDUFKHQJLQHVDUHDOVRXVHIXOIRUILQGLQJDZRUNDURXQG
,IWKHSUREOHPZDVQRWFRQVLGHUHGDEXJWKHEXJUHSRUWZLOOSRLQWWRWKHSDUWRIWKH
0\64/5HIHUHQFH0DQXDOGHVFULELQJSURSHUXVDJH:HGRQ¦WH[SODLQLQGHWDLOZK\
RQHRUDQRWKHUIHDWXUHLVQRWDEXJEHFDXVHWKDWLVQRWWKHSXUSRVHRIWKH0\64/EXJ
GDWDEDVHEXWOHDUQLQJDERXWWKHSURSHUEHKDYLRURIWKH0\64/VRIWZDUHFDQKHOS\RX
ILQGDVROXWLRQ
,I\RXGRQ¦WILQGDSUREOHPLQWKHEXJGDWDEDVHVXVH\RXUIDYRULWHVHDUFKHQJLQHWRILQG
PHQWLRQVRIVLPLODUSUREOHPV$QGLI\RXVWLOOFDQQRWILQGDQ\WKLQJZURQJLQ\RXUORJLF
DQGWKHSUREOHPLVUHSHDWDEOHZLWKWKHODWHVWYHUVLRQRI0\64/LWLVWLPHWRUHSRUWDEXJ

Testing Methods | 209


Workarounds
,I WKH SUHYLRXV VHFWLRQV GLG QRW KHOS WR VROYH \RXU SUREOHP \RX FDQ WU\ FUHDWLQJ D
ZRUNDURXQG\RXUVHOI5HZULWH\RXUTXHU\WRH[FOXGHWKHSDUWVWKDWFDXVHWKHSUREOHP
DQGEUHDNWKHTXHU\GRZQLQWRVPDOOHUTXHULHVWKDWH[HFXWHFRUUHFWO\
7KHIROORZLQJH[DPSOHZKLFKLVEDVHGRQEXJQRZIL[HGLOOXVWUDWHVWKHFRQ
FHSW)LUVWZH¦OOORRNDWDVLPSOHYHUVLRQRIWKHLQFRUUHFWEHKDYLRUWKDWWULJJHUHGWKH
EXJUHSRUW
mysql> CREATE TABLE `t1` (
-> `id` BIGINT(20) NOT NULL AUTO_INCREMENT,
-> PRIMARY KEY (`id`)
-> ) ENGINE=MyISAM;
Query OK, 0 rows affected (0.04 sec)

mysql> CREATE TABLE `t2` (


-> `id` BIGINT(20) NOT NULL AUTO_INCREMENT,
-> `t1_id` BIGINT(20) DEFAULT NULL,
-> PRIMARY KEY (`id`)
-> ) ENGINE=MyISAM;
Query OK, 0 rows affected (0.04 sec)

mysql> INSERT INTO `t1` VALUES


(1),(2),(3),(4),(5),(6),(7),(8);
Query OK, 8 rows affected (0.00 sec)
Records: 8 Duplicates: 0 Warnings: 0
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

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 | 8 |
| NULL | 8 |
+-------+-----+
2 rows in set (0.01 sec)

: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;

210 | Chapter 6:ಗTroubleshooting Techniques and Tools


+-------+------+
| t1_id | id |
+-------+------+
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
+-------+------+
3 rows in set (0.00 sec)

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[

Special Testing Tools


:KHQ\RXWHVWDSUREOHPWKDWKDVPRUHWKDQRQHVROXWLRQVXFKDVDSHUIRUPDQFHLVVXH
RUWKHGHVLJQRI\RXU64/DSSOLFDWLRQ\RXQHHGWRWHVWKRZHDFKVXLWV\RXUQHHGV7KLV
VHFWLRQRIIHUVDTXLFNRYHUYLHZRIWRROVWKDWFDQKHOSLQVXFKWHVWLQJ

Benchmarking Tools
%HQFKPDUNLQJWRROVWHVWDQDSSOLFDWLRQ¦VVSHHG0\64/EHQFKPDUNLQJWRROVXVXDOO\
WHVW0\64/LQVWDOODWLRQVZKLFKLVQRWWKHVDPHDVWHVWLQJDQDSSOLFDWLRQEXWWKH\FDQ
VWLOOEHXVHIXOIRUWHVWLQJDSDUWLFXODUVHWRIRSWLRQV,IDEHQFKPDUNLQJWRRODOORZV\RX
WRXVHFXVWRPTXHULHVZULWWHQVSHFLDOO\IRU\RXUDSSOLFDWLRQ\RXDOVRFDQUXQWHVWVRQ
\RXURZQGDWDVHW

Special Testing Tools | 211


7KHPRVWSRSXODUEHQFKPDUNVIRU0\64/DUHV\VEHQFKDQGP\VTOVODS7KHIROORZLQJ
VXEVHFWLRQVGHVFULEHWKHP

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

1RWHWKDWLI\RXVSHFLI\WKH createRSWLRQIRU P\VTOVODSWKHVFKHPD


VSHFLILHGLQWKH create-schemaRSWLRQZLOOEHGURSSHG7KLVZLOODOVR
KDSSHQLI\RXXVHDP\VTOVODSROGHUWKDQRUHYHQLI\RX
GRQ¦WXVHWKHcreateRSWLRQ
■ 8VHWKLVWRRORQO\LQDQHZHPSW\VFKHPD

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

Creating table 'sbtest1'...


Inserting 1000000 records into 'sbtest1'

$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

212 | Chapter 6:ಗTroubleshooting Techniques and Tools


Running the test with following options:
Number of threads: 16
Random number generator seed is 0 and will be ignored

Threads started!

OLTP test statistics:


queries performed:
read: 1400154
write: 400044
other: 200022
total: 2000220
transactions: 100011 (50.84 per sec.)
deadlocks: 0 (0.00 per sec.)
read/write requests: 1800198 (915.16 per sec.)
other operations: 200022 (101.68 per sec.)

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()

print("Creating table 'test'")


db_query("CREATE TABLE test(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
f1 VARCHAR(255))")
print("Inserting 1000 rows")
for i = 1, 1000 do
db_query("INSERT INTO test(f1) VALUES(1000*rand(1000))")
end

Special Testing Tools | 213


end

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

Creating table 'test'


Inserting 1000 rows

$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

Running the test with following options:


Number of threads: 16
Random number generator seed is 0 and will be ignored

Threads started!

OLTP test statistics:


queries performed:
read: 100001
write: 0
other: 0
total: 100001
transactions: 0 (0.00 per sec.)
deadlocks: 0 (0.00 per sec.)
read/write requests: 100001 (37.08 per sec.)
other operations: 0 (0.00 per sec.)

General statistics:
total time: 2697.2491s
total number of events: 100001
total time taken by event execution: 43139.9169s
response time:
min: 7.54ms

214 | Chapter 6:ಗTroubleshooting Techniques and Tools


avg: 431.39ms
max: 2304.82ms
approx. 95 percentile: 913.27ms

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)

Special Testing Tools | 215


[INFO] 04:08:16 [1443] 25184256 - thread 0 connecting to host 0
[INFO] 04:08:16 [0957] 25183232 - writing server status variables to
'report_18098_host_00.txt'
[INFO] 04:08:16 [1456] 25184256 - thread 0 has 1 alive hosts connected
[INFO] 04:08:16 [1443] 25188352 - thread 1 connecting to host 0
[INFO] 04:08:16 [1456] 25188352 - thread 1 has 1 alive hosts connected
[INFO] 04:08:17 [0736] 2684407808 - completed spawning new database worker threads
[INFO] 04:08:28 [0777] 2684407808 - 02 threads running, 0030487 successful
queries. 0000000 failed queries (2540.583333 QPS).
[INFO] 04:08:39 [0777] 2684407808 - 02 threads running, 0059212 successful
queries. 0000000 failed queries (2393.750000 QPS).
[INFO] 04:08:50 [0777] 2684407808 - 02 threads running, 0084904 successful
queries. 0000000 failed queries (2141.000000 QPS).
[INFO] 04:09:01 [0777] 2684407808 - 02 threads running, 0110477 successful
queries. 0000000 failed queries (2131.083333 QPS).
[INFO] 04:09:12 [0777] 2684407808 - 02 threads running, 0133212 successful
queries. 0000000 failed queries (1894.583333 QPS).
[INFO] 04:09:23 [0777] 2684407808 - 02 threads running, 0148816 successful
queries. 0000000 failed queries (1300.333333 QPS).
[INFO] 04:09:34 [0777] 2684407808 - 02 threads running, 0165359 successful
queries. 0000000 failed queries (1378.583333 QPS).
[INFO] 04:09:45 [0777] 2684407808 - 02 threads running, 0178743 successful
queries. 0000000 failed queries (1115.333333 QPS).
[ALWAYS] 04:09:56 [0792] 2684407808 - waiting for threads to finish
[INFO] 04:09:56 [0808] 2684407808 - running cleanup queries
[INFO] 04:09:56 [1443] 25188352 - thread 0 connecting to host 0
[INFO] 04:09:56 [1456] 25188352 - thread 0 has 1 alive hosts connected
[WARN] 04:09:56 [2182] 25188352 - thread[00] didn't complete entire query file.
Might need longer --duration=
[INFO] 04:09:56 [0835] 2684407808 - now about to tell stats thread to exit
[INFO] 04:09:56 [0842] 2684407808 - now about to tell data generation thread to exit
[ALWAYS] 04:09:56 [0884] 2684407808 - done!!!
[ALWAYS] 04:09:56 [0885] 2684407808 - press a key to continue!!

MySQL Test Framework


7KH0\64/7HVW)UDPHZRUNLVDOVRFDOOHG075ZKLFKLVDQDEEUHYLDWLRQRILWVPDLQ
FRPPDQGP\VTOWHVWUXQ,WLVDWHVWDXWRPDWLRQSDFNDJHXVHGE\0\64/GHYHORSHUV
DQGLVDYDLODEOHLQDOOIXOO0\64/SDFNDJHV,QFRQFHSWLW¦VVLPLODUWRXQLWWHVWLQJ,W
LQYROYHVWHVWFDVHVHDFKRIZKLFKLVDSDLUFRQVLVWLQJRIDWHVWDQGDUHVXOWILOH7HVWILOHV
FRQWDLQVHWVRI0\64/TXHULHVDORQJZLWKVSHFLDO075FRPPDQGVDQGUHVXOWILOHV
FRQWDLQWKHH[SHFWHGUHVXOWV
+HUH¦VDQH[DPSOHRIDWHVWILOHWKDWFUHDWHVDWDEOHLQVHUWVRQHURZDQGWKHQVHOHFWVLW
--source include/have_innodb.inc

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;

216 | Chapter 6:ಗTroubleshooting Techniques and Tools


/HW¦VVXSSRVH\RX¦YHVWRUHGWKLVLQDILOHQDPHGERRNWHVWLQ075¦VWVXEGLUHFWRU\,I
\RXDUHVXUH\RXUYHUVLRQRI0\64/ZRUNVILQH\RXFDQDXWRPDWLFDOO\UHFRUGDUHVXOW
ILOHE\LVVXLQJ
$./mtr --record book
Logging: ./mtr --record book
110915 3:58:38 [Warning] Setting lower_case_table_names=2 because file system
for /tmp/PrqusdwLQa/ is case insensitive
110915 3:58:39 [Note] Plugin 'FEDERATED' is disabled.
110915 3:58:39 [Note] Plugin 'ndbcluster' is disabled.
MySQL Version 5.1.60
Checking supported features...
- skipping ndbcluster
- SSL connections supported
- binaries are debug compiled
Collecting tests...
vardir: /users/apple/bzr/mysql-5.1/mysql-test/var
Checking leftover processes...
Removing old var directory...
Creating var directory '/users/apple/bzr/mysql-5.1/mysql-test/var'...
Installing system database...
Using server port 56970

==============================================================================

TEST RESULT TIME (ms)


------------------------------------------------------------

worker[1] Using MTR_BUILD_THREAD 300, with reserved ports 13000..13009


main.book [ pass ] 124
------------------------------------------------------------
The servers were restarted 0 times
Spent 0.124 of 20 seconds executing testcases

Completed: All 1 tests were successful.

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

Special Testing Tools | 217


$./mtr --suite=./suite/book book
Logging: ./mtr --suite=book book
110915 4:05:29 [Warning] Setting lower_case_table_names=2 because file system
for /tmp/7npx97ZLbz/ is case insensitive
110915 4:05:29 [Note] Plugin 'FEDERATED' is disabled.
110915 4:05:29 [Note] Plugin 'ndbcluster' is disabled.
MySQL Version 5.1.60
Checking supported features...
- skipping ndbcluster
- SSL connections supported
- binaries are debug compiled
Collecting tests...
vardir: /users/apple/bzr/mysql-5.1/mysql-test/var
Checking leftover processes...
Removing old var directory...
Creating var directory '/users/apple/bzr/mysql-5.1/mysql-test/var'...
Installing system database...
Using server port 56998

==============================================================================

TEST RESULT TIME (ms)


------------------------------------------------------------

worker[1] Using MTR_BUILD_THREAD 300, with reserved ports 13000..13009


book.book [ pass ] 72
------------------------------------------------------------
The servers were restarted 0 times
Spent 0.072 of 12 seconds executing testcases

Completed: All 1 tests were successful.

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

218 | Chapter 6:ಗTroubleshooting Techniques and Tools


3HUFRQD7RRONLW
7KLVWRRONLWDYDLODEOHIURP3HUFRQDZDVSXWWRJHWKHUIURPWKH$VSHUVDDQG0DDW
NLWGLVWULEXWLRQV,WFRQWDLQVDORWRISRZHUIXOLQVWUXPHQWVWRFRQWUROWKHVHUYHUDQG
LWVWDEOHV
0\64/:%8WLOLWLHV
$OWKRXJKWKH\DUHSDUWRIWKH0\64/:RUNEHQFKLQVWDOODWLRQWKHVHUXQIURPWKH
FRPPDQGOLQH7KH\DUHLQGHSHQGHQWIURP0\64/:RUNEHQFKDQGFDQEHUXQ
RQ SODWIRUPV WKDW GRQ¦W UXQ 0\64/ :RUNEHQFK 7KH WRROV DUH ZULWWHQ LQ WKH
3\WKRQODQJXDJH7KH\ZRUNPRVWO\ZLWKGDWDEDVHVWUXFWXUHQRWZLWKGDWDDQG
FDQKHOSDXWRPDWHSURFHVVHVVXFKDVUHSOLFDWLRQVHWXSDQGJUDQWPLJUDWLRQ
0RQLWRULQJWRROV
,WLVYHU\LPSRUWDQWWRPRQLWRU\RXUV\VWHPIRUVWDWLVWLFVUHODWHGWRLWVGD\WRGD\
RSHUDWLRQ +HUH , GHVFULEH WZR WRROV WKDW FDQ KHOS \RX PRQLWRU D 0\64/
LQVWDOODWLRQ
0\64/(QWHUSULVH0DQDJHU
7KH 0\64/ WHDP SURYLGHV 0\64/ (QWHUSULVH 0DQDJHU 0(0  IRU
PRQLWRULQJSXUSRVHV
0(0LVFRPPHUFLDOVRIWZDUHDYDLODEOHIRU(QWHUSULVHFXVWRPHUV,WUXQVDVD
VHUYHURQDGHGLFDWHGPDFKLQHDORQJZLWKOLJKWZHLJKWDJHQWVWKDWVKRXOGUXQ
RQWKHVDPHPDFKLQHDVWKHRQHZKHUHWKHPRQLWRUHG0\64/VHUYHULVUXQQLQJ
7KHVHDJHQWVFROOHFWLQIRUPDWLRQDERXWERWK0\64/DQGWKHRSHUDWLQJV\VWHP
DQGVHQGLWWR0(0VHUYHU7KURXJKDZHEEDVHG*8,D'%$FDQJHWDJUDSK
LFDORYHUYLHZRIZKDWLVJRLQJRQDFURVVPXOWLSOHVHUYHUV0(0DOVRVXJJHVWV
LPSURYHPHQWVLQVHUYHUVHWXS
<RXFDQUHDGDERXW0(0LQGHWDLOLQWKHERRN0\64/+LJK$YDLODELOLW\E\
&KDUOHV%HOOHWDO 2¦5HLOO\ RULQWKHRIILFLDOGRFXPHQWDWLRQ
GLPB67$7
GLPB67$7LVDWRROIRUPRQLWRULQJSHUIRUPDQFHRI8QL[/LQX[DQG6RODULV
V\VWHPV,WFROOHFWVRXWSXWUHFHLYHGIURPRSHUDWLQJV\VWHPPRQLWRULQJWRROV
VXFKDVYPVWDWDQGLRVWDWKDVLWVRZQSOXJLQVWKDWFROOHFWGLIIHUHQWVWDWLVWLFV
GUDZVJUDSKVDQGPXFKPRUHGLPB67$7VXSSRUWVPXOWLSOHKRVWV
GLPB67$7DOVRKDV0\64/DGGRQVWKDWPRQLWRU0\64/DQG,QQR'%XVDJH
<RXFDQH[DPLQHVWDWLVWLFVDQGVHHJUDSKVXVLQJDZHEEDVHG*8,GLPB67$7
DOVRKDVD&/,VROXWLRQWKDWFDQJHQHUDWHDVLQJOHJUDSKLQ31*IRUPDWIRUD
JLYHQGDWDEDVHFROOHFW,'DQGWLPHLQWHUYDO
<RXFDQGRZQORDGGLPB67$7IURPKWWSGLPLWULNIUHHIU

Maintenance Tools | 219


CHAPTER 7
Best Practices

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

222 | Chapter 7:ಗBest Practices


%\LQWHUDFWLRQZLWKWKH0\64/VHUYHUREMHFWV
&ROG
7DNHQZKHQQRRSHUDWLRQLVDOORZHGIRUWKH0\64/VHUYHU7KHVHUYHUVKRXOG
EHHLWKHUVWRSSHGRUEORFNHGIURPPRGLI\LQJLWVRZQILOHV7KHDGYDQWDJHRI
VXFKEDFNXSVLVWKDWWKH\DUHH[WUHPHO\IDVW
:DUP
7DNHQ ZKHQ WKH 0\64/ VHUYHU LV UXQQLQJ DQG SURKLELWLQJ RQO\ D IHZ
RSHUDWLRQVRQWKHREMHFWVEHLQJEDFNHGXS,WLVQRWDOZD\VSRVVLEOHWRKDYHD
FRQVLVWHQWEDFNXSLISDUDOOHOWKUHDGVXVHGDWDEDVHREMHFWVVRDOOEDFNXSPHWK
RGVXVHVRPHNLQGRILQWHOOLJHQFHWRNHHSREMHFWVEHLQJEDFNHGXSVHFXUH7KLV
PHWKRG LQYROYHV ZULWH ORFNLQJ RQO\ WKH REMHFWV FXUUHQWO\ EHLQJ EDFNHG XS
ZKLOHDOORZLQJRWKHUFRQQHFWLRQVWRPRGLI\RWKHUREMHFWV5HDGDFFHVVLVXVX
DOO\DOVRDOORZHGGXULQJWKLVNLQGRIEDFNXS
+RW
7DNHQZKHQWKH0\64/VHUYHULVUXQQLQJDQGDOORSHUDWLRQVRQEDFNHGXS
REMHFWVDUHDOORZHG7KLVLVWKHIDVWHVWPHWKRGDPRQJRQOLQHEDFNXSV
%\FRQWHQW
)XOO
%DFNVXSDOOREMHFWV
,QFUHPHQWDO
%DFNVXSFKDQJHVPDGHDIWHUDSDUWLFXODUWLPHXVXDOO\WKHWLPHRIDSUHYLRXV
EDFNXS
3DUWLDO
&RSLHVRQO\VSHFLILFREMHFWVHJDIHZWDEOHVIURPDGDWDEDVH

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

Gathering the Information You Need


,QIRUPDWLRQLVWKHNH\WRVXFFHVVIXOWURXEOHVKRRWLQJ,QDGGLWLRQWRXVLQJLWIRU\RXU
RZQWURXEOHVKRRWLQJLWLVFULWLFDOZKHQ\RXRSHQDVXSSRUWFDVH6RGRQ¦WLJQRUHWKH
VRXUFHVDQGLQVWUXPHQWVWKDWFROOHFWUHSRUWVDERXWSUREOHPVVXFKDVWKHHUURUORJ
7KDWVDLG\RXFDQ¦WORJHYHU\WKLQJDOOWKHWLPH/RJJLQJSXWVDEXUGHQRQ\RXUVHUYHU
6R\RXQHHGWRILQGDEDODQFHEHWZHHQWKHLQIRUPDWLRQWKDWQHHGVWREHVDYHGDOOWKH
WLPHDQGWKHLQIRUPDWLRQ\RXFDQLJQRUHXQWLODUHDOSUREOHPKDSSHQV
,UHFRPPHQG\RXDOZD\VWXUQRQLQVWUXPHQWVWKDWGRQRWQHHGDORWRIUHVRXUFHVVXFK
DV WKH HUURU ORJILOH DQG RSHUDWLQJ V\VWHP ORJV /RJJLQJ RSWLRQV WKDW UHTXLUH OLJKW
UHVRXUFHVVXFKDV0(0ZLWKRXWWKHTXHU\DQDO\]HUFDQEHUXQQLQJFRQVWDQWO\WRR,W
LVQRWWKULIW\WRWU\WRVKDYHDOLWWOHORDGRII\RXUVHUYHUE\WXUQLQJRIIWKHVHLQVWUXPHQWV
DQGJLYLQJXSWKHKHOSWKH\ZLOORIIHUGXULQJDFULWLFDOSUREOHP

224 | Chapter 7:ಗBest Practices


:LWKUHJDUGWRUHSRUWLQJWRROVWKDWFDQGHFUHDVHSHUIRUPDQFHQRWLFHDEO\EHSUHSDUHG
WRXVHWKHPEXWWXUQWKHPRIIXQWLODSUREOHPILUHVXS8VHRIWKHVHLQVWUXPHQWVFDQ
EHLPSOHPHQWHGDVDQRSWLRQLQWKHDSSOLFDWLRQ

What Does It All Mean?


(YHQJLJDE\WHVRILQIRUPDWLRQDUHXVHOHVVLI\RXGRQ¦WXQGHUVWDQGLW6RUHDGWKHHUURU
PHVVDJHVVXJJHVWLRQVIURP0(0DQGVRRQ,I\RXGRQ¦WXQGHUVWDQGWKHPUHIHUWR
WKH0\64/5HIHUHQFH0DQXDOERRNVEORJVIRUXPVRURWKHUVRXUFHVRILQIRUPDWLRQ
$VHDUFKHQJLQHLVDJRRGFRPSDQLRQ-XVWW\SLQJDQHUURUPHVVDJHLQWRDVHDUFKILHOG
XVXDOO\WXUQVXSORWVRIOLQNVFRQWDLQLQJLQIRUPDWLRQDERXWKRZRWKHUXVHUVVROYHGD
VLPLODUSUREOHP,QPRVWFDVHV\RXDUHQRWDORQH
2IFRXUVH\RXFDQDOZD\VDVNTXHVWLRQVRQSXEOLFIRUXPVDQG,5&$QGILQDOO\\RX
FDQEX\VXSSRUW

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\

226 | Chapter 7:ಗBest Practices


Think About It!
,ZDQWWRILQLVKWKLVERRNE\VWUHVVLQJWKHLPSRUWDQFHRIUHDVRQLQJ7KHDELOLW\WRILQG
WKHFDXVHVRISUREOHPVFRPHVQRWRQO\IURPSUDFWLFHEXWDOVRIURPWKHVNLOORIDQDO\]LQJ
SUREOHPV
,I\RXHQFRXQWHUDSUREOHP,UHFRPPHQG\RXWKLQNLWRYHUWKRURXJKO\EHIRUHFKRRVLQJ
WKHWURXEOHVKRRWLQJWHFKQLTXHV\RXEHOLHYHDUHEHVWVXLWHGWRWKDWSDUWLFXODULVVXH
&KRRVLQJDJRRGDFWLRQSDWKDWWKHILUVWVWHSZLOOVDYH\RXPXFKWLPH$QGDWKRURXJK
GLDJQRVLVFDQSUHYHQWQRWRQO\WKHLVVXH\RXQRWLFHGULJKWDZD\EXWDOVRRWKHUIXWXUH
SUREOHPVVWHPPLQJIURPWKHVDPHFDXVH

Think About It! | 227


APPENDIX
Information Resources

7KURXJKRXWWKLVERRN,KDYHSRLQWHGWRJRRGVRXUFHVRILQIRUPDWLRQWKDWFDQKHOS
GXULQJWURXEOHVKRRWLQJ+HUHLVVKRUWOLVWRIWKHPJURXSHGE\XVDJHW\SH$VDOZD\V
,SUHIHUWKRVH,SHUVRQDOO\XVHGDLO\

Resources Containing Information That Is Usually Useful


7KHRIILFLDO0\64/5HIHUHQFH0DQXDO
7KLV LV WKH ILUVW SODFH WR JR IRU LQIRUPDWLRQ EHFDXVH LW GRFXPHQWV KRZ RQH RU
DQRWKHUIHDWXUHLVVXSSRVHGWRZRUN
6HDUFKHQJLQHV
,I\RXFDQ¦WILQGHQRXJKGHWDLOLQWKH0\64/5HIHUHQFH0DQXDOWU\\RXUIDYRULWH
VHDUFKHQJLQH,QPRVWFDVHV\RXFDQFRS\DQGSDVWHDQHUURUPHVVDJHDQGJHWORWV
RILQIRUPDWLRQDERXWWKHSUREOHP7KHSODQHW(DUWKLVUHDOO\VPDOODQGLWLVKDUG
WRFDWFKDWUXO\XQLTXHSUREOHP

Bug and Knowledge Databases


7KH&RPPXQLW\%XJ'DWDEDVH
,I\RXGRQ¦WXQGHUVWDQG0\64/¦VEHKDYLRUDQGEHOLHYHLWLVEHKDYLQJLQFRUUHFWO\
VHDUFK WKH EXJ GDWDEDVH <RX ZLOO SUREDEO\ ILQG D UHSRUW ZLWK WKH YHU\ VDPH
SUREOHP,I\RXXVHDQROGYHUVLRQRI0\64/\RXFDQHYHQILQGRXWZKHWKHUWKH
SUREOHPLVIL[HG
2UDFOH&XVWRPHUV¦%XJ'DWDEDVH
2UDFOH WUDFNV EXJV UHSRUWHG LQWHUQDOO\ RU E\ FXVWRPHUV XVLQJ LWV LQWHUQDO EXJ
GDWDEDVH,I\RXDUHDQ2UDFOHFXVWRPHU\RXFDQDFFHVVLWDQGILQGEXJVWKDWZHUH
QRWUHSRUWHGE\WKHFRPPXQLW\7KLVGDWDEDVHPRVWO\FRQWDLQVUHDOEXJVDQG\RX
UDUHO\PHHWUHSRUWVFORVHGDV£1RWD%XJ¤WKHUHEHFDXVHWKH\JRWKRXJKDFDUHIXO
FKHFNEHIRUHWKH\DUHLQFOXGHG

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

Expert Knowledge Online


,I\RXDUHVHDUFKLQJIRUDGHWDLOHGDUWLFOHDERXWRQHRUDQRWKHUIHDWXUHWU\WKHIROORZLQJ
UHVRXUFHV
0\64/)RUJH
7KLV KDV LQIRUPDWLRQ DERXW 0\64/ LQWHUQDOV SOXJLQ GHYHORSPHQW SXEOLF
ZRUNORJVDQGFRPPXQLW\SURMHFWV<RXFDQILQGZLNLVGHVFULELQJWKHLQWHUQDOVRI
PDQ\IHDWXUHV0\64/LQWHUQDOVGRFXPHQWDWLRQFRPPXQLW\DGGRQVDQGSXEOLF
ZRUNORJV SODQVIRU0\64/GHYHORSPHQWLQIXWXUHYHUVLRQV 
0\64/3ODQHW
7KLVLVDQDJJUHJDWRURI(QJOLVKODQJXDJHEORJVDERXW0\64/$OOEORJVEHORQJLQJ
WRDFWLYHFRPPXQLW\PHPEHUVDUHFRPELQHGWKHUH<RXFDQILQGSRVWVWKDWGHVFULEH
RQHRUDQRWKHUIHDWXUHLQGHWDLODQGSRVWVWKDWJRGHHSLQWRLQWHUQDOV7KLVLVDJUHDW
VRXUFH IRU ILQGLQJ LQIRUPDWLRQ DERXW 0\64/ LQ D VLQJOH SODFH 7KHUH DUH DOVR
ODQJXDJHVSHFLILF 0\64/ 3ODQHWV FKHFN ZKHWKHU RQH H[LVWV IRU \RXU QDWLYH
ODQJXDJH
,ZDQWWRKLJKOLJKWWZRRIWKHEORJV\RXFDQILQGRQWKLVVLWH
0\64/3HUIRUPDQFH%ORJ
7KLV EORJ LV ZULWWHQ E\ 3HUFRQD HQJLQHHUV DQG FRQWDLQV D JUHDW DPRXQW RI
LQIRUPDWLRQ DERXW SHUIRUPDQFH WXQLQJ 7KLV LV WKH ILUVW VRXUFH \RX VKRXOG
FKHFNLI\RXUXQLQWRDSHUIRUPDQFHSUREOHP
,QQR'%7HDP%ORJ
$VFDQEHJXHVVHGIURPWKHQDPHWKLVLVDEORJZULWWHQE\PHPEHUVRIWKH
,QQR'%WHDP7KHUH\RXFDQILQGGHWDLOVDERXW,QQR'%GHYHORSPHQWXVDJH
WLSVIRUQHZIHDWXUHVDQGLQWHUQDOV7KLVLVUHDOO\JUHDWUHVRXUFHIRUWKRVHZKR
XVHWKH,QQR'%VWRUDJHHQJLQH

Places Where You Can Ask for Help


)RUXPVFRPPXQLWLHVDQGXVHUJURXSV
,GRQ¦WVXSSO\OLQNVWRSDUWLFXODUIRUXPVEHFDXVHWKHUHDUHVRPDQ\<RXFDQVWDUW
IURPWKH0\64/IRUXPRUXVH\RXUIDYRULWHORFDOIRUXPOLNH,GR-XVWILQGRXW
ZKHWKHU\RXKDYHDJRRGRQHLQ\RXUFRXQWU\

230 | Appendix:ಗInformation Resources


,5&SDUWLFXODUO\P\VTODW)UHHQRGH
0DQ\0\64/H[SHUWVDUHKHUHMXVWORJLQDQGDVN\RXUTXHVWLRQ7KHUHDUHDOVR
VSHFLILFFKDQQHOVVXFKDVP\VTOGHYZKHUH\RXFDQDVNTXHVWLRQVUHODWHGWRSOXJ
LQGHYHORSPHQWRUH[WHQGLQJ0\64/RUP\VTOQGEZKHUH1'%H[SHUWVVLW)RU
WURXEOHVKRRWLQJLVVXHVWKHPRVWDSSURSULDWHFKDQQHOLVP\VTO

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

You might also like