鍍金池/ 問(wèn)答/PHP/ swoole異步mysql獲取大數(shù)據(jù)時(shí)直接退出沒(méi)返回?cái)?shù)據(jù)

swoole異步mysql獲取大數(shù)據(jù)時(shí)直接退出沒(méi)返回?cái)?shù)據(jù)

  • 最簡(jiǎn)單地使用swoole的異步mysql客戶端獲取10萬(wàn)數(shù)據(jù),在一個(gè)環(huán)境下的php7下花費(fèi)一段長(zhǎng)時(shí)間后能執(zhí)行query的回調(diào)方法輸出數(shù)據(jù),但是在另外一個(gè)環(huán)境的php5.4下卻什么報(bào)錯(cuò)都沒(méi)有直接退出了,沒(méi)有執(zhí)行到query的回調(diào)的函數(shù)。

我猜測(cè)是PHP的配置不同影響的,1萬(wàn)數(shù)據(jù)是沒(méi)問(wèn)題,但是不知道應(yīng)該怎么修改配置

$db->connect($server, function ($db, $r) {
    $dbPreix = "m_";
    if ($r === false) {
        var_dump($db->connect_errno, $db->connect_error);
        die;
    }
    //獲取隊(duì)列數(shù)據(jù)
    $sql = 'SELECT queue_id,group_id,content,data,keyword FROM '.$dbPreix.'_queue '.
            'WHERE 1=1 limit 100000';
    $db->query($sql, function(swoole_mysql $db, $r) {
        print_r($r);
    });
回答
編輯回答
氕氘氚

你這應(yīng)該是內(nèi)存溢出導(dǎo)致的。內(nèi)存溢出的配置是php.ini,可能配置不一樣導(dǎo)致。

解決方法:不要一次性查詢,分批次查詢?cè)诨卣{(diào)(做法參考分頁(yè)原理)

2018年4月27日 04:11
編輯回答
枕頭人

解決方法:減少查詢數(shù)據(jù)量或加大php運(yùn)行內(nèi)存。

在php.ini中,找到"memory_limit"這一項(xiàng),如果沒(méi)有,你可以在文件的尾部自己增加這個(gè)參數(shù)。

memory_limit = 128M ; #可以將128M改為任何你想設(shè)置的值

也可以直接在代碼里面改

ini_set('memory_limit', '128M');
2017年9月26日 23:44