Foros del Web » Programando para Internet » PHP »

Conexion a la BD Mysql prioritaria

Estas en el tema de Conexion a la BD Mysql prioritaria en el foro de PHP en Foros del Web. Buenas, Me gustaria que al que una de las conexiones, que creo a mi base de datos mysql, fuera prioritaria a cualquier otra conexion. La ...
  #1 (permalink)  
Antiguo 22/02/2006, 04:30
 
Fecha de Ingreso: noviembre-2003
Ubicación: Alicante
Mensajes: 111
Antigüedad: 14 años
Puntos: 1
Conexion a la BD Mysql prioritaria

Buenas,

Me gustaria que al que una de las conexiones, que creo a mi base de datos mysql, fuera prioritaria a cualquier otra conexion.

La idea es que tengo un script que va insertando, borrando y actualizando una serie de datos cada poco tiempo.

He observado que cuando no hay demasiados usuarios concurrentes no hay problemas, la cuestion es que ciertos dias de la semana en los cuales en unos horarios muy especificos esta actualizacion falla aveces.

Creo que debe ser porque muchos usuarios estan conectados concurrentemente a la BBDD.

No me importa que les pueda fallar la consulta a un usuario (preferiblemente no, claro esta) pero no me puedo permitir que falle mi script de actualizacion que se ejecuta cada pocos minutos. Por eso me gustaria darle prioridad maxima a esta conexion a la bbdd.

Gracias.
  #2 (permalink)  
