我有一个MySQL SELECT查询,在SQLyog(我使用的GUI)中运行时需要几分钟的时间。当我尝试通过PowerShell(使用SimplySQL)运行完全相同的查询时,它总是在30秒时失败。 我不确定是哪个超时变量限制了我,或者甚至是否有其他在我的PS环境中有30秒超时的设置。 我已经在Linux MySQL服务器的my.cnf文件中设置了这些超时值,并重新启动了MySQL。但是没有成功:
net_read_timeout=600 mysqlx_read_timeout=600 mysqlx_connect_timeout=600
我已经在Google上搜索了MySQL和超时值,但没有找到答案。 所以我的两个问题是:还有哪些名为30秒超时的变量我可以覆盖,或者是否有其他方法来找出查询在我的交互式工具中运行方式与在PS会话中运行方式之间的差异? (注意:我无法将查询加速以在30秒内始终完成)
当我运行我的PS时,我只需要:
Open-MySQLConnection -ConnectionString ... Invoke-SqlQuery -Query ... Invoke-SqlQuery -Query "SHOW VARIABLES LIKE '%timeout%'"
(最后一行显示我已成功覆盖了任何名为“timeout”的MySQL变量。)
PowerShell在幕后使用.Net连接类来完成这个操作,而这些对象需要一个连接字符串。连接字符串通常允许包含连接的超时时间。具体的超时时间设置取决于你使用的具体驱动程序,而且很不幸在Connectionstrings.com上没有很好的文档说明,但是下面是一个示例:
否则,你可能可以为连接对象本身设置一个超时属性...但是我们需要查看PowerShell连接的代码才能知道具体是什么样的。
也有可能PowerShell代码将其转交给了ODBC数据源,其中连接字符串只是类似
DSN=MyDataSource
的内容。在这种情况下,你需要查看数据源的配置。