通過指令碼,重新整理觀察mysql的status,觀察是否有週期性故障活波動,
一般由訪問高峰或者快取失效引起,家快取並更改快取失效策略,是失效時間分散或頁面定時失,
show processlist顯示哪些執行緒正在執行。
您也可以使用mysqladmin processlist語句得到此資訊。如果您有super許可權,您可以看到所有執行緒。否則,您只能看到您自己的執行緒
mysql 開啟慢查詢日誌
slow_query_log 這個引數設定為on,可以捕獲執行時間超過一定數值的sql語句。
long_query_time 當sql語句執行時間超過此數值時,就會被記錄到日誌中,建議設定為1或者更短
slow_query_log_file 記錄日誌的檔名。
log_queries_not_using_indexes 這個引數設定為on,可以捕獲到所有未使用索引的sql語句,儘管這個sql語句有可能執行得挺快。
使用profiler來分析一條query的執行時間和效能瓶頸,
開啟 profiling ;
set profiling=1;
隨便執行一條語句 select count(*) from user where id>2;
show profiles;
得到| query_id | duration | query |
| 2 | 0.00009200 | set profiling=1 |
| 5 | 0.02003525 | select count(*) from user where id>2 |
包含乙個query_id和執行時間和query語句
通過query_id可以檢視到更詳細的資訊;
show profile cpu ,block io for query 5;
| status | duration | cpu_user | cpu_system | block_ops_in | block_ops_out |
| starting | 0.000170 | 0.000000 | 0.000000 | 0 | 0 |
| checking permissions | 0.000019 | 0.000000 | 0.000000 | 0 | 0 |
| opening tables | 0.000033 | 0.000000 | 0.000000 | 0 | 0 |
| init | 0.000061 | 0.000000 | 0.000000 | 0 | 0 |
| system lock | 0.000021 | 0.000000 | 0.000000 | 0 | 0 |
| optimizing | 0.000021 | 0.000000 | 0.000000 | 0 | 0 |
| statistics | 0.010826 | 0.000000 | 0.000000 | 184 | 0 |
| preparing | 0.000041 | 0.000000 | 0.000000 | 0 | 0 |
| executing | 0.000005 | 0.000000 | 0.000000 | 0 | 0 |
| sending data | 0.008731 | 0.008000 | 0.000000 | 0 | 0 |
| end | 0.000020 | 0.000000 | 0.000000 | 0 | 0 |
| query end | 0.000018 | 0.000000 | 0.000000 | 0 | 0 |
| closing tables | 0.000012 | 0.000000 | 0.000000 | 0 | 0 |
| freeing items | 0.000032 | 0.000000 | 0.000000 | 0 | 0 |
| cleaning up | 0.000027 | 0.000000 | 0.000000 | 0 | 0 |
對mysql伺服器的優化不要一上來就去優化sql語句,應該首先觀察全域性情況,至少要先搞清楚
問題出在哪,應該使用指令碼來觀察伺服器一段時間(一天或更長)的健康狀況,比如cpu,io,程序連線數等
最後才分析具體原因處在**;針對解決;
通過 mysqladmin來檢視mysql的狀態;
mysqladmin -p3306 -uroot -p123456 -h127.0.0.1 -r -i 1 ext |\awk -f"|"\"begin"\'\else if ($2 ~ /queries/)\else if ($2 ~ /com_select /)\else if ($2 ~ /com_insert /)\else if ($2 ~ /com_update /)\else if ($2 ~ /com_delete /)\else if ($2 ~ /innodb_rows_read/)\else if ($2 ~ /innodb_rows_deleted/)\else if ($2 ~ /innodb_rows_inserted/)\else if ($2 ~ /innodb_rows_updated/)\else if ($2 ~ /innodb_buffer_pool_read_requests/)\else if ($2 ~ /innodb_buffer_pool_reads/)\else if ($2 ~ /uptime / && count >= 2){\
printf("|%6d %6d %6d %6d",com_select,com_insert,com_update,com_delete);\
printf("|%6d %8d %7d %7d",innodb_rows_read,innodb_rows_inserted,innodb_rows_updated,innodb_rows_deleted);\
printf("|%10d %11d\n",innodb_lor,innodb_phr);\
還可以在 printf的輸出重定向到乙個檔案,這樣就可以通過檔案資料進行視覺化分析;
mysql優化思路
調優思路 1.資料庫設計與規劃 以後再修該很麻煩,估計資料量,使用什麼儲存引擎 2.資料的應用 怎樣取資料,sql語句的優化 3.mysql服務優化 記憶體的使用,磁碟的使用 4.作業系統的優化 核心 tcp連線數量 5.公升級硬體裝置 磁碟io規劃 raid技術 raid0 xfs swap分割槽...
mysql優化思路
為什麼別人問你mysql優化的知識 總是沒有底氣,因為你只是回答一些大而化之的調優原則,比如 1 建立合理索引 什麼樣的索引合理?2 分表分庫 用什麼策略分表分庫?3 主從分離 用什麼中介軟體?並沒有從細化到定量的層面去分析.如qps提高了 n?有沒有減少檔案排序?語句的掃瞄行數減少了多少?沒有大量...
mysql優化思路
二 mysql效能低解決思路 1 索引匹配原則 全值匹配 字首匹配 列字首匹配 匹配範圍值 只訪問索引的查詢 精確匹配某一列並範圍匹配某列2 關於sql的優化思路 1 使用explain或者desc 檢視sql的執行計畫 了解輸出項的含義,是否走索引或者索引合理。2 當sql要查詢的資料超過總記錄的...