2011-03-20 3 views
0

mysql 데이터베이스를 업데이트하는 데 문제가 있습니다. ~ 800,000 행 데이터베이스에서이 스크립트를 실행하고 싶지만 LIMIT에 +5를 추가하여이 mysql 쿼리를 자동으로 업데이트해야하는 경우 5 개 행 이후에 메모리가 부족합니다. 메모리 문제 mysql

내가 리디렉션을 사용하거나 어떻게 든 메모리를 재설정 할

..

<?php 

    include(dirname(__FILE__) .'/include/simple_html_dom.php'); 

    mysql_connect('localhost', '', ''); 
    mysql_select_db(''); 

    $result = mysql_query("SELECT gamertag FROM gamertags LIMIT 0, 5 "); 
     while ($row = mysql_fetch_assoc($result)) { 
      $gamertag = $row['gamertag']; 

      //pages to pull stats from 
      $site_url = 'http://www.bungie.net'; 
      $stats_page = 'http://www.bungie.net/stats/reach/default.aspx?player='; 

      //create dom 
      $html = new simple_html_dom(); 
      $html->load_file($stats_page . urlencode(strtolower($gamertag))); 

      //pull nameplate emblem url, ****if it exist**** 
      $nameplate_emblem_el = $html->find("#ctl00_mainContent_identityBar_namePlateImg"); 
      if (!$nameplate_emblem_el){ 
       $nameplate_emblem = 'No nameplate emblem!'; 
      } 
      else{ 
       //only if #ctl00_mainContent_identityBar_namePlateImg is found 
       $nameplate_emblem = htmlspecialchars_decode($nameplate_emblem_el[0]->attr['src']); 
       $nameplate_emblem = $site_url . $nameplate_emblem; 
      } 

      mysql_query("INSERT IGNORE INTO star SET gamertag = '".$gamertag."',nameplate = '".$nameplate_emblem."'"); 
     } 

?> 
+0

왜 선택해야합니까? 모두 800,000 행? 그냥 호기심. 만약 당신이 그들 모두를 어떻게 든 그것을 쿼리를 통해 할 수 없을 것이라고 업데이 트해야합니까? –

+0

메모리를 사용하는 것을 볼 수 있도록 더 많은 코드를 보여 주어야합니다. – Unicron

+0

스크립트의 나머지 부분을 보여 주거나이 목적을 설명해주십시오. 게이머 태그 만 필요하면 mysql_fetch_row()가 더 빠르며 리소스 소모가 적습니다. – guillaumepotier

답변

0

800.000는 키우면가 원하지 경우, 확실하지 않은 많은 수이지만, PHP 매뉴얼에 대한 의견에서 : "해제()는 변수의 이름을 밝히고 변수를 설정하지 않고 즉각적인 메모리 해제를 강요하지 않습니다. PHP 가비지 수집기는 적합 할 때 - 의도적으로 CPU주기가 필요하지 않으므로 또는 늦게 이전처럼 스크립트가 메모리가 부족한 상태가 될 때까지 무엇이든 먼저 발생합니다.

$ whatever = null을 수행하면 va 라이블의 데이터. 메모리를 더 빠르게/더 빠르게 가져올 수는 있지만 코드를 실제로 필요로하는 코드에서 CPU주기를 훔쳐 전체 실행 시간을 길게 할 수 있습니다. "

출처 : http : //php.net/manual/en /function.unset.php

그래서, 해제/각 시간 이후에 변수를 null로 설정 루프가 실행하려고합니다.

0

을 나는 기계를 당신이 당신의 PHP 메모리 제한을 명중 추측하고 아니에요. 만약 그래서, php.ini (일반적으로 /etc/php5/apache2/php.ini)를 편집하여 PHP에 더 많은 메모리를 할당 할 수 있습니다. "memory_limit = X"를 찾으십시오. X는 256M과 같습니다.