Aumentar la velocidad de la carga de mi página.

Iniciado por yoelrodguez, 4 Noviembre 2021, 00:36 AM

0 Miembros y 1 Visitante están viendo este tema.

yoelrodguez

Tengo la siguiente situación: tengo un sistema hecho con codeingter que me está cargando muy lenta la página en mi servidor online. La comparación la estoy haciendo con mí servidor local que es un xampp con mariadb de base de datos, contra mi servidor en línea que es dedicado y tienes instalado un plesk con mariadb de base de datos. La diferencia de la carga del servidor local al online es de casi 5 segundos.

Haciendo pruebas, compre que la lentitud se me produce en la consulta SQL si quito la ejecución de la consulta la página en el servidor online me carga super rápido. Tengo colocados todos los index en las tablas del servidor, en cuanto a las relaciones pero ni aun así logro que la cargar del servidor online sea igual o parecida a la del servidor local. A continuación le dejo la consulta para ver si me pueden ayudar.

Gracias.


SELECT `contrato`.`id`, `contrato`.`n_contrato`, `cliente`.`tipoc`, `cliente`.`nombremp`, `cliente`.`nombre` AS cnombre, `cliente`.`apellidos` AS capellidos, `fiador`.`nombre` AS fnombre, `fiador`.`apellidos` AS fapellidos, `promotor`.`nombrecorto` AS prnombrecorto, `promotor`.`nombre` AS prnombre, `promotor`.`apellidos` AS prapellidos, `contrato`.`f_firma`, `contrato`.`f_final`, `contrato`.`f_revicion`, `contrato`.`importe`, `contrato`.`facimporte`, `inmueble`.`nombre` AS inmuebles, `inmueble`.`direccion` AS idireccion, `inmueble`.`id` AS idinmueble, `propietario`.`nombrecorto` AS pnombrecorto, `propietario`.`nombre` AS pnombre, `propietario`.`apellidos` AS papellidos, `documentos`.`ruta_doc`, `documentos`.`iddrive`, `cliente`.`rutap_doc` AS rutac, `fiador`.`rutap_doc` AS rutaf, `propietario`.`rutap_doc` AS rutap, `promotor`.`rutap_doc` AS rutapr, `contrato`.`id_documento`, `contrato`.`id_promotor`, `contrato`.`id_cliente`, `contrato`.`id_fiador`, `contrato`.`vencido`, DATE_FORMAT(f_firma, ' %d-%m-%Y') AS ffirma, DATE_FORMAT(f_final, ' %d-%m-%Y') AS ffinal, DATEDIFF(f_final, CURDATE()) AS dia, DATEDIFF(f_revicion, CURDATE()) AS diar
FROM (`contrato` LEFT JOIN cliente ON contrato.id_cliente = cliente.id LEFT JOIN fiador ON contrato.id_fiador = fiador.id LEFT JOIN promotor ON contrato.id_promotor = promotor.id LEFT JOIN documentos ON contrato.id_documento = documentos.id LEFT JOIN inmueble ON contrato.id_inmueble = inmueble.id LEFT JOIN propietario ON inmueble.id_propietario = propietario.id)
WHERE `vencido` =  '2'
ORDER BY `n_contrato` ASC, `inmuebles` ASC, `f_final` ASC, `f_final` ASC, `importe` ASC
LIMIT 20


       

MinusFour

Pues tendrías que mirar el explain:

Código (sql) [Seleccionar]

