MySQL-22:短暫提高效能的方法
22.1短連結風暴
正常的短連線模式就是連線到資料庫後,執行很少的 SQL 語句就斷開,下次需要的時候再重連。
MySQL建立連線的過程:①TCP連線建立,聯結器進行身份驗證;②身份驗證成功,到許可權表中載入資料;
兩個引數: max_connection 和wait_timeout。
1.處理sleep的連線
通過show processlist
可以獲取程式列表,以及狀態。
通過information_schema 庫的 innodb_trx 表 來檢視事務的狀態,這個能表現出kill這個連線是否會有損。
如下情景:
11號執行緒就在事務中,kill掉它,MySQL就只能回滾事務。
2.減少連線消耗
跳過許可權驗證的方法是:重啟資料庫,並使用–skip-grant-tables 引數啟動。這樣,整個 MySQL 會跳過所有的許可權驗證階段,包括連線過程和語句執行過程在內。
23.2 慢查詢效能問題
在 MySQL 中,會引發效能問題的慢查詢,大體有以下三種可能:
- 索引沒有設計好;
- SQL 語句沒寫好;
- MySQL 選錯了索引。
1. 索引沒有設計好
MySQL 5.6 版本以後,建立索引都支援 Online DDL 了 , 最高效的做法就是直接執行 alter table 語句。
古老的方法:
- 在備庫 B 上執行 set sql_log_bin=off,也就是不寫 binlog,然後執行 alter table 語句加上索引;
- 執行主備切換;
- 這時候主庫是 B,備庫是 A。在 A 上執行 set sql_log_bin=off,然後執行 alter table 語句加上索引。
在需要緊急處理時,上面這個方案的效率是最高的 。你應該考慮類似 gh-ost 這樣的方案,更加穩妥。
2. 語句沒寫好
MySQL 5.7 提供了 query_rewrite 功能,可以把輸入的一種語句改寫成另外一種模式。
以下場景:
insert into query_rewrite.rewrite_rules(pattern, replacement, pattern_database) values ("select * from t where id + 1 = ?", "select * from t where id = ? - 1", "db1");
call query_rewrite.flush_rewrite_rules();
3.選錯索引
應急方案最佳為加上force index。
前期演練:
-
上線前,在測試環境,把慢查詢日誌(slow log)開啟,並且把 long_query_time 設定成 0,確保每個語句都會被記錄入慢查詢日誌;
-
在測試表裡插入模擬線上的資料,做一遍迴歸測試;
-
觀察慢查詢日誌裡每類語句的輸出,特別留意 Rows_examined 欄位是否與預期一致。
23.3 QPS 突增問題
最理想的情況是讓業務把這個功能下掉,服務自然就會恢復。
相關文章
- 提高JS原生方法效能的JS庫 -- loadashJS
- 三種提高Python程式碼效能的簡便方法Python
- Linux中的getrandom()方法效能提高了8450% - PhoronixLinuxrandom
- 提高網站效能的SSL/TLS最佳化方法介紹!網站TLS
- 如果要做優化,CSS提高效能的方法有哪些?優化CSS
- 如何提高python程式的效能Python
- 怎樣提高insert的效能
- 掌握提高 Web 應用的效能的方法 之 優化 PHP 和 LaravelWeb優化PHPLaravel
- 提高 SOLIDWORKS 大型裝配體和圖紙效能的 7 種方法Solid
- 幾種設計良好結構以提高.NET應用效能的方法
- 伺服器的效能如何提高伺服器
- 如何提高 Locust 的壓測效能
- 介紹幾種提高mysql的效能和對於sql的優化的方法MySql優化
- 記2018年技術人一次短暫的創業創業
- 提高 PostgreSQL 插入效能的 5 個技巧SQL
- 怎樣提高伺服器的效能伺服器
- GameMode:提高 Linux 遊戲效能的工具GAMLinux遊戲
- 如何提高你的 React 應用的效能React
- ??微服務架構:軟體開發的革命還是短暫潮流?微服務架構
- win10關閉動畫會提高效能嗎_win10關閉動畫提高效能操作方法Win10動畫
- 提高方面級情感分析的效能:一種結合詞彙圖和句法圖的方法
- Go1.13 defer 的效能是如何提高的?Go
- 提高API效能的幾個綜合策略API
- 提高Spring Data JPA應用程式的效能Spring
- 如何提高前端效能——字型篇前端
- 透過 CancellationToken 提高 Web 效能Web
- Java讀取暫存器資料的方法Java
- 提高採購流程效率的方法
- 如何使用 Set 來提高程式碼的效能
- iPhone 解鎖裝置製造商 Grayshift 遭遇短暫的資料洩露iPhone
- 如何提高Linux伺服器效能Linux伺服器
- Redis效能提高之批量和管道Redis
- 使用 Traefik 提高 WebSocket 應用效能Web
- Mac必裝!提高效率的桌面檔案暫存小工具Mac
- 如何提高Linux系統應對短連線的負載能力Linux負載
- 提高iOS App開發效率的方法iOSAPP
- 提高自身Java開發能力的方法?Java
- JavaScript 中的調節器:提高應用程式的效能JavaScript