为每个查询初始化与MYSQL的连接有多糟糕?

时间:2014-03-03 10:39:19

标签: c++ mysql multithreading

我有一份申请,是我在过去几年写的并且正在编写的。该应用程序作为策略mmo服务器端。 该应用程序使用MySql c ++连接器。 如您所知,MySql不能与多个线程的一个连接一起使用。所以,虽然我的应用程序是多线程的,但它被设计为从一个线程使用MySql。 现在我决定从主线程中删除一些功能主义者并将它们放在另一个线程中。事实上,我将为某些任务创建新线程。

我知道它可能有点奇怪和错误,而且我知道我不应该创建很多与数据库的连接,但是如果我忘记连接池并为每个查询创建连接会发生什么?< / p>

有没有人知道如果我这样做会对服务器应用程序产生什么影响?

1 个答案:

答案 0 :(得分:1)

如果我[ sic ]执行此操作,当您向服务器应用程序询问“将会发生什么时,我并不完全清楚你的意思”,但我是假设你担心表现,所以我会尝试回答这个问题。

在“MySQL性能博客”(这里是part onepart two上有一篇关于SSL加密对MySQL性能影响的两篇文章。)我建议你读一读。

作者正在评估使用(内置或其他)SSL加密对MySQL查询吞吐量和延迟的性能开销。这可能听起来不太合适,但作为其基准测试的一部分,他还评估了SSL对不断连接到服务器和从服务器断开连接的程序的影响。

通过比较文章第1部分中的第一个图表(即“Sysbench只读 - 吞吐量”)和第三个图表(即“连接吞吐量”),您将看到在多线程环境中重复连接到服务器将导致每秒执行查询次数减少 10x至20x (从30K-50K减少至少于3K)。

即使是第三张图表也可以告诉你很多。根据该图表,如果您为每个查询创建一个新连接,您将只能以绝对最大值每秒执行少于3000次查询

这可能有助于您计算游戏服务器性能的上限。如果您为每个查询连接到数据库,即使您使用了大量线程,您也只能连接三千个。如果您需要(甚至理论上)每秒超过3K查询,则无法使用此方法。你需要一个连接池或每个线程或一个连接。

有两点需要注意:

  • 每秒3K连接数是指您根本不进行任何查询。你实际上在进行查询,你的号码会更糟。
  • 我链接到的网站(我认为)是由一些Percona开发人员运行的(这是MySQL替代品/替代品。)基准数字对我来说很合理,但您可能想得出自己的结论。