Antiguo 22/02/2006, 06:10
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Supuestamente tu aplicación (tendrás que confirmarlo) y tus scritps de conexión usan cara a tu BBDD Mysql un sólo usuario/contraseña para conectarse a tu BBDD. Cada "conexión" bajo ese usuario/contraseña de Mysql que usas para tus funciones de mysql_connect() crea un proceso en el servidor (lo que llaman un "resource #n° ID).

En principio .. Mysql dispone de sistemas para dar prioridad a tus consultas SQL (de todo tipo):

Por ejemplo ..
SELECT HIGH_PRIORITY campo,campoN FROM tabla ...

Revisa este documento:
http://www.informit.com/articles/art...&seqNum=5&rl=1

Y en la documentación oficial del SQL de Mysql sobre SELECT, INSERT y demás estamentos podrá ver donde puedes usarlo.

Por otro lado, no concretas tampoco que "error" obtienes cuando supuestamente tienes un exceso de usuarios concurrentes. Tampoco se vé el código que usas y no sabemos si por ejemplo usas conexiones persistentes a tus BBDD o simples. Tampoco vemos que tipo de tablas usas .. a lo mejor para ese proceso que se ha de ejecutar con prioridad podrías usar tablas tipo "Heap" (en memoria) para agilizar el proceso (vs a consumo extra de recursos del servidor) ... o incluso afinar la configuración de Mysql con respecto al caché de consultas que puede hacer y optimizar en generar tu sistema.

En resumen ... tu estás orientado la solución al problema intentando dar prioridad .. pero tal vez el problema sea de fondo otro. Dar o no prioridad a una consulta SQL podría optimizar el proceso .. pero si tienes un "error" en ciertas circustancias .. el problema persistirá a lo mejor reduces tanto las veces que suceda que no te daras cuenta .. pero creo que tendrías que intentar ver por qué tienes ese problema en esas condiciones. Puede ser que tengas problemas más graves: mal diseño de tus consultas SQL?, mal modelo de datos (no tan normalizado como podría serlo)? ..

Lo más problable que con el mensaje de error textual que obtienes en esas circustancias se vea más claro que sucede.

Un saludo,
  #3 (permalink)  
Antiguo 22/02/2006, 06:28
 
Fecha de Ingreso: noviembre-2003
Ubicación: Alicante
Mensajes: 111
Antigüedad: 14 años
Puntos: 1
Hola Cluster,

Muchas gracias por tu tiempo y por tu extensa respuesta.

No soy un experto en progranacion php , ni en mysql.

Las conexiones a mysql las hago como me indicaron en las paginas web al respecto:

Código:
function Conectarse() 
{ 
   if (!($link=mysql_connect("*****","*****","*****"))) 
   { 
      //echo "Error conectando a la base de datos."; 
      exit(); 
   } 
   if (!mysql_select_db("ab3889",$link)) 
   { 
      //echo "Error seleccionando la base de datos."; 
      exit(); 
   } 
   return $link; 
} 

$link=Conectarse();
$result 		= mysql_query("select * from *****",$link);
La verdad es que no conozco otra forma de hacerlas, ni de optimizarlas.

Solo utilizo un usuario para conectarme a ella.

El error no se visionarlo. El script php lo ejecuta el servidor cada pocos minutos.

Hay errores justamente los dias que mas usuarios hay recurrentes accediendo a mi base de datos, se dan casos de mala actualizacion de datos en la BBDD.

Esto lo compruebo a posteriori, no en el justo momento del fallo, ya que los datos se van actualizando continuamente.

Tal ver seria una facil solución, utilizar un usuario diferente de conexion para el script que se ejecuta cada pocos minutos y el otro usuario de conexion para el que crean los usuarios para hacer consultas de la base de datos?


Muchas gracias, saludos.
  #4 (permalink)  
Antiguo 22/02/2006, 07:02
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
El error no se visionarlo. El script php lo ejecuta el servidor cada pocos minutos.
Lo ejecutas bajo un "cron job" (o "programador de tareas")? .. Deberias generar un log de la ejecución de tu script .. Si lo llamas con un "cron job" podrías hacer algo tipo nose.php > log_ejecucon.txt .. así generas la salida que este pueda dar hacia un archivo de texto plano para que lo puedas ver despues.

A su vez .. usa en tus funciones mysql_xxxx() la función mysql_error() para ver el error concreto de SQL o conexión que puedas tener:

Código PHP:
<?
mysql_query
("select * from *****",$link) or die (mysql_error());
(y así con las funciones mysql_connect() .. mysql_select_db() ..)

Cita:
Hay errores justamente los dias que mas usuarios hay recurrentes accediendo a mi base de datos, se dan casos de mala actualizacion de datos en la BBDD.
Tu usas "transacciones"? Tal vez tengas problemas de ese tipo, si no bloqueas tus registros/tablas a la hora de hacer cierto tipo de operaciones puede ser que los datos entren descordinados .. Para solventar ese problema se usan "transacciones" donde vía SQL se indica "aquí empieza mi proceso.. bloquea todo por esos instantes" .. haces tu proceso y .. "desbloquea todo" o si hay un error: vuelve atras el proceso. (en SQL sería usar: BEGIN, COMMIT y ROLLBACK ) .. a ser posible con tablas "transaccionales" tipo InnodB.

Un tutorial al respecto:
http://www.mysql-hispano.org/page.php?id=26

Cita:
Tal ver seria una facil solución, utilizar un usuario diferente de conexion para el script que se ejecuta cada pocos minutos y el otro usuario de conexion para el que crean los usuarios para hacer consultas de la base de datos?
Separando así esos procesos tendrías control del proceso en sí ... cosas como "matar" uno u otro proceso si hay problemas (a veces pasa .. si usas un sólo usuario para todo como es lo común ... matas "toda" la aplicación .. cuando en tu caso por ejemplo tienes dos procesos bien separados). Esto igualmente si tienes un problema a nivel de "transacciones" no te solventará el problema.


Un saludo,
  #5 (permalink)  
Antiguo 22/02/2006, 07:15
 
Fecha de Ingreso: noviembre-2003
Ubicación: Alicante
Mensajes: 111
Antigüedad: 14 años
Puntos: 1
Muchas gracias Cluster por toda la información,

La ejecucion del script cada x tiempo me lo gestionan la gente del hosting donde tengo alojada mi pagina, no tengo ni idea de que aplicacion utilizan.

Solo se que cada x minutos ejecutan el script php que les indico. Hablare con ellos para ver si me pueden generar un log de errores para mi script.

Intentare estudiar el tema transacciones, a ver si saco algo en claro y hago que esto funcione correctamente.

Muchas gracias por tu gran ayuda.
  #6 (permalink)  
Antiguo 22/02/2006, 07:24
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
La ejecucion del script cada x tiempo me lo gestionan la gente del hosting donde tengo alojada mi pagina, no tengo ni idea de que aplicacion utilizan.
Ok (supongo que usaran un cron job definido .. sólo que te lo gestinan ellos no tu directamente).

Cita:
Solo se que cada x minutos ejecutan el script php que les indico. Hablare con ellos para ver si me pueden generar un log de errores para mi script.
Acuerdate de modificar tu código y añadir el "mysql_error()" donde te indiqué para que veas claros errores de SQL o conexión si se producen.

Y estudia el tema de transacciones fijandote en tu código (grupo de sentencias SQL) que hagas .. por si puedes usarlas.

Un saludo,
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:41.