processlist中最哪些狀態要引發關注

通常而言,咱們在processlist結果中若是常常能看到某些SQL的話,至少能夠說明這些SQL的頻率很高,一般須要對這些SQL進行進一步優化。html

今天咱們要說的是,在processlist中,看到哪些運行狀態時要引發關注,主要有下面幾個:mysql

狀態 建議
copy to tmp table 執行ALTER TABLE修改表結構時建議:放在凌晨執行或者採用相似pt-osc工具
Copying to tmp table 拷貝數據到內存中的臨時表,常見於GROUP BY操做時建議:建立適當的索引
Copying to tmp table on disk 臨時結果集太大,內存中放不下,須要將內存中的臨時表拷貝到磁盤上,造成 #sql***.MYD、#sql***.MYI(在5.6及更高的版本,臨時表能夠改爲InnoDB引擎了,能夠參考選項default_tmp_storage_engine建議:建立適當的索引,而且適當加大sort_buffer_size/tmp_table_size/max_heap_table_size
Creating sort index 當前的SELECT中須要用到臨時表在進行ORDER BY排序建議:建立適當的索引
Creating tmp table 建立基於內存或磁盤的臨時表,當從內存轉成磁盤的臨時表時,狀態會變成:Copying to tmp table on disk建議:建立適當的索引,或者少用UNION、視圖(VIEW)、子查詢(SUBQUERY)之類的,確實須要用到臨時表的時候,能夠在session級臨時適當調大 tmp_table_size/max_heap_table_size的值
Reading from net 表示server端正經過網絡讀取客戶端發送過來的請求建議:減少客戶端發送數據包大小,提升網絡帶寬/質量
Sending data 從server端發送數據到客戶端,也有多是接收存儲引擎層返回的數據,再發送給客戶端,數據量很大時尤爲常常能看見備註:Sending Data不是網絡發送,是從硬盤讀取,發送到網絡是Writing to net

 

建議:經過索引或加上LIMIT,減小須要掃描而且發送給客戶端的數據量sql

Sorting result 正在對結果進行排序,相似Creating sort index,不過是正常表,而不是在內存表中進行排序建議:建立適當的索引
statistics 進行數據統計以便解析執行計劃,若是狀態比較常常出現,有多是磁盤IO性能不好建議:查看當前io性能狀態,例如iowait
Waiting for global read lock FLUSH TABLES WITH READ LOCK整等待全局讀鎖建議:不要對線上業務數據庫加上全局讀鎖,一般是備份引發,能夠放在業務低谷期間執行或者放在slave服務器上執行備份
Waiting for tables,Waiting for table flush FLUSH TABLES, ALTER TABLE, RENAME TABLE, REPAIR TABLE, ANALYZE TABLE, OPTIMIZE TABLE等須要刷新表結構並從新打開建議:不要對線上業務數據庫執行這些操做,能夠放在業務低谷期間執行
Waiting for lock_type lock 等待各類類型的鎖:• Waiting for event metadata lock• Waiting for global read lock• Waiting for schema metadata lock• Waiting for stored function metadata lock• Waiting for stored procedure metadata lock• Waiting for table level lock• Waiting for table metadata lock• Waiting for trigger metadata lock建議:比較常見的是上面提到的global read lock以及table metadata lock,建議不要對線上業務數據庫執行這些操做,能夠放在業務低谷期間執行。若是是table level lock,一般是由於還在使用MyISAM引擎表,趕忙轉投InnoDB引擎吧,別再老頑固了

更多詳情可參考官方手冊:8.14.2 General Thread States數據庫

相關文章
相關標籤/搜索