MySQL general log優化效能

2021-07-02 21:27:20 字數 1215 閱讀 5415

原文url:

常常遇到這樣的問題:資料庫訪問量很大,想要從sql方面進行優化。往往開發同學會問:能看到哪些sql執行比較頻繁嗎?回道:不能哦,只能看到當前正在執行的sql和慢日誌裡記錄的sql。

因為為了效能考慮,一般general log不會開啟。slow log可以定位一些有效能問題的sql,而general log會記錄所有的sql。

mysql5.0版本,如果要開啟slow log、general log,需要重啟,從mysql5.1.6版開始,general query log和slow query log開始支援寫到檔案或者資料庫表兩種方式,並且日誌的開啟,輸出方式的修改,都可以在global級別動態修改。

root@(none) 09:40:33>select version();

+————+

| version() |

+————+

| 5.1.37-log |

+————+

1 row in set (0.02 sec)

設定日誌輸出方式為檔案(如果設定log_output=table的話,則日誌結果會記錄到名為gengera_log的表中,這錶的預設引擎都是csv):

root@(none) 09:41:11>set global log_output=file;

query ok, 0 rows affected (0.00 sec)

設定general log的日誌檔案路徑:

root@(none) 09:45:06>set global general_log_file=』/tmp/general.log』;

query ok, 0 rows affected (0.00 sec)

開啟general log:

root@(none) 09:45:22>set global general_log=on;

query ok, 0 rows affected (0.02 sec)

過一段時間後,關閉general log:

root@(none) 09:45:31>set global general_log=off;

query ok, 0 rows affected (0.02 sec)

檢視tmp/general.log的資訊,可以大致看到哪些sql查詢/更新/刪除/插入比較頻繁了。比如有些表不是經常變化的,查詢量又很大,就完全可以cache;對主備延遲要求不高的表,讀可以放到備庫;等等

使用Recoding Rules優化效能

通過promql可以實時對prometheus中採集到的樣本資料進行查詢,聚合以及其它各種運算操作。而在某些promql較為複雜且計算量較大時,直接使用promql可能會導致prometheus響應超時的情況。這時需要一種能夠類似於後台批處理的機制能夠在後台完成這些複雜運算的計算,對於使用者而言只需...

利用單例優化效能

class db return db.instance constructor consnect find var mydb db.getinstance 如果沒有單例,每例項化一次,就會執行一次建構函式,效能大大下降 var mydb new db var mydb new db 控制台輸出結果 ...

Vue 初始化效能優化

原文 這個結果顯然不是我們要的,更好的結果是頁面可以從上到下按順序流式渲染,這樣可能總體時間增長了,但首屏時間縮減,在使用者看來,頁面開啟速度就更快了。要實現這種渲染模式,我總結了下有3種方式實現。第3種方式是我認為最合適的,也是我在專案中實際使用的優化方法。這種方式非常簡單,例如 非同步元件在官方...