EXPLAIN SELECT `contrato`.`id`, `contrato`.`n_contrato`, `cliente`.`tipoc`, `cliente`.`nombremp`, `cliente`.`nombre` AS cnombre, `cliente`.`apellidos` AS capellidos, `fiador`.`nombre` AS fnombre, `fiador`.`apellidos` AS fapellidos, `promotor`.`nombrecorto` AS prnombrecorto, `promotor`.`nombre` AS prnombre, `promotor`.`apellidos` AS prapellidos, `contrato`.`f_firma`, `contrato`.`f_final`, `contrato`.`f_revicion`, `contrato`.`importe`, `contrato`.`facimporte`, `inmueble`.`nombre` AS inmuebles, `inmueble`.`direccion` AS idireccion, `inmueble`.`id` AS idinmueble, `propietario`.`nombrecorto` AS pnombrecorto, `propietario`.`nombre` AS pnombre, `propietario`.`apellidos` AS papellidos, `documentos`.`ruta_doc`, `documentos`.`iddrive`, `cliente`.`rutap_doc` AS rutac, `fiador`.`rutap_doc` AS rutaf, `propietario`.`rutap_doc` AS rutap, `promotor`.`rutap_doc` AS rutapr, `contrato`.`id_documento`, `contrato`.`id_promotor`, `contrato`.`id_cliente`, `contrato`.`id_fiador`, `contrato`.`vencido`, DATE_FORMAT(f_firma, ' %d-%m-%Y') AS ffirma, DATE_FORMAT(f_final, ' %d-%m-%Y') AS ffinal, DATEDIFF(f_final, CURDATE()) AS dia, DATEDIFF(f_revicion, CURDATE()) AS diar
FROM (`contrato` LEFT JOIN cliente ON contrato.id_cliente = cliente.id LEFT JOIN fiador ON contrato.id_fiador = fiador.id LEFT JOIN promotor ON contrato.id_promotor = promotor.id LEFT JOIN documentos ON contrato.id_documento = documentos.id LEFT JOIN inmueble ON contrato.id_inmueble = inmueble.id LEFT JOIN propietario ON inmueble.id_propietario = propietario.id)
WHERE `vencido` =  '2'
ORDER BY `n_contrato` ASC, `inmuebles` ASC, `f_final` ASC, `f_final` ASC, `importe` ASC
LIMIT 20

Hextor

#2
Esa consulta tiene muchos JOINS, posiblemente sea lo que la está haciendo lenta, si puedes, intenta cambiar esa consulta por varias más simples de forma programática, quizás te sirva...
- Hector

yoelrodguez

Hola, gracias a todos por su ayuda ya logre disminuir el tiempo de carga y el problema lo tenia en la versión de php que estaba usando. EL servidor por defecto tiene 7.4 y al bajarlo a la 7.1 el tiempo de carga se redujo de 17 s a 3.9 s.   

el-brujo

Cita de: yoelrodguez en  4 Noviembre 2021, 17:55 PM
Hola, gracias a todos por su ayuda ya logre disminuir el tiempo de carga y el problema lo tenia en la versión de php que estaba usando. EL servidor por defecto tiene 7.4 y al bajarlo a la 7.1 el tiempo de carga se redujo de 17 s a 3.9 s.   

Vaya, eso no tiene mucho sentido.

Usa runa versión más vieja de PHP y que vaya más rápido  :laugh: Aunque la rama 7.4 es la actual

#!drvy

CitarEL servidor por defecto tiene 7.4 y al bajarlo a la 7.1 el tiempo de carga se redujo de 17 s a 3.9 s.   

Eso es algo anormal y deberías revisarlo.

Además ten en cuenta que la 7.1 ya no recibe soporte ni parches de seguridad.
https://www.php.net/supported-versions.php

Seguramente tengas alguna funcionalidad que no funciona bien en PHP 7.4 y tarda más en realizar X acción. Revisa bien.

Saludos


yoelrodguez

Hola y gracias a todos por sus comentarios, he estado revisando pero en el log no me arroja ningún error, al menos a los que tengo acceso en el servidor pero si cuando coloco la versión 7.4 la carga de la consulta se me hace muy lenta.

Saludos

Fernando99

En la vida, no esperaría tal solución al problema. Me pregunto por qué fue causado.

elmascato

Algo raro pasa ahí. A lo mejor es que tienes mucho deprecated en el código. ¿Qué versión de CI usas?

Danielㅤ

Hola, yo no tengo conocimientos de base de datos, pero esa consulta me parece demasiado extensa, veo que hacés muchas operaciones en una sola consulta, por ejemplo esto creo que une dos valores:

`fiador`.`apellidos`

tal vez podrías hacer eso desde PHP y evitar hacerlo desde una consulta SQL.


Saludos
¡Regresando como cual Fenix! ~
Bomber Code © 2021 https://www.bombercode.net/foro/

Ayudas - Aportes - Tutoriales - Y mucho mas!!!