第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

PDO MYSQL_ATTR_USE_BUFFERED_QUERY 不生效

PDO MYSQL_ATTR_USE_BUFFERED_QUERY 不生效

PHP
郎朗坤 2023-04-21 16:50:33
我有如下粗略的代碼(完整代碼146行,其中90行是字符串解析,需要的可以補(bǔ)充):ini_set('memory_limit', '7G');$db = new PDO("mysql:host=".$dbhost.";dbname=".$dbname, $dbuser, $dbpass, array(PDO::ATTR_PERSISTENT => true));$db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);$db_ub = new PDO("mysql:host=".$dbhost.";dbname=".$dbname, $dbuser, $dbpass, array(PDO::ATTR_PERSISTENT => true));$db_ub->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);$stmt = $db->prepare('select columns from stats where timestamp between ? and ?');$stmt->execute(array('2020-04-25', '2020-05-25'));while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {      echo memory_get_usage() .PHP_EOL;      echo $row['id'] . PHP_EOL;      $stmt2 = $db_ub->prepare('select somedata from users limit 1');      $stmt2->execute();      $row2 = $stmt2->fetch(PDO::FETCH_ASSOC);      $type = !empty($row2['somedate']) ? 5 : 4;      $result = $db_ub->prepare('insert ignore into newtable (old, type) values (?, ?)');      $result->execute(array($row['id'], $type));}在$stmt->execute(array('2020-04-25', '2020-05-25'));我的內(nèi)存消耗期間.34GB(用于ps aux | grep 'php ' | awk '{$5=int(100 * $5/1024/1024)/100"GB";}{ print;}'監(jiān)視消耗select和show full processlistSQL 端驗(yàn)證)。一旦腳本進(jìn)入,while它就會跳轉(zhuǎn)到 +5 GB。測試setattributevar_dump($db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false));好像已經(jīng)生效了:bool(true)但是當(dāng)我切換緩沖或無緩沖時(shí),行為不會改變。$db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false)和$db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true)使用echo $db->getAttribute(constant('PDO::MYSQL_ATTR_USE_BUFFERED_QUERY'));還顯示設(shè)置更改。將設(shè)置移動到語句而不是https://www.php.net/manual/en/ref.pdo-mysql.php建議的連接也沒有用。$stmt = $db->prepare('select columns from stats where timestamp between ? and ?', array(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => false));我也試過將緩沖區(qū)設(shè)置移動到連接而沒有影響:$db = new PDO("mysql:host=".$dbhost.";dbname=".$dbname, $dbuser, $dbpass, array(PDO::ATTR_PERSISTENT => true, PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => false));
查看完整描述

3 回答

?
POPMUISE

TA貢獻(xiàn)1765條經(jīng)驗(yàn) 獲得超5個(gè)贊

該P(yáng)DO::ATTR_PERSISTENT值不是布爾值。它標(biāo)識正在使用的連接,對多個(gè)連接使用唯一值。就我而言:


$db = new PDO("mysql:host=".$dbhost.";dbname=".$dbname, $dbuser, $dbpass, array(PDO::ATTR_PERSISTENT => 'unbuff', PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => false));

$db_ub = new PDO("mysql:host=".$dbhost.";dbname=".$dbname, $dbuser, $dbpass, array(PDO::ATTR_PERSISTENT => 'buff', PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true));



查看完整回答
反對 回復(fù) 2023-04-21
?
米脂

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超3個(gè)贊

難道你不能通過簡單地運(yùn)行一個(gè)查詢來擺脫大部分代碼:


?INSERT IGNORE INTO newtable

? ? ?SELECT? ...,

? ? ? ? ? ? ?IF(..., 5, 4)

? ? ? ? ?FROM oldtable WHERE ...;

這樣,您就可以擺脫 7G 內(nèi)存問題。


如果結(jié)果證明一次做太多,那就把它分成塊。


另一個(gè)話題:為什么select somedata from users limit 1在循環(huán)內(nèi)執(zhí)行?似乎每次都得到相同的數(shù)據(jù)。此外,如果沒有ORDER BY,您將無法預(yù)測limit 1您將獲得哪一行。


查看完整回答
反對 回復(fù) 2023-04-21
?
慕后森

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超5個(gè)贊

您實(shí)際上是在進(jìn)行 135000000 次查詢,而不是迭代 135000000 個(gè)對象。


將代碼更改為僅執(zhí)行一個(gè)查詢,但對元素進(jìn)行排序,就好像它們在您的 for 循環(huán)中一樣。


$db = new PDO("mysql:host=".$dbhost.";dbname=".$dbname, $dbuser, $dbpass, array(PDO::ATTR_PERSISTENT => true));

$stmt = $db->prepare('SELECT * FROM stats ORDER BY id ASC');

$stmt->execute();

while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {

    // ...

}

你甚至不需要這個(gè)if,它是數(shù)據(jù)庫本身可以更快使用的邏輯:


如果(!empty($row['id'])) {


反而:


SELECT * FROM stats WHERE id IS NOT NULL ORDER BY id ASC

我有一段時(shí)間沒有研究 PDO/MySQL,但我假設(shè) unbuffered 允許你使用游標(biāo):


$pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);

考慮到每個(gè)連接只能激活一個(gè)查詢。您基本上是在使用連接的緩沖區(qū)。


更好的選擇是在 map reduce 中只加載小塊。


SELECT * FROM stats LIMIT 100, 0

使用結(jié)果,然后


SELECT * FROM stats LIMIT 100, 100


查看完整回答
反對 回復(fù) 2023-04-21
  • 3 回答
  • 0 關(guān)注
  • 335 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號