我有一個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
的內容。在這種情況下,你需要查看資料來源的配置。