MemSQL

时间:2016-11-13 11:06:29

标签: memsql

我正在使用MemSQL,它似乎非常快。但是当我执行SELECT * FROM [some big table]时,通常需要很长时间。我可以在MemSQL Opt中看到很多流量,几乎没有CPU /内存使用量。我已经将我的sql编辑器(DataGrip)设置为仅获取500行,但它没有帮助(我知道我可以使用limit命令)。

我的问题是发生了什么?是否所有分区都将所有结果传输到我的客户端,之后只能获取500行?有什么方法可以监控吗?

2 个答案:

答案 0 :(得分:0)

发生了什么情况非常依赖于情境,但您可以使用EXPLAIN SELECT * FROM [some big table],这应该告诉您查询在广义上做了什么,可以告诉您查询执行中的哪个步骤正在执行很长一段时间

如果它不会将所有结果传输到客户端,那么客户端正在为您添加限制。您可以使用show plancache并查找是否存在SELECT * FROM [some big table] LIMIT 500,以查看您的客户是否自动添加该Public Sub saveAttach(itm As Outlook.MailItem) Dim objAtt As Outlook.Attachment Dim saveFolder As String Dim pos As Integer saveFolder = "C:\Location\to\be\save\" For Each objAtt In itm.Attachments pos = InStr(objAtt.DisplayName, "Name of the attachment to save") If pos <> 0 Then objAtt.SaveAsFile saveFolder & objAtt.DisplayName Set objAtt = Nothing End If Next End Sub 。如果它运行带有限制的查询,它应该会更快,但如果它只是截断你的结果,那就不会让我感到惊讶 - 这根本不会提高速度。

如果你监控cpu,内存,磁盘I / O和网络,那么基本上你已经掌握了所有内容。除非您使用列存储,否则根本不应使用磁盘,因此存在错误或网络瓶颈。最可能的罪魁祸首是粗略的分布式连接,这些连接可能非常慢 - 特别是在旧版本中。

答案 1 :(得分:0)

当您执行类似的查询时,agregator需要从叶子中获取所有行,并将它们流式传输到客户端。聚合器在客户端读取行之前获取行,因此它将通过网络传输超过500行,直到它填充其缓冲区。使用LIMIT是读取有限行数的正确方法。