close

原本對 Sybase 查詢的程式,配合資料庫要移轉到 MSSQL (SQL server),要做調整。發現在執行到 fetch 時奇慢無比,在 SQL server management studio 裡可以秒回的查詢,在程式裡要跑 12~15 秒。

execute 回應的速度很快,真正卡住的點是 fetch()。所以用 "PHP pdo fetch slow" 當關鍵字找了一些解法:

 

後來同事說要在綁 PDO 的 prepare 時增加參數,原本為了抓 RowCount() 的寫法是:

<?php $sth = $dbh->prepare($sql, array(
PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL
)); ?>

再加一個參數 PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE,改成:

<?php $sth = $dbh->prepare($sql, array(
PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL,
PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED
)); ?>

但加上 SQLSRV_CURSOR_BUFFERED 後會吃記憶體,連線數變多時,系統負載會增加。詳細可參考:《資料指標類型 (PDO_SQLSRV 驅動程式)》

目前想到最好的方法是資料筆數另外取,不要用到 PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL

arrow
arrow
    文章標籤
    PHP PDO mssql sql server
    全站熱搜
    創作者介紹
    創作者 小攻城師 的頭像
    小攻城師

    小攻城師的戰場筆記

    小攻城師 發表在 痞客邦 留言(1) 人氣()