flush 快取對inmemory有什麼影響?

xuexiaogang發表於2023-02-22

首先我們模擬寫入1000萬資料。圖1這個由於我儲存過程中寫了一些運算,所以以每秒不到5000條的速度寫入,這個效能未達到最佳。

flush 快取對inmemory有什麼影響?

                                                       圖1 

我們的表是無主鍵無索引。如下面連續3副圖。

flush 快取對inmemory有什麼影響?

flush 快取對inmemory有什麼影響?

flush 快取對inmemory有什麼影響?

我們來看一下全表查詢的消耗。1000萬需要2秒。因為大量讀取了磁碟IO。

flush 快取對inmemory有什麼影響?

                                                           圖2

再一次執行這句,只要470毫秒,0.47秒完成。因為都在快取處理了,所以沒有 physical reads磁碟讀,只有一致性讀。

flush 快取對inmemory有什麼影響?

                                                           圖3

當我換了一列的適合這是是count(a)而不是count(*).那麼還是產生了一些磁碟讀。如圖4

flush 快取對inmemory有什麼影響?

                                                                                     圖4

我再SUM一下a列,全是一致性讀,沒有磁碟讀。如圖5

flush 快取對inmemory有什麼影響?

                                                                                         圖5

對a列做其他的聚合,效果一樣。如圖6

flush 快取對inmemory有什麼影響?

這個時候我們把快取清掉。再查詢。如圖7,會發現 physical reads多了,而且執行的時間也到1.7秒,慢了很多。因為清除快取重新載入需要時間。

flush 快取對inmemory有什麼影響?

                                                                                         圖7

開啟inmemory,設定引數3G,並且開啟多個程式載入。如圖8

flush 快取對inmemory有什麼影響?

                                                                                圖8

把xxg的表載入到inmemory中去。如圖9

flush 快取對inmemory有什麼影響?

                                                                                圖9

然後再次執行全表聚合。780毫秒完成。一致性讀只有9了。比起之前的5萬多,可以說忽略不計。如圖10

flush 快取對inmemory有什麼影響?

                                                                                            圖10

換其他列,發現也是如此。如圖11

flush 快取對inmemory有什麼影響?

                                                                              圖11

這個時候最好收集一下統計資訊,如圖12

flush 快取對inmemory有什麼影響?

                                                                                   圖12

然後做極值函式的測試。如圖13  14。可以看出max min都很穩定20毫秒(全表無索引的情況下)  統計資訊的rows也準了。

flush 快取對inmemory有什麼影響?

                                                                                          圖13


flush 快取對inmemory有什麼影響?

                                                                                      圖14

然後這個時候去count這個表,全表。如圖15也只有20毫秒。和之前圖2的全磁碟2秒,圖3的全記憶體470毫秒都是較大的提升。圖2和圖3都沒有使用inmemory,也沒有收集統計資訊。

flush 快取對inmemory有什麼影響?

                                                             圖15

這個時候也像剛才一樣清空快取如圖16.會發現重新執行inmemory表的聚合,這裡是count c列也會產生磁碟讀,但是是48,比起原來沒有inmemory清空快取的5萬多來說,也可以說忽略不計了。

flush 快取對inmemory有什麼影響?

                                                                         圖16

這個時候去count其他列這裡是count a列,如圖17。1000萬單表的聚合是10-20毫秒。所以1億的單表聚合也在1秒左右這都是正常的。

flush 快取對inmemory有什麼影響?

                                                                                圖17

小結:重新整理快取對傳統來說有較大影響,對載入到inmemory的表影響很小。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/637517/viewspace-2936505/,如需轉載,請註明出處,否則將追究法律責任。

相關文章