摘要:原文鏈接查詢?nèi)罩痉治銎魇且粋€(gè)桌面應(yīng)用,用于幫助了解企業(yè)版服務(wù)器查詢?nèi)罩疚募O旅媸窃诎惭b查詢?nèi)罩痉治銎?。?dāng)被禁用時(shí),此值顯示設(shè)置項(xiàng)查詢被執(zhí)行前的平均等待時(shí)間。設(shè)置項(xiàng)代表這個(gè)請(qǐng)求的數(shù)據(jù)有百分之多少是從緩存中讀取的。
原文鏈接: https://medium.com/neo4j/meet...
查詢?nèi)罩痉治銎魇且粋€(gè)Neo4j桌面應(yīng)用,用于幫助了解Neo4j企業(yè)版服務(wù)器查詢?nèi)罩疚募?br>
當(dāng)Neo4j突然變慢、或者查詢效率過(guò)低、再或者查詢負(fù)載過(guò)高時(shí),這時(shí)最好的辦法就是查看查詢?nèi)罩?。而查詢?nèi)罩就ㄟ^(guò)neo4j.conf文件配置的。
dbms.logs.query.enabled=true # If the execution of query takes more time than this threshold, # the query is logged. If set to zero then all queries dbms.logs.query.threshold=100ms dbms.logs.query.parameter_logging_enabled=true dbms.logs.query.time_logging_enabled=true dbms.logs.query.allocation_logging_enabled=true dbms.logs.query.page_logging_enabled=true dbms.track_query_cpu_time=true dbms.track_query_allocation=true
一般情況下,設(shè)置一個(gè)閾值,當(dāng)請(qǐng)求超過(guò)這個(gè)時(shí)間(示例是100ms,或者設(shè)置為0,代表所有請(qǐng)求)時(shí),就會(huì)被記錄下來(lái)。這也意味著,查詢?nèi)罩局杏涗浀恼?qǐng)求并不是服務(wù)器上的所有查詢。但是這個(gè)工具仍然可以為你提供一個(gè)快速定位可能造成查詢瓶頸的方向。
在后續(xù)的文章中我將會(huì)做詳細(xì)的介紹。
當(dāng)在開(kāi)發(fā)項(xiàng)目時(shí),最好要經(jīng)常在開(kāi)發(fā)服務(wù)器和測(cè)試服務(wù)器上分別去分析你的查詢?nèi)罩?,以便發(fā)現(xiàn)問(wèn)題。
工欲善其事必先利其器。接下來(lái),先看一下如何安裝查詢?nèi)罩痉治銎鳌?br>下面是在Neo4j Desktop 1.1.10+安裝查詢?nèi)罩痉治銎鳌?br>
打開(kāi)“Graph Aplications"側(cè)邊欄,把URL (https://neo.jfrog.io/neo/api/...到"Insert Graph Application"輸入框中,按下”Install“按鈕。
選擇一個(gè)工程,點(diǎn)擊應(yīng)用列表中的"+ Add Application"。
在這里增加“Query Log Analyzer”到你的工程中。
下面我來(lái)重點(diǎn)解釋一下查詢?nèi)罩痉治銎鳌?/p> 查詢?nèi)罩痉治銎?/b>
查詢?nèi)罩痉治銎餍枰粋€(gè)query.log文件。你將文件上傳到工具中,然后它就開(kāi)始分析。分析文件完成后,將顯示下信息:
在上面的示例中的日志文件中,有17341行數(shù)據(jù)(一行一請(qǐng)求),有249個(gè)查詢被發(fā)現(xiàn)。這些查詢會(huì)顯示在“Query Analysis"標(biāo)簽頁(yè)中,你可以看到每個(gè)查詢的統(tǒng)計(jì)數(shù)據(jù)。
在Query Analysis標(biāo)簽頁(yè)中,不同的查詢是按 查詢次數(shù)*平均時(shí)間 降序排列的。這樣的排序可以將最耗時(shí)的查詢排在最前面。
在Query Analysis標(biāo)簽頁(yè)中,有以下字段和功能:
The Query(在AvgTime?—?Avg Mem值的下面)
這是實(shí)際的查詢語(yǔ)句
Query Count
日志文件中查詢的次數(shù),對(duì)于這個(gè)查詢,還有下面一些功能可以使用:
Filter
在Query Log標(biāo)簽內(nèi)中,只顯示這個(gè)查詢的查詢紀(jì)錄。
Highlight
在Query Log標(biāo)簽內(nèi)中,高亮顯示這個(gè)查詢。當(dāng)要看同時(shí)發(fā)到服務(wù)器的查詢時(shí),會(huì)更便于查看。
Timline
實(shí)驗(yàn)性的!在Query Timeline標(biāo)簽中今次顯示查詢
Avg Time, Min Tim, Max Time
這里的時(shí)間是查詢執(zhí)行的累積時(shí)間(查詢+執(zhí)行計(jì)劃+等待)。
Avg CPU
實(shí)際請(qǐng)求執(zhí)行所占CPU時(shí)間。當(dāng)詳細(xì)時(shí)間日志被禁用時(shí),這里顯示0.
設(shè)置項(xiàng):
dbms.logs.query.time_logging_enabled=true dbms.track_query_cpu_time=true
Max Planning
這是執(zhí)行計(jì)劃階段所花費(fèi)的最大時(shí)間,當(dāng)鼠標(biāo)懸停在該值上時(shí),將會(huì)顯示最小時(shí)間和平均時(shí)間。一般一個(gè)查詢第一次被觸發(fā)時(shí),查詢生成執(zhí)行計(jì)劃,然后這個(gè)執(zhí)行計(jì)劃被放到查詢緩存中,當(dāng)查詢?cè)俅伪粓?zhí)行時(shí),生成執(zhí)行計(jì)劃的時(shí)間幾乎為0。當(dāng)執(zhí)行計(jì)劃被從緩存中移除時(shí),下一個(gè)請(qǐng)求才會(huì)再次編譯成執(zhí)行計(jì)劃。當(dāng)Time logging被禁用時(shí),此值顯示0.設(shè)置項(xiàng):
dbms.logs.query.time_logging_enabled=true
Avg Waiting
查詢被執(zhí)行前的平均等待時(shí)間。這個(gè)等待可能是由于數(shù)據(jù)庫(kù)負(fù)載過(guò)重造成,也可能是由于數(shù)據(jù)庫(kù)鎖造成的。當(dāng)Time logging被禁用時(shí),此值顯示為0。設(shè)置項(xiàng):
dbms.logs.query.time_logging_enabled=true
Cache Hits %
代表這個(gè)請(qǐng)求的數(shù)據(jù)有百分之多少是從緩存中讀取的。100%意味著所有數(shù)據(jù)都是從緩存中讀取的。設(shè)置項(xiàng):
dbms.logs.query.page_logging_enabled=true
Avg Mem
代表這個(gè)請(qǐng)求分配了多少內(nèi)存。注意,這是一個(gè)累積值,表明了查詢的內(nèi)存占用情況。設(shè)置項(xiàng):
dbms.logs.query.allocation_logging_enabled=true dbms.track_query_allocation=true
Protocol + Clients
在請(qǐng)求的上下文中你可以看到所使用的協(xié)議。其值有:
bolt
一個(gè)blot客戶端連到數(shù)據(jù)庫(kù)。
http
http客戶端使用Neo4j的rest接口。(Neo4j老版本使用)
embedded
來(lái)自數(shù)據(jù)庫(kù)內(nèi)部的調(diào)用,像存儲(chǔ)過(guò)程或函數(shù)。
此外,還有一個(gè)客戶端列表顯示,它列出了當(dāng)前有多少個(gè)不同IP向Neo4j服務(wù)器發(fā)出請(qǐng)求。注意,blot驅(qū)動(dòng)是使用連接池連接數(shù)據(jù)庫(kù)的,所以,你能看到1個(gè)IP會(huì)有多個(gè)客戶端。
查詢?nèi)罩?/b>Query Log標(biāo)簽頁(yè),使用查詢?nèi)罩拘凶鳛榱藰?biāo)頭。更多的信息則需要拖動(dòng)水平滾動(dòng)條才能看到。在第一個(gè)Query Analysis標(biāo)簽頁(yè)里選擇一個(gè)查詢點(diǎn)擊“Highlight",再點(diǎn)擊Filter時(shí),就會(huì)跳到這個(gè)頁(yè)面,且只顯示你選中的請(qǐng)求日志記錄。這時(shí),你可以拷貝這個(gè)標(biāo)簽頁(yè)中的請(qǐng)求和參數(shù)去分析一個(gè)請(qǐng)求。
Query Timeline是一個(gè)實(shí)驗(yàn)性的功能,它繪制出了每時(shí)間段(默認(rèn)5分鐘)查詢總量和每秒種平均查詢次數(shù)。它是基于日志文件中記錄的時(shí)間,而不是查詢開(kāi)始時(shí)間。通過(guò)這張圖,可以快速的了解到服務(wù)器是什么什么時(shí)候請(qǐng)求最多。
查詢?nèi)罩痉治銎鞯脑创a在github的 kvegter/query-analyzer-app(https://github.com/kvegter/query-analyzer-app) 上,可以在那里閱讀文檔和報(bào)bug.
如果你有任何關(guān)于查詢性能的問(wèn)題,可以前往Neo4j Users Slack或Neo4j Community上#help-cypher頻道咨詢。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/17930.html
摘要:默認(rèn)采用實(shí)現(xiàn)可定制,如自定義實(shí)現(xiàn)的索引,但默認(rèn)新建的索引只支持精確匹配,模糊查詢的話需要以全文索引,控制后臺(tái)的分詞行為。本文以常用的分詞器為例,介紹如何在中對(duì)字段新建全文索引實(shí)現(xiàn)模糊查詢。 數(shù)據(jù)庫(kù)檢索效率時(shí),一般首要優(yōu)化途徑是從索引入手,然后根據(jù)需求再考慮更復(fù)雜的負(fù)載均衡、讀寫(xiě)分離和分布式水平/垂直分庫(kù)/表等手段;索引通過(guò)信息冗余來(lái)提高檢索效率,其以空間換時(shí)間并會(huì)降低數(shù)據(jù)寫(xiě)入的效率,因...
閱讀 1746·2023-04-26 02:11
閱讀 3063·2023-04-25 16:18
閱讀 3770·2021-09-06 15:00
閱讀 2710·2019-08-30 15:55
閱讀 1994·2019-08-30 13:20
閱讀 2106·2019-08-26 18:36
閱讀 3195·2019-08-26 11:40
閱讀 2635·2019-08-26 10:11