【发布时间】:2016-02-22 14:13:59
【问题描述】:
当使用 C# 对 MemSQL 安装执行插入甚至选择语句时,速度非常慢。在数据库服务器上执行的查询非常快。
所以查询代码和 MemSQL 之间的某些东西没有执行。在执行示例插入程序时,它每秒只插入 40-60 条记录,但在进行速度测试时,它每秒插入 220 万条记录。所以问题需要在其他地方。有什么想法吗?
【问题讨论】:
标签: singlestore
当使用 C# 对 MemSQL 安装执行插入甚至选择语句时,速度非常慢。在数据库服务器上执行的查询非常快。
所以查询代码和 MemSQL 之间的某些东西没有执行。在执行示例插入程序时,它每秒只插入 40-60 条记录,但在进行速度测试时,它每秒插入 220 万条记录。所以问题需要在其他地方。有什么想法吗?
【问题讨论】:
标签: singlestore
听起来瓶颈是您连接/运行查询的方式。例如,您可能一次只运行一个插入,在这种情况下,所有时间都花在等待往返连接延迟上。如果您还没有的话,我建议您尝试的第一件事是在每个查询中插入多行并同时运行多个查询。有关一些示例,请参阅http://docs.memsql.com/latest/concepts/multi_insert_examples/#c。如果你已经在做这些,你能分享更多关于你如何运行测试的细节吗?
【讨论】:
问题在于 MySQL 协议本身。这种连接(以及几乎所有的关系数据库有线协议)需要发送、处理并由客户端接收查询以完全完成。
这意味着按顺序运行查询的单个线程必须等待每个查询执行完整的往返。您可以通过并行进行多个查询来使用多个线程来提高吞吐量(推荐的线程等于可用的内核)。您还可以使用异步方法,以便尽可能快地处理并且只等待 I/O。
您还可以将多个 INSERT 语句批处理到一个查询中,这将提高吞吐量。
结合使用所有这些技术将使您获得更高的性能。
【讨论】: