PMM Query Analytics的查詢分析器怎麼用?典型教學例子一個
網上都是PMM Percona Monitoring and Management的安裝部署文章,今天我出一個使用PMM的教學文章,尋找資料庫負載最高的語句例子。
一、 問題 PMM Query Analytics 的查詢分析器使用方法
二、下面用一個例子來介紹查詢分析器的使用方法,介紹各個引數的意思。先上圖
這個圖意思是:我選擇了 2 天取樣時間,對 load 進行排序,選擇一條 sql 語句,這條 sql 語句每秒執行 3.41 次, 2 天時間裡總共執行了 589970 次, sql 負載佔整個 sql 的負載是 80% 。這個是很高很高的了。
如上圖,我選擇了 sql 語句
select member0_.id as id2_166_, member0_.createdDate as createdD3_166_, member0_.lastModifiedDate as lastModi4_166_, member0_.version as version5_166_, member0_.isEnabled as isEnable6_166_, member0_.isLocked as isLocked7_166_, member0_.lastLoginDate as lastLogi8_166_, member0_.lastLoginIp as lastLogi9_166_, member0_.lockDate as lockDat10_166_, member0_.mobile as mobile11_166_, member0_.operatorNo as operato12_166_, member0_.address as address57_166_, member0_.amount as amount58_166_, member0_.area_id as area_id67_166_, member0_.attributeValue0 as attribu18_166_, member0_.attributeValue1 as attribu19_166_, member0_.attributeValue2 as attribu30_166_, member0_.attributeValue3 as attribu31_166_, member0_.attributeValue4 as attribu32_166_, member0_.attributeValue5 as attribu33_166_, member0_.attributeValue6 as attribu34_166_, member0_.attributeValue7 as attribu35_166_, member0_.attributeValue8 as attribu36_166_, member0_.attributeValue9 as attribu37_166_, member0_.balance as balance38_166_, member0_.birth as birth59_166_, member0_.commissionBalance as commiss60_166_, member0_.email as email14_166_, member0_.encodedPassword as encoded15_166_, member0_.frozenAmount as frozenA42_166_, member0_.frozenCommissionBalance as frozenC61_166_, member0_.gender as gender62_166_, member0_.headimgurl as headimg63_166_, member0_.memberRank_id as memberR68_166_, member0_.name as name16_166_, member0_.nickname as nicknam64_166_, member0_.phone as phone52_166_, member0_.point as point65_166_, member0_.safeKeyExpire as safeKey53_166_, member0_.safeKeyValue as safeKey54_166_, member0_.username as usernam17_166_, member0_.zipCode as zipCode66_166_ from Users member0_ where member0_.dtype= ? and member0_.operatorNo= ? 得到了下面表格的一些計算資料:
三、 名稱解釋
query time : 這裡的 query time 和 mysql 的慢日誌裡面query time 兩個概念是一樣的嗎? 答案是:2個概念是不一樣的。這個是什麼意思呢?這個 query time , 是這條語句總共執行了 9 days,11:25:15 這麼長時間,總共執行了 589.97k 次,得到的平均執行時間是 817200/589970=1.39 sec 。這裡有個奇怪的問題是,我取樣的時間是 2days, 仔細看圖,為什麼這條語句執行時間是 9 天又 11 個小時呢?這裡埋個問題。
Load :這裡的 load 我沒有真正看出來了含義,表示 sql 執行時間的負載。這裡要注意 sql 負載佔比百分比才有意義。這條 sql 語句佔比 80% ,說明資料庫大部分時間用於執行這條語句。
Query count :執行次數,本條語句執行 589970 次, qps 是 3.41
Rows examined :每次執行掃描的行數 473170, 為了執行這條語句,資料庫每次需要掃描 473170 條記錄才能得到這一條記錄,哎呀,好累呀,計算機幹活還是很賣力的,每次執行這條語句都要查詢這麼多記錄。
query time 是這條語句的平均執行時間,慢日誌查詢的 query time 是本條語句當前執行時間。
發現這條語句有問題後,我去慢查詢日誌看, 慢查詢日誌有2G大,找到了慢日誌sql:
四、現在開始最佳化這條語句。
看下現在執行計劃:
這條語句用到了索引 key, 不過仍然很慢,執行時間需要 3 秒。檢索了 40401 條記錄。
看下這個表建立了哪些索引?
果然有 UKt3bl114953i5jey88j9rk472n 這個索引。
那為什麼還是這麼慢呢?這裡思考 2 分鐘接著往下看:
因為這個索引 (`dtype`,`username`) 能檢索到的資料量還是比較大的,不夠高效,用了這個索引還要檢索40401條記錄。那現在建立一個更加高效的索引:
create index idx_users_operatorno_2 on users(operatorNo,dtype);
這個時候你再來看執行計劃:
看到沒有,使用了我新建立的索引,檢索資料變成 1 條,這樣,再執行一下這條語句,就是 0.01 秒。好了問題解決。
四、 剛剛說的 PMM 的 query time 和慢查詢的 query time 計算方法不一樣,假如,如果,我需要方便的從 PMM 的介面得到 sql 語句一次查詢的 query time,該怎麼操作 呢?
答案:縮短取樣時間。
五、
總結:用 PMM 查詢分析,用 load 排序,可以找到負載最大的 sql ,最佳化這個 sql ,整個資料庫的負載就下來了。為什麼呀?其實你可以思考下,資料庫是什麼?可以這樣理解:就是一個不停執行 sql 語句然後返回結果給使用者的機器嘛,沒有了慢查詢 sql ,資料庫負載降低,吞吐量就會提高,表現就會快嘛。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30393770/viewspace-2769308/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 一個查詢不走索引的例子索引
- 請教一個mysql查詢語句!!MySql
- Laravel query when 的查詢Laravel
- Media Query 在 CSS 中使用的一個具體例子CSS
- mybatis like 查詢的例子MyBatis
- 教小師妹學多執行緒,一個有深度的例子!執行緒
- 一個簡單的例子教會您使用javapJava
- 小白手把手教學怎麼用maven建立一個Springboot專案MavenSpring Boot
- Angular Ngrx Store 應用程式狀態的一些典型例子Angular
- 一個小例子,給你講透典型的 Go 併發操作Go
- Laravel 關聯查詢 ——一對一 簡單例子Laravel單例
- Elasticsearch Query DSL查詢入門Elasticsearch
- 使用url引數傳遞SAP Analytics Cloud filter的一個例子CloudFilter
- 斷點續傳教學例子斷點
- 記一個實用的sql查詢語句SQL
- Elasticsearch複合查詢—constant score queryElasticsearch
- Laravel Query Builder 複雜查詢案例:子查詢實現分割槽查詢 partition byLaravelUI
- excel查重是怎麼查的 excel表格怎麼查詢重複項Excel
- nslookup命令怎麼用?如何查詢DNS解析故障?DNS
- 蘋果啟用時間怎麼查詢?蘋果iPhone XR查詢保修日期的方法蘋果iPhone
- 用一個通俗的例子講清楚APIAPI
- centos vim怎麼查詢?CentOS
- Android SQL資料庫查詢方法 query( )AndroidSQL資料庫
- 07.full text query_string查詢
- MySQL Slow Query log(慢查詢日誌)MySql
- Laravel 5 關聯查詢 ——一對 N 簡單例子Laravel單例
- 一個簡單例子教會你C++動態庫的用法單例C++
- 實時防疫地圖怎麼用?怎麼查詢離我最近的疫情病例?地圖
- 一個學習 Koa 原始碼的例子原始碼
- python怎麼查詢字串中是否包含某個字串Python字串
- 用個通俗的例子講一講死鎖
- 資料查詢語句:DQL(Data Query Language)
- 遇到慢查詢怎麼辦?一文解讀MySQL 8.0查詢分析工具MySql
- 一個用Git互動視覺化教學的專案Git視覺化
- 怎麼用一條sql查詢出前兩條是免費的下面全是vip的SQL
- iPhone序列號和保修期怎麼查?iPhone序列號查詢啟用時間查詢教程iPhone
- SSM框架實現分頁查詢例子SSM框架
- Mysql 巢狀查詢100例子MySql巢狀