簡體   English   中英

mariadb:性能並行查詢

[英]mariadb: performance parallel queries

我們需要您的幫助,以進一步了解mariadb 10.2的內部結構。

我們有一個復雜的查詢。 如果我們單獨運行此查詢,則需要5秒鍾。 但是,如果我們並行運行相同的查詢,則每個查詢的運行時間更長。

查詢在where部分包含一個隨機整數,因此我們不使用查詢緩存。 我們的服務器有4個cpus。

我們的觀察:

(1)運行1個查詢=>〜5秒

(2)運行相同的查詢4次(並行)=>每個查詢運行約5.5秒

(3)運行同一查詢7次(並行)=>每個查詢運行〜7秒

(4)運行相同的查詢10次(並行)=>每個查詢運行〜11秒

我們優化了查詢,即不需要臨時磁盤表。 我們可以看到,所有4個cpus的負載回旋約為80-90%。

但是我們不知道為什么執行時間如此不同。

謝謝,雷內

您是否曾經因為打開太多應用程序而使筆記本電腦速度變慢?

任何計算機都有有限數量的資源。 CPU,RAM,磁盤。 如果您運行一個使用大量資源的流程,則下一個流程的可用資源將減少。

並行線程相同,每個線程都運行一個查詢。 他們每個人都需要使用一些CPU來處理數據。 如果數據在磁盤上,則需要將其加載到緩沖池中,這會占用一些磁盤帶寬。

此外,某些內部數據結構需要全局鎖定。 就像兩個線程試圖將頁面加載到緩沖池中一樣,兩個線程都需要一個全局鎖,以便它們可以找到空閑頁面。 一個線程抓住該鎖,執行其工作,然后釋放該鎖。 在此期間,第二個線程一直在等待。 這種情況每秒發生很多次,但是線程越多,爭用就越多。

讓我們嘗試加快查詢速度。

聽起來查詢正在執行表掃描或其他一些I / O密集型任務。 請注意,磁盤(在大多數系統中)是單線程的。 也就是說,您的“並行”不會擴展到I / O。

“我們優化了查詢,不需要臨時磁盤表。” -這只是許多優化中的一種。 讓我們看更多。

您有“綜合”索引嗎?

您是否在函數調用中隱藏了索引列?

向我們顯示查詢,以及SHOW CREATE TABLEEXPLAIN SELECT ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM