使用MySQL Connector for .net打开MySQL连接非常慢

时间:2012-09-12 17:41:56

标签: c# mysql c#-4.0 azure mysql-connector

我正在尝试解决使用MySQL Connector for .net打开连接时MySQL的响应时间非常长的问题。

我已经安装了使用--skip-name-resolve在Azure VM(Server 2008)上运行的MySQL 5.5,并且数据库用户帐户的主机限制正在使用IP地址。我在Azure上运行的WCF服务中使用最新的MySQL Connector for .net(在美国东部的同一位置,我一直使用试用订阅,没有设置亲和力)。我在WCF服务中的连接字符串使用托管MySQL的VM的内部IP地址作为服务器参数值。我也有“pooling = true; Min Pool Size = 2;”以防万一(我试过没有这些参数)。

在跟踪WCF时,一旦服务运行并处理请求的查询响应时间非常好(即使每个查询结果都是唯一的,因此不会被缓存)我对MySQL的性能没有任何问题,因为它受到了影响频繁。

但是我无法破解的一个巨大问题是在没有调用数据库约3或4分钟后获得与MySQL Open的连接所需的时间 。如果几分钟内没有数据库调用,则再次打开连接需要8或9秒或更长时间。我包裹了实际的“conn.open();”在调用之前和之后使用跟踪语句,这是我看到在几分钟不活动后一次又一次记录的行为。

顺便说一句,我也尝试过(并且仍在使用)连接处理的“使用”方式,以确保MySQL Connector正在管理连接池。

例如为: using(var conn = new MySqlConnection(Properties.Settings.Default.someConnectionString)){... statements ..}

我觉得我已经走到了死胡同,所以任何建议都会受到高度赞赏。

1 个答案:

答案 0 :(得分:2)

我可以解释你的问题“在没有对数据库进行大约3或4分钟的调用之后,连接到MySQL Open所需的时间长度。如果没有数据库调用几分钟再次打开连接需要8或9秒或更长时间。“为什么会发生这种情况:

Windows Azure网站使用热(活动)和冷(非活动)网站的概念,其中如果网站没有活动连接,则网站进入冷状态意味着主机IIS进程退出。当与该网站建立新连接时,需要几秒钟才能使网站准备就绪并正常工作。虽然您有与此网站关联的MySQL后端,但由于IIS主机进程需要一些时间才能启动,因此获取所请求的服务需要几秒钟的时间。这是活动几分钟后响应时间更长的原因。

有关Windows Azure Hot(活动)和Cold(非活动)网站的更多详细信息,您可以看到以下演示文稿: http://video.ch9.ms/teched/2012/na/AZR305.pptx

正是这个时候,我不确定并且不知道如何保持网站始终热门,即使转移到共享网站或根本不可能。我可以建议您将问题写入Windows Azure WebSites Forum,该团队中的某个人会为您提供适当的答案。