[FUG-BR] Servidor com load altíssimo

Leonardo Augusto lalinden em gmail.com
Sexta Julho 6 14:29:19 BRT 2012


cara o lance do mysql persistente connections é no php.ini.....

(php.ini)
mysql.allow_persistent = Off (voce deve estar com ON ali, bota off !!  e testa )

E PELO AMOR DO BSD, INSTALA O MEMCACHE E COLOCA LA NAS QUERYES E NO
SESSION DO PHP.

CARA, SE O MALUCO QUE FUTRICA COM PHP AI, NAO FEZ ISSO, PEGA UM 12  E
ATIRA BEM NA TESTA DO INFELIZ, kkk

mas pra nao dizer que so falo e nao ajudo, pro php usar o memcache
como session handler é so por la no php.ini

; Use memcache as a session handler
session.save_handler=memcache
; Defines a comma separated of server urls to use for session storage
;session.save_path="tcp://localhost:11211?persistent=1&weight=1&timeout=1&retry_interval=15"
session.save_path="tcp://localhost:11211?persistent=1&retry_interval=15"

- pra usar o memcahce no php, tem que instalar o php memcache lib la
ou coisa do tipo...
mas um exemplo de query, gera o hash do sql ve se ja tem, se nao tem
get from mysql and put into memcache, else get from memcache, sacou ?

conectando...

  public function connect() // (obvio que é apenas um metodo de uma
classe extensa)
  {
    $ok = false;
    try
    {
      //if( $this->mode == "TCP" )

      //$this->dbh = new mysqli( $this->dbhost, $this->user,
$this->pass, $this->dbname, null, 'mysql' );
      $this->dbh = new mysqli( $this->dbhost, $this->user,
$this->pass, $this->dbname );

      if( mysqli_connect_errno() )
      {
        throw new Exception( sprintf("FALHA: %s\n", mysqli_connect_error() ) );
      }

      mysqli_set_charset($this->dbh, 'utf8');

      //mysql_query("SET CHARACTER SET utf8", $this->dbh );
      //mysql_query("SET NAMES utf8");
      //mysql_query("SET NAMES 'utf8' COLLATE 'utf8_general_ci'"); //
medida extrema, opcional
      /*
      # Aqui está o segredo
      mysql_query("SET NAMES 'utf8'");
      mysql_query('SET character_set_connection=utf8');
      mysql_query('SET character_set_client=utf8');
      mysql_query('SET character_set_results=utf8');
      conx = mysql_connect(xxxxxxx);
      // dica para shared hosting
      mysql_query("SET CHARACTER SET utf8");
      //mysql_query("SET NAMES utf8");
      //mysql_query("SET NAMES 'utf8' COLLATE 'utf8_general_ci'"); //
medida extrema, opcional
      */

      //-------------------------------------
      //--- Conecta ao memcached
      //-------------------------------------
      $this->memcacheOK = false;
      if( class_exists("Memcache") )
      {
        $this->memcache = new Memcache();
        if( $this->memcache->connect( SYS_CFG("MCHOST"), SYS_CFG("MCPORT") ) )
        {
          $this->memcacheOK = true;
        }
      }

      $ok = true;
    }
    catch( Exception $e )
    {
      $this->errorMsg = "Connect Error (File: ".$e->getFile().", Line
".$e->getLine()."): ".$e->getMessage();
      echo $this->errorMsg;
    }
    return $ok;
  }

// a consulta propriamente dita
  public function queryMC( $query, $timeout=600 )   // timeout==0 => no cache
  {
    $this->errorClear();
    $data = false;

    try
    {
      if( $this->memcacheOK && (int)$timeout > 0 )    // Se timeout==0
nao usa o cache
      {
        $key = md5( $query );
        $data = $this->memcache->get( $key );

        //echo "<!-- ###### PEGOU DO MEMCACHE::: ";
        //if( $data == false ) echo " DATA RETURN FALSE-------";
        //echo $query."-->\n";
      }

      if( $data == false )
      {
        //echo "<!-- @@@@ NAO PEGOU DO MEMCACHE::: ".$query."-->\n";

        $result = $this->dbh->query( $query, MYSQLI_STORE_RESULT );
        if( $result == false )
        {
          throw new Exception( $this->dbh->error );
        }
        else
        {
          $data = array();
          while( $row = $result->fetch_array( MYSQLI_BOTH ) )
          {
            $data[] = $row;
          }
        }

        if( $this->memcacheOK  && (int)$timeout > 0 )  // Se
timeout==0 nao usa o cache
        {
          $this->memcache->set( $key, $data, 0, $timeout );
        }
        $result->close();
        unset( $result);
      }
    }
    catch( Exception $e )
    {
      $this->errorMsg .=
"DBQueryMC(".sysUtil::SYS_GS("last_sysaction")."):
".$e->getMessage()." => ".$query." [".$e->getTraceAsString()."] )";
      $this->errorCode = $e->getCode();
      $this->saveLogError();
      $data = array();
    }

    return $data;
  }


AH LEMBREI DE OUTRA COISA

usar o php com fast_cgi separado do apache(retirando o mod_php de
dentro dele) é melhor.


MAS USA O MEMCACHE CARA, do contrario.... pula da ponte... eheheh

boa sorte


Mais detalhes sobre a lista de discussão freebsd