我正在尝试解决使用 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 的连接所需的时间长度. If 几分钟内没有进行任何数据库调用,需要 8 或 9 秒或更长时间才能再次打开连接。我包装了实际的“conn.open();”在调用之前和之后使用跟踪语句,这是我在几分钟不活动后一次又一次看到记录的行为。
顺便说一句,我也尝试过(并且仍在使用)“使用”风格的连接处理,以确保 MySQL 连接器正在管理连接池。
例如。:
using (var conn = new MySqlConnection(Properties.Settings.Default.someConnectionString)) { ... 语句 ..}
我觉得我在这方面已经走进了死胡同,所以任何建议将不胜感激。
我可以解释你的问题“在大约 3 或 4 分钟内没有对数据库进行任何调用之后,获得与 MySQL Open 的连接所需的时间长度。如果几分钟内没有进行任何数据库调用,则需要 8 或 9 秒或更长时间才能打开 MySQL再次连接。”为什么会发生:
Windows Azure 网站使用热(活动)和冷(非活动)站点的概念,其中如果网站没有活动连接,则站点将进入冷状态,意味着主机 IIS 进程退出。当与该网站建立新连接时,需要几秒钟的时间才能使该网站准备就绪并正常运行。虽然您有与此网站关联的 MySQL 后端,但由于 IIS 主机进程需要一些时间才能启动,因此需要多花几秒钟才能获得请求的服务。这就是活动几分钟后响应时间较长的原因。
您可以查看以下演示,了解有关 Windows Azure 热(活动)和冷(非活动)网站的更多详细信息:http://video.ch9.ms/teched/2012/na/AZR305.pptx
这次,我不确定也不知道如何让网站始终保持热度,即使转移到共享网站还是根本不可能。我可以建议您将问题写到什么地方Windows Azure 网站论坛该团队的某个人将为您提供适当的答案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)