Suporte » Desenvolvendo com WordPress » Sobrecarga em banco de dados ( 5mil posts)

  • Resolvido Russo

    (@guiali)


    Pessoal é o seguinte, primeiro lugar, gostaria de dizer que os tópicos que abri anteriormente estão fechados para resposta e aparecem como RESOLVIDOS… na verdade não estão.
    Troquei de servidor e perdi 2 anos e meio de postagens diárias (média de 30 posts por dia). Comecei do zero, perdi clientes, perdi index do google, perdi credibilidade e muito mais.. troquei de servidor, pois eles não estavam nem ai pro meu problema…
    Hoje, seis meses depois de estar no novo servidor, que aparece novamente… a sobrecarga… erro 503 e meu site fora do ar novamente, agora com uma pequena observação… eu usava a url padrao (meusite.com.br/?p=123), achei que o servidor estava bem nesses seis meses e inventei de mudar para o permalink… foi a gota d’água… ta fora do ar e sem previsão de quando volta… voltou uns minutinhos, tive tempo de retornar para a url padrão, mas nada… tudo fora do ar novamente… então esse problema é novo, mas é parecido com os anteriores, que volto a dizer, não estão resolvidos… tem alguém que pode ajudar a resolver esse problema de sobrecarga???

Visualizando 14 respostas - 1 até 14 (de um total de 14)
  • vinicius.santoro

    (@viniciussantoro)

    Qual o seu site? Onde você faz a hospedagem? Sabe qual é o seu tráfego mensal?

    Criador do tópico Russo

    (@guiali)

    Olá vinicius.santoro, obrigado por iniciar a me ajudar…

    veja bem, por 2 anos e 9 meses estive na Gigahost… durante 2 anos e meio funcionou perfeitamente, de repente, começou a aparecer essa sobrecarga, do nada, sem que eu mexesse no código fonte… então foram 3 meses sofrendo, caindo todo dia, até que mudei para a Locaweb.
    Detalhe: Tudo o que fiz durante dois anos e meio ficou perdido… meu site comecou do zero em setembro de 2011. (média de 30 posts por dia)

    Tenho exatamente 3 meses de Locaweb, e até então, eu estava feliz da vida, elogiando o serviço deles para todos os amigos, mas ontem o site caiu e até agora não voltou… consegui colocar uma mensagenzinha para os internautas…
    o plano deles diz que minha transferência e armazenamento são ilimitados

    ja pensei em não sofrer como da primeira vez, vou mudar logo de servidor, mas ainda não sei qual escolher… e também não sei quando poderei migrar, pois a locaweb não me dá acesso aos meus arquivos, meu ftp simplesmente não funciona

    Segundo o google analytics, eu tenho em média 30 mil pageviews dia, com alguns dias chegando a 50 mil… não acredito que meu site é o mais visitado da internet… não é possível que só o meu não pode ter acesso…
    obs.: nos dias em que o número de acesso foi alto (50 mil), o site funcionou normalmente… no dia de queda, o acesso, segundo o analytics, era normal (média de 20 a 30 mil) como nos últimos 3 meses

    a única diferença entre o problema de agora e do anterior, é que dessa vez identifiquei que o problema ocorreu logo após a mudança que fiz de url padrão pra link amigáveis (pode ter sido coincidência), pq em minhas buscas cheguei ao enapupe, e ele me disse pra desativar os links permanentes que ajudaria… ná época deu certo por alguns dias, mas o problema voltou.

    o domínio é http://www.sitebarra.com.br (deve estar fora do ar agora – 3-4-2012).

    aqui mesmo no fórum, já discuti esse assunto, mas não tive sucesso
    http://br.forums.wordpress.org/topic/codigo-sobrecarrega-servidor?replies=17

    http://br.forums.wordpress.org/topic/duas-instalacoes-no-mesmo-dominio?replies=17

    (guiali às vezes o tópico é fechado porque outras pessoas começam a perguntar questões diferentes dentro do mesmo tópico.)

    Usar links legíveis na versão 3.3 em diante supostamente não prejudica o site, tanto que é possível usar nome do post como link, sem plugin, na tela Configurações > Links Permanentes.

    Algumas coisas a se fazer

    Você usa algum plugin/hack que gera miniaturas, galerias etc? Alguns plugins fazem isso e em larga escala trava o acesso de arquivos do WordPress e assim o site mostrar mensagens de erro ou não abre.

    Alguns plugins criam muitas entradas no banco de dados, liste para nós os plugins que usa e quantos itens tem a sua tabela no momento. O no. e descrição desses itens está nesta página.

    Criador do tópico Russo

    (@guiali)

    uso apenas uma função que mostra a miniatura na página inicial… vou deixar o código abaixo…

    quanto a plugins, apenas um native ligthbox, para abrir as fotos e da galeria padrao do wp…
    não me lembro se tenho outro plugin instalado, meu sistema ta fora do ar, assim que voltar vejo se tem mais algum…

    a respeito do link amigável, o enapupe disse na verdade que em conjunto com o plugin de cache, ele teria que varrer o banco a procura de nomes repetidos, e isso pesava o banco… parei de usar plugin para cache e parei de usar vários outros plugins…

    não sei exatamente quantos posts tem na tabela agora, como disse ta fora, mas em média, uns 5000 posts…

    segue abaixo o código que gera a miniatura, uso há bastante tempo, inclusive em outros projetos, como eu já disse, funcionou assim por vários meses, só agora apresentou problema

    /********************************************************
    Built-in Plugin Code
    ********************************************************/
    function wp_the_excerpt_reloaded($args='') {
    	parse_str($args);
    	if(!isset($excerpt_length)) $excerpt_length = 120; // length of excerpt in words. -1 to display all excerpt/content
    	if(!isset($allowedtags)) $allowedtags = '<a>'; // HTML tags allowed in excerpt, 'all' to allow all tags.
    	if(!isset($filter_type)) $filter_type = 'none'; // format filter used => 'content', 'excerpt', 'content_rss', 'excerpt_rss', 'none'
    	if(!isset($use_more_link)) $use_more_link = 1; // display
    	if(!isset($more_link_text)) $more_link_text = "(more...)";
    	if(!isset($force_more)) $force_more = 1;
    	if(!isset($fakeit)) $fakeit = 1;
    	if(!isset($fix_tags)) $fix_tags = 1;
    	if(!isset($no_more)) $no_more = 0;
    	if(!isset($more_tag)) $more_tag = 'div';
    	if(!isset($more_link_title)) $more_link_title = 'Continue reading this entry';
    	if(!isset($showdots)) $showdots = 1;
    
    	return the_excerpt_reloaded($excerpt_length, $allowedtags, $filter_type, $use_more_link, $more_link_text, $force_more, $fakeit, $fix_tags, $no_more, $more_tag, $more_link_title, $showdots);
    }
    
    function the_excerpt_reloaded($excerpt_length=120, $allowedtags='<a>', $filter_type='none', $use_more_link=true, $more_link_text="(more...)", $force_more=true, $fakeit=1, $fix_tags=true, $no_more=false, $more_tag='div', $more_link_title='Continue reading this entry', $showdots=true) {
    	if(preg_match('%^content($|_rss)|^excerpt($|_rss)%', $filter_type)) {
    		$filter_type = 'the_' . $filter_type;
    	}
    	echo get_the_excerpt_reloaded($excerpt_length, $allowedtags, $filter_type, $use_more_link, $more_link_text, $force_more, $fakeit, $fix_tags, $no_more, $more_tag, $more_link_title, $showdots);
    }
    
    function the_excerpt_reloaded_verissimo($excerpt_length=15, $allowedtags='<a>', $filter_type='none', $use_more_link=false, $more_link_text="(leia mais...)", $force_more=true, $fakeit=1, $fix_tags=true, $no_more=false, $more_tag='div', $more_link_title='Continue reading this entry', $showdots=true) {
    	if(preg_match('%^content($|_rss)|^excerpt($|_rss)%', $filter_type)) {
    		$filter_type = 'the_' . $filter_type;
    	}
    	echo get_the_excerpt_reloaded($excerpt_length, $allowedtags, $filter_type, $use_more_link, $more_link_text, $force_more, $fakeit, $fix_tags, $no_more, $more_tag, $more_link_title, $showdots);
    }
    
    function get_the_excerpt_reloaded($excerpt_length, $allowedtags, $filter_type, $use_more_link, $more_link_text, $force_more, $fakeit, $fix_tags, $no_more, $more_tag, $more_link_title, $showdots) {
    	global $post;
    
    	if (!empty($post->post_password)) { // if there's a password
    		if ($_COOKIE['wp-postpass_'.COOKIEHASH] != $post->post_password) { // and it doesn't match cookie
    			if(is_feed()) { // if this runs in a feed
    				$output = __('There is no excerpt because this is a protected post.');
    			} else {
    	            $output = get_the_password_form();
    			}
    		}
    		return $output;
    	}
    
    	if($fakeit == 2) { // force content as excerpt
    		$text = $post->post_content;
    	} elseif($fakeit == 1) { // content as excerpt, if no excerpt
    		$text = (empty($post->post_excerpt)) ? $post->post_content : $post->post_excerpt;
    	} else { // excerpt no matter what
    		$text = $post->post_excerpt;
    	}
    
    	if($excerpt_length < 0) {
    		$output = $text;
    	} else {
    		if(!$no_more && strpos($text, '<!--more-->')) {
    		    $text = explode('<!--more-->', $text, 2);
    			$l = count($text[0]);
    			$more_link = 1;
    		} else {
    			$text = explode(' ', $text);
    			if(count($text) > $excerpt_length) {
    				$l = $excerpt_length;
    				$ellipsis = 1;
    			} else {
    				$l = count($text);
    				$more_link_text = '';
    				$ellipsis = 0;
    			}
    		}
    		for ($i=0; $i<$l; $i++)
    				$output .= $text[$i] . ' ';
    	}
    
    	if('all' != $allowedtags) {
    		$output = strip_tags($output, $allowedtags);
    	}
    
    //	$output = str_replace(array("\r\n", "\r", "\n", "  "), " ", $output);
    
    	$output = rtrim($output, "\s\n\t\r\x0B");
        $output = ($fix_tags) ? balanceTags($output, true) : $output;
    	$output .= ($showdots && $ellipsis) ? '...' : '';
    	$output = apply_filters($filter_type, $output);
    
    	switch($more_tag) {
    		case('div') :
    			$tag = 'div';
    		break;
    		case('span') :
    			$tag = 'span';
    		break;
    		case('p') :
    			$tag = 'p';
    		break;
    		default :
    			$tag = 'span';
    	}
    
    	if ($use_more_link && $more_link_text) {
    		if($force_more) {
    			$output .= ' <' . $tag . ' class="more-link"><a href="'. get_permalink($post->ID) . '#more-' . $post->ID .'" title="' . $more_link_title . '">' . $more_link_text . '</a></' . $tag . '>' . "\n";
    		} else {
    			$output .= ' <' . $tag . ' class="more-link"><a href="'. get_permalink($post->ID) . '" title="' . $more_link_title . '">' . $more_link_text . '</a></' . $tag . '>' . "\n";
    		}
    	}
    
    	return $output;
    }
    
    /***********************************************************
    Catchall function for getting images
    ***********************************************************/
    function get_the_image($arr = false, $default_size = 'medium', $default_img = false) {
    	global $post;
    	$cf_array = load_the_image($arr, $post, $default_size);
    	$image = display_the_image($cf_array, $post, $default_size, $default_img);
    	if($image == false) $image = '<!-- sem foto -->';
    	return $image;
    }
    
    /***********************************************************
    Catchall function for getting images with a link
    ***********************************************************/
    function get_the_image_link($arr = false, $default_size = 'medium', $default_img = false) {
    	global $post;
    	$cf_array = load_the_image($arr, $post, $default_size);
    	$image = display_the_image($cf_array, $post, $default_size, $default_img);
    
    	if($image == false) :
    		$image_link = '<!-- sem foto -->';
    	else :
    		$post_perm = get_permalink($post->ID);
    		$image_link = "<a href=\"$post_perm\" title=\"$post->post_title\">$image</a>";
    	endif;
    	return $image_link;
    }
    
    /***********************************************************
    Function for loading an image
    ***********************************************************/
    function load_the_image($custom_fields = false, $en_post, $default_size) {
    
    // Checks only if there are custom fields to check for
    	if(isset($custom_fields)) {
    
    	// Loop through the custom fields, checking for images or video
    		$i = 0;
    		while(strcmp($image[0],'') == 0 && $i <= sizeof($custom_fields)) {
    
    		// Check custom field values for image, image alt text, and image class
    			$image = get_post_custom_values($key = $custom_fields[$i]);
    			$image_alt = get_post_custom_values($key = $custom_fields[$i] . ' Alt');
    			$image_class = get_post_custom_values($key = $custom_fields[$i] . ' Class');
    		// Convert custom field key name to image class
    			$img_class = $custom_fields[$i];
    			$img_class = strtolower($img_class);
    			$img_class = str_replace (" ", "-", $img_class);
    
    		// Add space to image class if user inputs an extra class
    			if($image_class == true) $image_class .= ' ';
    
    		// Add user image class to default image classes
    			if($default_size == 'thumbnail' && $img_class == 'thumbnail') $image_class .= $default_size;
    			elseif($default_size == 'medium' && $img_class == 'medium') $image_class .= $default_size;
    			elseif($default_size == 'full' && $img_class == 'full') $image_class .= $default_size;
    			else $image_class .= $img_class . ' ' . $default_size;
    
    		$i++;
    		} // End while loop
    	} // End check for custom field image
    
    // If there is no image set through custom fields, check post attachments
    	if($image == false && $default_size == true) {
    		$img_att_arr = find_attachment_image($custom_fields[0], $en_post, $default_size);
    		if(strcmp($image_att_arr[0],'') == 0) :
    			$image = $img_att_arr[0];
    			$image_class = $img_att_arr[1];
    			$image_alt = false;
    		else :
    			$image = false; $image_alt = false; $image_class = false;
    		endif;
    	}
    
    // Return array with an image, image alt, and image class
    	return array($image, $image_alt, $image_class);
    }
    
    /***********************************************************
    Function for displaying an image
    ***********************************************************/
    function display_the_image($cf_array = false, $en_post = false, $default_size = false, $default_img = false) {
    
    // Set nice names for image info
    	if($cf_array[0] == false && $default_img == true) :
    		$image[0] = $default_img;
    		$image_class = $default_size;
    	else :
    		$image = $cf_array[0];
    		$image_alt = $cf_array[1];
    		$image_class = $cf_array[2];
    	endif;
    
    // If there's any kind of image for this post
    	if(isset($image[0]) && strcmp($image[0],'') != 0) :
    	// Open img tag
    		$output = '<img src="'.$image[0].'"';
    		$output .= ' alt="';
    	// Image alt text
    		if(isset($image_alt[0]) && strcmp($image_alt[0],'') != 0) $output .= $image_alt[0];
    		else $output .= $en_post->post_title;
    	// Image class
    		$output .= '" class="';
    		if(isset($image_class[0])) $output .= $image_class;
    		else $output .= 'left';
    	// Close img tag
    		$output .= '" />';
    // If there's no image
    	else :
    		$output = false;
    	endif;
    // Return the image
    	return $output;
    }
    
    /***********************************************************
    Function for finding an attachment image.
    Only called if no custom field images are set.
    ***********************************************************/
    function find_attachment_image($custom_fields = false, $en_post = false, $default_size = 'medium') {
    
    	$custom = $custom_fields;
    	$custom = strtolower($custom);
    	$custom = str_replace (" ", "-", $custom);
    // Don't repeat the same class name
    	if($custom == 'thumbnail' || $custom == 'medium' || $custom == 'full') $img_class = $default_size;
    	else $img_class = $custom . ' ' . $default_size;
    
    	$attachments = get_children( array('post_parent' => $en_post->ID, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => 'ASC', 'orderby' => 'menu_order ID', 'numberposts' => 1) );
    	if($attachments == true) :
    		foreach($attachments as $id => $attachment) :
    			$img = wp_get_attachment_image_src($id, $default_size);
    			$img_arr[0] = $img;
    		endforeach;
    		$img_arr[1] = $img_class;
    	else :
    		$img_arr = false;
    	endif;
    	return $img_arr;
    }
    Criador do tópico Russo

    (@guiali)

    uso também o wp-recaptcha, wp-bannerize, post-plugin-library e o popular-posts-plugin,

    Criador do tópico Russo

    (@guiali)

    olá pessoal, segundo o pessoal da locaweb o erro foi deles mesmo,

    era um arquivo que não estava configurado certo, reconfigurei ele..
    Edgar Oliveira
    14:38:39
    tive que acessar pelo servidor..
    Edgar Oliveira
    14:38:43
    o arquivo php.ini

    então nesse caso, acho que foi resolvido, mas tenho medo de voltar o link para amigável… tenho medo também de continuar no servidor, tenho medo de toda essa estabilidade ser temporária, tenho medo ate de ir dormir, pois fico imaginando que o site vai sair do ar…

    guiali, o plano de hospedagem do seu site na locaweb é adequado?

    Digo isso porque é comum os sites irem crescendo e se mantendo nos planos mais baratos, que nem te dão estabilidade suficiente, nem garantem bom atendimento. Já tive problemas parecidos com esse seu que na verdade estavam sendo causados por outros sites mal-dimensionados compartilhando a mesma hospedagem, e que derrubavam o servidor inteiro, a cada script rodando em loop loucamente. (E claro que eles nunca vão admitir que estão rodando mais sites do que dão conta no mesmo servidor, então às vezes é preciso brigar pra mudar de servidor lá dentro mesmo.)

    Uma coisa que pode ser feita é fazer uma cópia fiel do seu site (DB e arquivos), instalar no seu localhost ou em outro servidor e alterar no seu wp-config.php a linha define('WP_DEBUG', true) e observar se o wp joga algum erro identificável.

    Para além disso, instale a extensão Firebug no seu Firefox, e veja se estão aparecendo erros de javascript no Console.

    Tudo isso pode ajudar a definir se o erro está no seu código ou no servidor. Acho muito pouco provável que os permalinks sejam o problema.

    (Para o registro, eu saí da locaweb faz uns 4 anos e não em arrependo nem por um segundo.)

    Criador do tópico Russo

    (@guiali)

    Obrigado Ricardo Moraleida, vou tentar fazer alguns ajustes… estou pretendendo mudar o layout aproveito e verifico tudo, javascript, os loops,, as imagens e tudo mais… vou seguir as dicas

    vinicius.santoro

    (@viniciussantoro)

    guiali já vi que a Locaweb respondeu que foi erro deles e era exatamente o que ia te dizer. Já tive alguns problemas desse tipo tanto em minha hospedagem windows quanto na linux, o que me levou a UOL Host. De qualquer foram, monitorei o seu site e vi que o tanto o apache quanto o DNS pararam de responder durante 2 horas ontem, provavelmente no período de queda ou manutenção deles.
    Fiz um debug no tempo de execução dos scripts da página e todos eles estão carregando muito rápido, então, realmente pode descartar o problema dos plugins.
    Vi também que você tirou voltou os links para o padrão. Você irá alterar novamente?

    Como a Diana já disse, eles não influenciam no tráfego ou no desempenho, então pode descartar essa hipótese que foi conhecidência mesmo.

    Criador do tópico Russo

    (@guiali)

    Obrigado mais uma vez vinicius.santoro,

    Veja bem, a questão dos links estou realmente com medo… ja perdi tanto conteúdo, que fico com medo de causar problemas novamente… tenho uma média boa de pageviews se for considerado que o meu foco é regional… tenho uma audiência razoável na minha região. quando fico fora do ar perco muito mais que acesso… e chato o internauta ver o site fora do ar.
    O problema dos links amigáveis, como eu disse, foi o enapupe que me ajudou e disse isso, mas na ocasião, era usado com o plugin super cache… então ainda estou avaliando se uso ou não os permalinks…

    Criador do tópico Russo

    (@guiali)

    Consegui recuperar o meu banco antigo… de dois anos e meio de trabalho…

    so que agora, como faco para importar esses dados para a minha nova instalação?
    obs.:
    o post que tinha a id 20, por exemplo, agora é outro, pois fiz uma instalação nova… acredito que eu teria que importar somente o conteúdo, mas sem ID… sem falar é claro, nas imagens anexas…

    guiali,

    um jeito razoavelmente seguro seria:

    1. Faça um backup completo dos dois bancos.

    2. Faça um backup somente da tabela wp_posts dos dois bancos e guarde com cuidado os arquivos .sql.

    3. Crie uma nova instalação do WP no seu servidor local, com o tema padrão mesmo.

    4. Importe a tabela wp_posts mais antiga via phpmyadmin.

    5. Confira se os posts/categorias/tags/páginas foram importados corretamente. (me bateu uma dúvida agora, não sei se só com wp_posts as categorias e tags vão corretamente, talvez tenha que importar wp_postmeta tb).

    6. Use a ferramenta de exportar conteúdos do WordPress (Ferramentas -> Exportar) e baixe o XML que ele vai gerar. Guarde.

    7. Limpe o BD via phpmyadmin e repita os passos 4 a 6 com o 2º arquivo wp_posts.sql.

    8. Limpe novamente o BD.

    9. Use a ferramenta de importar conteúdos do WordPress (Ferramentas -> Importar) e faça upload de um XML de cada vez, marcando a opção de importar tb as imagens. (dica: se eles estiverem muito grandes – acima de 10mb -, use o WXR Splitter pra partir os xmls em pedaços menores.)

    10. Se tudo der certo, vc vai ter agora um blog com todos os posts na ordem correta, e com os IDs refeitos. Se qualquer problema acontecer, existe um método manual, muito mais arriscado e menos recomendado.

    ps.: sugiro abrir um tópico separado pra essa questão

    Por favor crie um outro tópico para novas questões.

    Sempre exporte e importe grande quantidade de conteúdo em partes, por exemplo categoria, autor, data etc.

    Como os dois banco são diferentes, a importação/exportação deve ser feita pelo WordPress mesmo, não o gerenciados de banco de dados.

    Criador do tópico Russo

    (@guiali)

    Ok, desculpe…. vou criar um novo tópico, mas acredito que a dica do Ricardo Moraleida já vai ajudar bastante…

Visualizando 14 respostas - 1 até 14 (de um total de 14)
  • O tópico ‘Sobrecarga em banco de dados ( 5mil posts)’ está fechado para novas respostas.