Retrasar script SQL para migración de contenido

  • Autor Autor xaiborweb
  • Fecha de inicio Fecha de inicio
xaiborweb

xaiborweb

Programador
No recomendado
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
hola estoy migrando el contenido de una tabla x a unas columnas de una tabla y.

cuando ejecuto el script que programe en pocas filas por ejemplo 100 lo guarda todo perfecto pero cuando ya lo ejecuto para todas las filas son 400 mil y verifico no guarda todo correctamente se salta algunos campos entonces supongo que puede ser por que va muy rápido el script y el sql no es capas de guardar todo entonces me preguntaba como retrasarlo darle un tiempo de espera

gracias por su ayuda.
 
Lo haces vía consola o como?
 
Lo haces vía consola o como?

pues si el php lo puedo ejecutar via navegador pero si lo estoy ejecutando via consola y va super rapido recorre los 400 mil en menos de 20 minutos
por eso creo que puede ser por ir tan rapido
 
Ahh pensé que era un backup. Pues lo que puedes hacer es ponerle un
Insertar CODE, HTML o PHP:
 sleep (2)
cada 100 registros o algo así dentro de un while o en el proceso
 
Ahh pensé que era un backup. Pues lo que puedes hacer es ponerle un
Insertar CODE, HTML o PHP:
 sleep (2)
cada 100 registros o algo así dentro de un while o en el proceso

este es el php que estoy ejecutando

PHP:
<?php

$servidor = 'localhost';
$db = 'tmdb';
$u = 'root';
$p = '';
$con = mysqli_connect($servidor,$u,$p,$db);

for ($i=$argv[1]; $i <= $argv[2]; $i++) {
	$results = mysqli_query($con,"SELECT id_movie,title,tagline,overview,plotsummary,review,trailer FROM movies_de WHERE id=$i");
	$result = mysqli_fetch_array($results);
	$id_movie = $result[0];
	$title = $result[1];
	$tagline = $result[2];
	$overview = $result[3];
	$plotsummary = $result[4];
	$review = $result[5];
	$trailer = $result[6];

	mysqli_query($con, "UPDATE movies SET title_de='$title', tagline_de='$tagline', overview_de='$overview', plotsummary_de='$plotsummary', review_de='$review', trailer_de='$trailer' WHERE id='$id_movie'");

	echo 'actualizado id: '.$id_movie."\n";
}

donde podría ir ese sleep es que aun no soy el mas avanzado que digamos en programar y muchas gracias por tu ayuda
 
[MENTION=35077]xaiborweb[/MENTION] Ponlo dentro del for al final q espera 1 sleep. XD
 
Última edición:
If $i == arg2.. Sleep
 
Yo colocaría el sleep así:

PHP:
for ($i=$argv[1]; $i <= $argv[2]; $i++) {
*sleep (1)

 sleep (2)
}

De esta manera inicia el ciclo, realiza una consulta SQL: SELECT id_movie,title,tagline,overview,plotsummary,review,trailer FROM movies_de WHERE id=

Ahí debajo podrías colocar otro sleep.

Ya luego se realiza otra consulta: UPDATE movies SET

Seguido de un sleep.

Los ciclos van muy rápido por ello es necesario colocar pausas para evitar errores o que se salte.
 
Sinceramente se va a tardar mucho con tantos sleeps y más si dices tener esa cantidad de registros, un programa no se va a saltar algo a menos que haya un error o identificar bien el problema , lo que deberías de buscar es esa causa del error, en python un sleep de 0.1 segundos fue suficiente para retrasar un proceso y evitar una sobrecarga del cpu
 
Sinceramente se va a tardar mucho con tantos sleeps y más si dices tener esa cantidad de registros, un programa no se va a saltar algo a menos que haya un error o identificar bien el problema , lo que deberías de buscar es esa causa del error, en python un sleep de 0.1 segundos fue suficiente para retrasar un proceso y evitar una sobrecarga del cpu

Pues yo siempre lo he dicho es mejor que se demore pero que haga bien las cosas. Es peor que sea muy rápido y haga mal su trabajo.
 
En producción cuando tienes tantos registros y estas contra el tiempo, lo que se debe de identificar es el problema... Y sino es tan importante entonces le puedes poner todos los parches qué desees aunque no encuentres el problema
 
Lo que podrías hacer es ponerle un: or die mysqli_error..... en el update para q si hay un error te diga cual es
 
Nada de eso compadre, la solución es bastante simple. Antes de cualquier instrucción agrega lo siguiente:

PHP:
<?php
ini_set('max_execution_time', 1800); // 1800 segundos ó 30 minutos

// a partir de aquí el resto de tu código

Al incrementar el tiempo máximo de ejecución permites que el script no se corte antes de terminar la tarea. Si aún después de colocar los 30 minutos no completa todos los registros, entonces considera incrementarlo a 45 minutos, aunque es poco probable, a excepción que el procesador sea algo viejito.

Saludos 😉
 
No menciona que el problema sea por exceso de tiempo en la ejecución del script, de lo contrario te podria tirar un error 500 y no te saltaría registros, simplemente no te importaría los últimos
 
por que no ejecutas una consulta de un update con select y le dejas todo el trabajo a sql y no lo recorres con php


es mas o menos asi

Update tabla1
set tabla1campo1 = t2.tabla2campo1
from tabla1 t1, tabla2 t2
where t1.campoX = t2.campoX
 
Atrás
Arriba