intermitent延遲我們將我們的數據庫連接從ADODB切換到SQLSRV,我似乎有問題導致使用sqlsrv_fetch_array intermitent延遲。PHP SQLSRV具有sqlsrv_fetch_array/sqlsrv_fetch
我在我的數據庫中做了一個查詢,返回大約426行5個字段。
的代碼看起來是這樣的(速度基準目的,我真正刪除任何東西它在做什麼):
$conn = sqlsrv_connect($host, array("UID"=>$userName,"PWD"=>$password,"Database"=>$dbName,"QuotedId"=>false, "CharacterSet" =>"UTF-8");
$rsText=sqlsrv_query($conn,$sqlStr,array(),
array(
"Scrollable"=>SQLSRV_CURSOR_STATIC
));
$row = array(1);
while(count($row) != 0){
$row=sqlsrv_fetch_array($rsText,SQLSRV_FETCH_BOTH, SQLSRV_SCROLL_NEXT);
}
與ADODB運行這需要我周圍的50毫秒。使用sqlsrv運行它需要500-1000毫秒。原始查詢(sqlsrv_query)對於sqlsrv實際上比ADODB更快,但對於sqlsrv_fetch_array存在隨機時間延遲(實際上,我使用sqlsrv_fetch進行了測試並獲取它們)。我每次打電話時都會記錄ms,而每次打電話通常爲0-1ms,有時會達到15ms。爲什麼我說它的隨機性是,如果我多次重新運行代碼,延遲不會發生在同一個地方,並且數量會有所不同,所以這不是因爲特定的行很大(它們都不是這兩種方式中的任何一種) 。
有沒有人有任何想法,我可以看看這可能是這樣做的,無論是參數或配置的地方?我不認爲這是服務器/網絡相關的,因爲ADODB從來沒有這樣做。我們使用PHP 5.6和php_sqlsrv_56_ts.dll/php_pdo_sqlsrv_56_ts.dll和SQL Server 2008.
謝謝!
不同的提取和滾動類型如何?例如,讓它們保留默認參數,時間間隔是多少?看起來這是關於dll中的一些發泄操作。 – alalp
謝謝你的建議,改變滾動類型的工作!看來SQLSRV_CURSOR_STATIC是問題所在。我嘗試了所有的選項,並且SQLSRV_CURSOR_FORWARD給出了與ADODB完全相同的速度。你失去了前進/後退的能力,但這不是一個大問題。 SQLSRV_CURSOR_CLIENT_BUFFERED變得非常快,但在某些情況下存在內存問題。所有其他允許向前和向後移動的選項在速度方面與SQLSRV_CURSOR_STATIC具有相同的問題,因此必須具有某些內容。 如果你想寫這個答案,我會接受它。 – user3242224
你可以添加你自己的答案,因爲你測試了他們,你對此有更好的瞭解。我不想複製粘貼你的評論:) – alalp