0
我在IIS上運行Laravel 4,並使用SQL Server作爲數據庫。我在Laravel使用雄辯來查詢數據庫。除此之外的所有查詢都使用此方法非常快速地運行。一個未運行的查詢在30秒後超時。當我從SQL Profiler獲取原始SQL並從命令行運行它時,它在1秒內完成。我試圖找出爲什麼從Web應用程序運行SQL並從命令行(SQL Server Management Studio)運行SQL之間存在這樣的時間差異。在運行每個查詢之前,我們清除了緩存,結果相同。SQL Server選擇在1秒內從命令行運行,但在30秒內從網站超時運行
我Laravel雄辯代碼(超時):
$checks = SQLServerHostLastCheck::where('organization_id', '=', Session::get('currentIssueTrakOrganizationID'))
->where('hostname', '=', $hostname)
->orderBy('check_level')
->orderBy('instance_name')
->orderBy('check_description')
->get();
我也試過這種方式(超時):
$checks = DB::table('sql_server_host_last_check_all_v')
->where('organization_id', '=', Session::get('currentIssueTrakOrganizationID'))
->where('hostname', '=', $hostname)
->get();
這是從SQL事件探查器的原始SQL(1完成秒):
select * from [sql_server_host_last_check_all_v] where [organization_id] = 1 and [hostname] = 'PSMWISSUE01' order by [check_level] asc, [instance_name] asc, [check_description] asc;
該查詢返回66行,總共有15列。每個字段中只有少量數據。
你的結果可能被緩存了,所以當你第二次運行它時,它會很快出現。嘗試不同的值,看看是否需要更長的時間。 – cmorrissey
@Christopher Morrissey即使當我更改值時,命令行查詢在1秒內完成。我們還清除了正在運行的查詢之間的緩存,結果相同。 – thestepafter
爲什麼你拉回所有列?你的表中是否有任何大數據(如varchar(max)或varbinary)?可能需要一段時間才能發送大量數據,例如網絡連接 – Sparky