[英]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 TABLE
和EXPLAIN SELECT ...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.