MySQL臨時提高效能方案

2022-06-19 07:15:11 字數 1675 閱讀 5936

參考自 極客時間 - 22 | mysql有哪些「飲鴆止渴」提高效能的方法?

短連線:連線到資料庫執行很少sql後就被斷開。

在業務高峰期,可能會出現連線數暴漲的問題。

影響:mysql建立連線的成本很高,除了正常的網路連線三次握手外,還需要做登入許可權判斷和獲得這個連線的資料讀寫許可權。

如何識別不工作執行緒?

首先,使用show processlist檢視連線狀態。例如

然後,識別空閒執行緒。

根據trx_mysql_thread_id使用kill connection [id]進行連線的關閉。

但是注意,此方法是業務有損的。

騷操作,跳過資料庫許可權驗證階段。

跳過許可權驗證的方法是:重啟資料庫,並使用–skip-grant-tables引數啟動。這樣,整個 mysql 會跳過所有的許可權驗證階段,包括連線過程和語句執行過程在內。

在 mysql 8.0 版本裡,如果你啟用–skip-grant-tables引數,mysql 會預設把--skip-networking引數開啟,表示這時候資料庫只能被本地的客戶端連線。

效能問題的查詢sql的原因大致如下:

索引沒有設計好。

查詢語句沒有寫好。

mysql選錯索引。

可以嘗試直接加索引,5.6以上支援online ddl,比較高效;

備選方案:假設資料庫為一主(a)一備(b)。

在備庫 b 上執行 set sql_log_bin=off,也就是不寫 binlog,然後執行 alter table 語句加上索引;

執行主備切換;

這時候主庫是 b,備庫是 a。在 a 上執行set sql_log_bin=off,然後執行 alter table 語句加上索引。

實際不緊急場景,可以考慮使用gh-ost進行online ddl。

預防方案(檢測sql執行時長):

上線前,在測試環境,把慢查詢日誌(slow log)開啟,並且把 long_query_time 設定成 0,確保每個語句都會被記錄入慢查詢日誌;

在測試表裡插入模擬線上的資料,做一遍回歸測試;

如果新增的 sql 語句不多,手動跑一下就可以。而如果是新專案的話,或者是修改了原有專案的 表結構設計,全量回歸測試都是必要的。這時候,你需要工具幫你檢查所有的 sql 語句的返回結果。比如,你可以使用開源工具 pt-query-digest(

如果是bug導致qps過高,可以單獨下掉對應功能的資料庫使用者。

或者call query_rewrite.flush_rewrite_rules()直接重寫"select 1"返回

MySQL資料庫臨時提高效能的方法

連線數量超過max connections時,新來的連線會被拒絕。這時有一些臨時解決辦法 注意這些辦法都是有損的 kill掉那些占用連線但未進行事務操作的執行緒,注意如果資料庫端主動斷開連線,客戶端是不能立刻感知的。讓資料庫建立連線時跳過許可權驗證階段,重啟資料庫,並使用 skip grant ta...

SQL 提高效能

參考部落格 非常感謝博主分享。1.set nocount on 關閉行基數資訊,減少網路通訊,提高程式效能。2.count 1 count 2 count name count 前三種效果一樣,count 找出最短的列,所以建議用count 1 效率高。3.with nolock 大量的查詢,會導致...

MySQL基礎 大幅度提高效能方案,分割槽表

下面就筆者工作中遇到的時間問題,模擬一下情況對大家進行介紹.工作中仍然是海量資料出現的情況.每年大概會有幾億條記錄.而且資料的時效性比較強.但歷史資料仍然要求保留.這個時候經過分析和研究,最終決定通過時間字段進行分割槽.下面是分割槽表的建立 讀者門在插入了不同年份時間段以後,可以時間欄位為條件進行查...