Ich habe eine MySQL-SELECT-Abfrage, die einige Minuten dauert, wenn sie in SQLyog (der von mir verwendeten GUI) ausgeführt wird. Wenn ich versuche, genau dieselbe Abfrage über PowerShell (mit SimplySQL) auszuführen, schlägt dies immer nach 30 Sekunden fehl. Ich bin mir nicht sicher, welche Timeout-Variable mich einschränkt oder ob es in meiner PS-Umgebung überhaupt andere Einstellungen gibt, die ein Timeout von 30 Sekunden haben. Ich habe diese Timeout-Werte in der my.cnf-Datei des Linux-MySQL-Servers festgelegt und MySQL neu gestartet. Aber kein Erfolg:
net_read_timeout=600 mysqlx_read_timeout=600 mysqlx_connect_timeout=600
Ich habe bei Google nach MySQL- und Timeout-Werten gesucht, aber keine Antwort gefunden. Meine beiden Fragen lauten also: Welche andere Variable namens 30-Sekunden-Timeout kann ich überschreiben, oder gibt es eine andere Möglichkeit, den Unterschied zwischen der Ausführung der Abfrage in meinem interaktiven Tool und der Ausführung in der PS-Sitzung herauszufinden? (Hinweis: Ich kann die Abfrage nicht so beschleunigen, dass sie immer in 30 Sekunden abgeschlossen wird)
Wenn ich mein PS betreibe, brauche ich nur:
Open-MySQLConnection -ConnectionString ... Invoke-SqlQuery -Query ... Invoke-SqlQuery -Query "SHOW VARIABLES LIKE '%timeout%'"
(Die letzte Zeile zeigt, dass ich jede MySQL-Variable mit dem Namen „timeout“ erfolgreich überschrieben habe.)
PowerShell在幕后使用.Net连接类来完成这个操作,而这些对象需要一个连接字符串。连接字符串通常允许包含连接的超时时间。具体的超时时间设置取决于你使用的具体驱动程序,而且很不幸在Connectionstrings.com上没有很好的文档说明,但是下面是一个示例:
否则,你可能可以为连接对象本身设置一个超时属性...但是我们需要查看PowerShell连接的代码才能知道具体是什么样的。
也有可能PowerShell代码将其转交给了ODBC数据源,其中连接字符串只是类似
DSN=MyDataSource
的内容。在这种情况下,你需要查看数据源的配置。