mysql負載一直100 以上,怎麼解決?

時間 2021-06-03 09:41:15

1樓:iseeyou

1. show processlist檢視當前頻繁執行哪些sql,這些sql是否可以優化

2.開啟慢查詢記錄,看這些慢查詢sql是否可以優化

3.檢視一些關鍵配置,看這些配置資訊是否有問題,針對cpu過高這種情況可以重點看如下三個配置項:

使用查詢緩衝,MySQL將查詢結果存放在緩衝區中,今後對於同樣的SELECT語句(區分大小寫),將直接從緩衝區中讀取結果。

通過檢查狀態值Qcache_*,可以知道query_cache_size設定是否合理(上述狀態值可以使用SHOW STATUS LIKE 『Qcache%』獲得)。如果Qcache_lowmem_prunes的值非常大,則表明經常出現緩衝不夠的情況,如果Qcache_hits的值也非常大,則表明查詢緩衝使用非常頻繁,此時需要增加緩衝大小;如果Qcache_hits的值不大,則表明你的查詢重複率很低,這種情況下使用查詢緩衝反而會影響效率,那麼可以考慮不用查詢緩衝。此外,在SELECT語句中加入SQL_NO_CACHE可以明確表示不使用查詢緩衝。

與查詢緩衝有關的引數還有query_cache_type、query_cache_limit、query_cache_min_res_unit。

query_cache_type指定是否使用查詢緩衝,可以設定為0、1、2,該變數是SESSION級的變數。

query_cache_limit指定單個查詢能夠使用的緩衝區大小,預設為1M。

query_cache_min_res_unit是在4.1版本以後引入的,它指定分配緩衝區空間的最小單位,預設為4K。檢查狀態值Qcache_free_blocks,如果該值非常大,則表明緩衝區中碎片很多,這就表明查詢結果都比較小,此時需要減小query_cache_min_res_unit。

舉例如下:

mysql> show global status like 『qcache%『;

| Variable_nameValue  |

| Qcache_free_blocks22756  |

| Qcache_free_memory  | 76764704 |

| Qcache_hits213028692 |

| Qcache_inserts208894227 |

| Qcache_lowmem_prunes | 4010916 |

| Qcache_not_cached | 13385031 |

| Qcache_queries_in_cache | 43560 |

| Qcache_total_blocks111212  |

mysql> show variables like 『query_cache%『;

| Variable_nameValue  |

| query_cache_limit2097152 |

| query_cache_min_res_unit  | 4096   |

| query_cache_size203423744 |

| query_cache_typeON

| query_cache_wlock_invalidate | OFF  |

查詢快取碎片率= Qcache_free_blocks / Qcache_total_blocks * 100%

如果查詢快取碎片率超過20%,可以用FLUSH QUERY CACHE整理快取碎片,或者試試減小query_cache_min_res_unit,如果你的查詢都是小資料量的話。

查詢快取利用率= (query_cache_size – Qcache_free_memory) / query_cache_size * 100%

查詢快取利用率在25%以下的話說明query_cache_size設定的過大,可適當減小;查詢快取利用率在80%以上而且Qcache_lowmem_prunes > 50的話說明query_cache_size可能有點小,要不就是碎片太多。

查詢快取命中率= (Qcache_hits – Qcache_inserts) / Qcache_hits * 100%

示例伺服器查詢快取碎片率=20.46%,查詢快取利用率=62.26%,查詢快取命中率=1.94%,命中率很差,可能寫操作比較頻繁吧,而且可能有些碎片。

使用者可以建立的記憶體表(memory table)的大小。這個值用來計算記憶體表的最大行數值。這個變數支援動態改變,即set @max_heap_table_size=#

這個變數和tmp_table_size一起限制了內部記憶體表的大小。如果某個內部heap(堆積)表大小超過tmp_table_size,MySQL可以根據需要自動將記憶體中的heap表改為基於硬碟的MyISAM表。

通過設定tmp_table_size選項來增加一張臨時表的大小,例如做高階GROUP BY操作生成的臨時表。如果調高該值,MySQL同時將增加heap表的大小,可達到提高聯接查詢速度的效果,建議盡量優化查詢,要確保查詢過程中生成的臨時表在記憶體中,避免臨時表過大導致生成基於硬碟的MyISAM表

mysql> show global status like 『created_tmp%『;

| Variable_nameValue |

| Created_tmp_disk_tables | 21197 |

| Created_tmp_files   | 58  |

| Created_tmp_tables  | 1771587 |

每次建立臨時表,Created_tmp_tables增加,如果臨時表大小超過tmp_table_size,則是在磁碟上建立臨時表,Created_tmp_disk_tables也增加,Created_tmp_files表示MySQL服務建立的臨時檔案檔案數,比較理想的配置是:

Created_tmp_disk_tables / Created_tmp_tables * 100% <= 25%比如上面的伺服器Created_tmp_disk_tables / Created_tmp_tables * 100% =1.20%,應該相當好了

預設為16M,可以調大,執行緒獨佔,太大可能記憶體不夠I/O堵塞

如果羅斯能夠一直保持MVP賽季以上的水準,他會成為第二個喬丹嗎?

老詹無敵 理論上這個世界上不會出現第二個喬丹。哪怕將來有一位球員打破了喬丹所有的記錄 除非 這位球員憑藉巨大的影響力讓籃球成為世界第一大球。額 退一步來說,能超越橄欖球,成為美國第一大球,也是有可能的 x.y 以羅斯的打法來說,他的傷可以說是必然。按照題主所說,不傷,保持水準,後期,如今年又開發出投...

英語一直在100分左右一直上不去該怎麼提分

每個單詞都記熟了沒?錯過的題目再做還會不會做?語法方面在腦子裡有沒有清晰的思維導圖?我是參加老高考,不清楚新高考的題型,就按老高考的說,學習的精神和方法不會因為高考改革而改變。背單詞,把高中課本裡所有生詞都背下來,題目裡遇到的生詞後面說。所有詞都背下來後基本意味著你能看懂高中會出現的英語文章了,然後...

一直有乙個朋友以上戀人未滿的優秀異性朋友是一種什麼樣的體驗?

李琬華 體驗的話 這個好搞笑啊,截圖發給他 天哪,還可以這樣,截圖發給他 我今天吃了這個,拍照發給他 這個花開了哎,拍照發給他 不開心 發訊息給他 好開心呀 發訊息給他 emm 據說男生喜歡上乙個人之後會特別主動,那他不告白,是不喜歡我嗎 好煩啊,我們倆到底能不能更近一步啊 我要不要問一下他要不要在...