1.1 性能優(yōu)化簡(jiǎn)介
本書(shū)中將MySQL性能定義為完成某件任務(wù)所需要的時(shí)間,而不是每秒查詢次數(shù)、CPU利用率等方面;本書(shū)中默認(rèn)向MySQL發(fā)送的一切命令都稱為查詢,諸如 SELECT/UPDATE/DELETE等等宜雀。
如果認(rèn)為性能是響應(yīng)時(shí)間,那么我們的目標(biāo)就是降低響應(yīng)時(shí)間握础,降低每個(gè)查詢的響應(yīng)時(shí)間辐董,那么第二個(gè)問(wèn)題,就是先搞清楚時(shí)間花在哪里弓候,即測(cè)量時(shí)間花在什么地方郎哭,無(wú)法測(cè)量就無(wú)法有效優(yōu)化。
注意菇存,測(cè)量范圍不要搞錯(cuò)夸研,如出現(xiàn)慢查詢,就應(yīng)該測(cè)量或解決慢查詢依鸥,不應(yīng)該去排查整個(gè)服務(wù)器的狀況亥至;另外,查詢的時(shí)間包括等待時(shí)間和執(zhí)行時(shí)間,一般處理和解決執(zhí)行時(shí)間姐扮,等待時(shí)間長(zhǎng)的原因很復(fù)雜絮供。
通過(guò)工具可以顯示性能剖析的結(jié)果,但注意很多情況是通過(guò)結(jié)果發(fā)現(xiàn)不了的茶敏,注意尋找哪些是值得優(yōu)化的查詢壤靶、哪些發(fā)生了異常、還有很多被隱藏的細(xì)節(jié)(如平均響應(yīng)時(shí)間很小惊搏,但的確存在1~2個(gè)真正耗時(shí)的慢查詢)
1.2 對(duì)應(yīng)用程序進(jìn)行性能剖析
除了對(duì)MySQL服務(wù)器進(jìn)行性能剖析贮乳,還有必要對(duì)應(yīng)用程序本身做性能剖析,比如PHP程序恬惯;值得注意的是性能剖析也會(huì)使服務(wù)器變慢向拆,但相對(duì)剖析程序所做得貢獻(xiàn)來(lái)說(shuō),那點(diǎn)消耗已經(jīng)無(wú)所謂酪耳;
推薦了進(jìn)行PHP性能剖析的工具浓恳,xhprof、Ifp等碗暗,不用重新發(fā)明“輪子”颈将。
1.3 剖析MySQL查詢
對(duì)查詢的剖析有兩種方式,一種是剖析整個(gè)MySQL服務(wù)器負(fù)載言疗,一種是剖析單條語(yǔ)句查詢吆鹤;
剖析服務(wù)器負(fù)載,可以通過(guò)MySQL提供的慢查詢?nèi)罩局奘兀F(xiàn)在通過(guò)設(shè)置 long_query_time 可以將粒度設(shè)置到微妙級(jí)別;MySQL提供的慢查詢?nèi)罩臼情_(kāi)銷(xiāo)最低沾凄、精度最高的測(cè)試查詢時(shí)間的工具梗醇。新浪的SAE就提供針對(duì)MySQL的慢查詢?nèi)罩尽?/p>
剖析單條查詢,使用 SHOW PROFILES撒蟀、SHOW STATUS叙谨、查詢慢查詢?nèi)罩镜臈l目。先執(zhí)行一條查詢保屯,然后使用 SHOW PROFILES 查看查詢執(zhí)行的時(shí)間手负,然后使用 SHOW PROFILE WHERE QUERY 1,顯示該條查詢執(zhí)行的過(guò)程姑尺,及每個(gè)過(guò)程所話費(fèi)的時(shí)間竟终,經(jīng)過(guò)排序后,就可以知道 查詢把時(shí)間花在那個(gè)過(guò)程上了切蟋。
1.4 診斷間歇性問(wèn)題
1.5 其他剖析工具
1.6 總結(jié)