mysql思路 MySQL優化思路

2021-10-18 06:33:03 字數 2902 閱讀 5058

通過指令碼,重新整理觀察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要查詢的資料超過總記錄的...