天天看點

如何簡單快捷的查詢性能資料

作者:摸魚IT

Perfetto内有內建了強大的分析功能子產品,它内建了SQLite,通過SQL查詢可以分析 trace 的各個部分的性能,将資料統一彙總進行對比分析,非常便捷友善。

如何簡單快捷的查詢性能資料

本文基于 Perfetto 中的常用SQL語句進行講解,不深入SQL語言本身。

其中,相關文章可以 - 性能分析工具 之 Perfetto基本使用、如何分析手機中CPU的狀況

好了,介紹到此為止,進入正文。

如何簡單快捷的查詢性能資料

UI 展示

在Perfetto 的可視化展示網頁:https://ui.perfetto.dev/ 中導入抓取好的trace檔案,加載完畢後在側邊欄中 Query (SQL) ,這個位置就是Perfetto 提供的SQL查詢的入口。

點選後,可以看到兩個部分:

上面的部分就是SQL語句的編輯區。

在下面的部分中,在未輸入語句之前會顯示這個trace之前的查詢SQL語句曆史,當新的SQL語句以後,這個部分就會顯示查詢結果。

如何簡單快捷的查詢性能資料

示範一個簡單的查詢方法。

例如,在trace中查詢slice上的每個事件的發生時間和時長。

select dur,ts,name from slice


//ts: 展示timestamp 時間戳
//dur: 表示需要詢問的事件的時長
//name: 表示查詢的對象名
//slice: 表示 trace 上一段時間的事件集合           
如何簡單快捷的查詢性能資料

SQL基本用法

在Perfetto中使用最多的是條件查詢SQL,運作的順序是:

①from語句 ②where語句 ③select語句。

select <列名1>,<列名2>,<列名3>,...
from <表名>
where 條件           

列舉一些常用的條件查找的文法。

為列名設定别名 - as,将表table1中 name列名 修改為“名稱”。如下,

select name as '名稱'
from table1           

在select選擇語句中進行算數計算,将dur列下的時間機關變成秒(将微秒除以10的6次)。

select (dur/1e6),ts,name from slice           

在where條件語句中支援字元串模糊查找,使用關鍵字:LIKE

_表示任意一個字元;%表示任意字元串。

注:,如果在某個位置不加%,會預設該位置是精确查找,可能造成查找失敗。

模糊查找名字大概為doTraversals線程的耗時,如下,

select (dur/1e6) from slice where name like "%doTraversals%"           

示意用例

使用場景:在trace中查找HAL拍照的耗時,并擷取平均時間。

select (dur/1e6) from slice where name like "%still%" order by dur desc           
如何簡單快捷的查詢性能資料

分析語句:通過 %still% 模糊查找到 still capture這個線程的耗時,并且使用order by dur desc 進行降序排列。

,可以在select語句中使用算數計算,使用關鍵字 avg 即可。

select avg(dur/1e6) from slice where name like "%still%" order by dur desc           
如何簡單快捷的查詢性能資料

總結

在 Perfetto中使用SQL查詢語句,可以高效統計整個trace中所需的資料,提高性能分析的效率。

并且通過SQL語句與python語句結合,通過加載trace,可以實作自動化分析某個固定場景下的性能情況,通過Perfetto、SQL、python結合可以實作自動化分析性能場景,大大提高技術人員的效率,減少不必要的重複分析工作。

更多技術文章,全網首發公衆号“摸魚IT”,希望大家關注、轉發、點贊!

繼續閱讀