2016-11-13 44 views
0

我在玩MemSQL,它看起來非常快。但是當我執行SELECT * FROM [some big table]通常需要很長時間。我可以在MemSQL Opt中看到很多流量,幾乎沒有CPU /內存使用情況。我已經設置我的sql編輯器(DataGrip)獲取只有500行,但它沒有幫助(我知道我可以使用限制命令)。在MemSQL中選擇*

我的問題是怎麼回事?是否所有的分區都會將所有結果都傳輸到我的客戶端,然後纔會只讀取500行?有什麼辦法如何監測這個?

+0

你的數據如何分解? – eklhad

回答

0

發生了什麼事情是非常情況依賴的,但是您可以使用EXPLAIN SELECT * FROM [some big table],它應該告訴您查詢在廣義上做了什麼,可以指示查詢執行中的哪個步驟花了很長時間

如果不會將所有結果傳輸到客戶端,那麼客戶端會爲您添加一個限制。您可以使用show plancache並查找是否存在SELECT * FROM [some big table] LIMIT 500以查看您的客戶端是否正在自動添加它。如果它正在運行帶有限制的查詢,它應該會快得多,但它不會讓我感到驚訝,因爲它只是截斷了結果 - 這完全不會提高速度。

如果你監視CPU,內存,磁盤I/O和網絡,那麼你基本上已經覆蓋了一切。除非你使用列存儲,否則根本不應該使用磁盤,所以存在錯誤或網絡瓶頸。最可能的罪魁禍首是粗略的分佈式連接,這些可能會非常緩慢 - 特別是在較舊的版本中。

0

當你執行這樣的查詢時,agregator需要獲取所有從樹葉的行,並將其流式傳輸到客戶端。聚合器在客戶端讀取行之前讀取行,所以它將在網絡上傳輸大量500多行,直到它填充緩衝區。使用LIMIT是讀取有限數量的行的正確方法。