Entradas

Mostrando las entradas etiquetadas como optimización

Reduciendo el tamaño de mPDF

Imagen
mPDF es una clase PHP que genera archivos PDF desde HTML con codificación UTF-8. Se basa en FPDF y HTML2FPDF, con una serie de mejoras. Según el propio autor la librería, que ya va por su versión 6.0 y es sobre la que hablaré en este post, se creó para producir archivos PDF de diferentes idiomas al vuelo. Es más lento que los scripts originales, por ejemplo HTML2FPDF, y produce archivos más grandes cuando se usa Unicode, pero tiene soporte de estilos CSS y muchas mejoras . Pero bueno, si has llegado hasta aquí buscando como reducir el tamaño de esta librería supongo que sepas lo anterior así que vamos al grano. Este post va dedicado a todos aquellos que generan PDF pero que no requieren funcionalidades extras, en mi caso solo necesito que un HTML en español e inglés, con imágenes y estilos básicos sea convertido en un PDF de una sola página, por ejemplo el siguiente código: $mpdf = new mPDF('en-GB-x','A4','','',5,5,5,5,0,0); $mpdf->mirrorMargins =...

Asegurar PHP con php.ini

Imagen
En el post anterior vimos como podemos establecer las directivas de PHP para cada subdominio , ahora toca asegurar y proteger nuestro código PHP utilizándolo. Voy a remitiros a este fantástico manual en inglés en el cual dan las pautas para asegurar, proteger y endurecer nuestras páginas PHP con directivas de configuración que no vienen habilitadas por defecto. Modo seguro (obsoleto desde PHP 5.4) Restringir los directorios desde donde podremos incluir archivos PHP y trabajar con ficheros (escritura, lectura), en resumen limitar el acceso de PHP al sistema de archivos. Deshabilitar funciones peligrosas como eval. Evitar que se muestre errores en pantalla Deshabilitar register globals (obsoleto desde PHP 5.4) Evitar que archivos remotos puedan ser abiertos e incluidos con PHP, la consecuencia más drástica de esto es que la función file_get_contents no podrá recibir nada con el protocolo http como parámetro, en su lugar deberemos usar curl. Restringir la subida de archi...

Problemas de espacio en Windows 8.1

Imagen
Realmente todas las posibles causas de aumento descontrolado del espacio ocupado en el disco duro que voy a tratar aquí se pueden aplicar a cualquier sistema Windows, incluso en los casos de software a cualquier sistema que los tenga instalado. Las pruebas siguientes fueron hechas en 2 ordenadores con Windows 8.1 y con discos duros limitados en espacio con lo cual cada GB cuenta, es por ello que he decido monitorearlos porque me parecían demasiados los recursos que se estaban consumiendo, lamentablemente en la mayoría de los casos no hay mucho que hacer, pero, primero a lo primero. Para monitorizar el espacio ocupado por cada carpeta he decidido utilizar la herramienta basa en Java, JDiskReport , y digo basada en Java porque necesitaremos la máquina virtual de este lenguaje para poder ejecutarla, generalmente se agrega la ubicación de Java al PATH de sistema pero en caso de que no se encuentre el archivo javaw.exe lo encontraremos en C:\Program Files (x86)\Java\jre7\bin. Una vez ...

¿Por qué actualizar a PHP 5.4?

Imagen
Como hemos visto en el post anterior sobre la evolución de las distintas versiones de PHP 5 , PHP 5.3 es la versión más utilizada en la web aún cuando lleva sin tener una actualización desde diciembre del pasado año y estar en el mercado 2 versiones estables y superiores a ella. He elegido PHP 5.4 por los escépticos, porque es una versión estable y consolidada, con un desarrollo que se inició con el primer lanzamiento de la alpha 1 en junio de 2011 y que tras casi un año de pruebas lanzó su versión inicial para entornos de producción en marzo de 2012, una versión todavía con soporte por parte de PHP y que su ultima actualización ha sido este mismo mes de mayo con la versión 5.4.28. Muchas de las mejoras en PHP 5.4 no son algo que se pueda ver. No son algo que ni siquiera uno se daría cuenta mirando la página de novedades en el manual de PHP . En el centro de estos cambios está la optimización del tiempo de ejecución y una base de código más limpio en general. Si vemos el manual de PH...

Optimizando consultas en SQL Server

Imagen
SQL Server Managment Studio es, y no me cansaré de decirlo, la mejor herramienta para gestión de bases de datos que existe, si MySQL tuviese algo similar sería genial. Una de las cosas que podemos hacer con SQL Server Managment Studio es optimizar y analizar nuestros índices. Como diría el mismo Microsoft: SQL Server Management Studio es una herramienta gráfica interactiva que permite a un administrador o a un programador de bases de datos escribir consultas, ejecutar simultáneamente varias consultas, ver los resultados, analizar el plan de consultas y recibir asistencia para mejorar el rendimiento de las consultas. Optimizando consultas en SQL Server Una de las opciones en SQL Server es ejecutar una consulta y ver su plan de ejecución ¿Qué es un plan de ejecución? Las opciones del Plan de ejecución muestran gráficamente los métodos de recuperación de datos elegidos por el optimizador de consultas de SQL Server . El plan de ejecución gráfico utiliza iconos para r...

Optimizando consultas en MySQL

Imagen
Hay un artículo muy bueno con 20 consejos para mejorar MySQL que recomiendo a todos leer antes de seguir con este post porque básicamente lo que haré será ampliar o rebatir alguno de los puntos del mismo. El primer punto que me gustaría modificar es el 5, indexar los campos para utilizarlos con consultas que utilicen JOIN. Básicamente lo que dice este punto es que los campos de unión entre tablas deben ser del mismo tipo y estar indexados, yo a eso añadiría que ambas tablas deben ser del tipo Innodb y ambos campos tener una relación entre ellos con una Foreign Key , así no solo garantizamos las premisas anteriores sino que se asegura la integridad de los datos en ambas tablas. Lo ideal para hacer uniones entre tablas es que uno de los campos sea una clave primaria y el otro una clave foránea que apunte a ella. En el punto 16, particionamiento vertical, no estoy del todo de acuerdo, partir una tabla por partirla y creer que esto mejorará el rendimiento porque tiene menos datos o men...

Optimizando MySQL 5.6 innodb_flush_method

Imagen
El parámetro innodb_flush_method es el método que utilizará MySQL para vaciar los datos y logs que vaya recopilando durante su funcionamiento. Este post en realidad será una traducción del manual de MySQL y otras fuentes del inglés porque como se verá la configuración ideal es a base de prueba y error. Veamos un glosario de términos necesarios para entender este post fsync La función fsync () puede ser utilizada por una aplicación para indicar que todos los datos asociados  a archivos abiertos serán transferidos al dispositivo de almacenamiento asociado con el archivo descrito de una manera dependiente de la implementación del sitema. La función fsync no se detiene hasta que el sistema ha completado la acción o hasta que se detecta un error. La función fsync () obliga a todas las operaciones actuales en la cola de entrada / salida asociadas con un archivo a la sincronización. Todas las operaciones de E / S se realizan cuidando la integridad del archivo al finalizar el proces...

Optimizando InnoDB en MySQL 5.6

Imagen
Realmente MySQL 5.6 no es la panacea, trae, según los desarrolladores, muchas mejoras en InnoDB, yo a simple vista no he podido observar ninguna salvo una ligera mejora en la velocidad, aún no he probado el FULL TEXT INDEX. Lo que si se nota nada más actualizar MySQL es el aumento exponencial de los ficheros asociados a innodb, fundamentalmente el fichero ibdata. Mysql guarda las tablas en un fichero denominado ibdata1, y aunque trunques las tablas y las vacíes, este fichero no decrece. Lo recomendable cuando instalas MySQL 5.6 (o actualizas a esta versión) es hacer un backup de cada tabla (así es más fácil la restauración en caso de error), borrar todas las tablas y las carpetas asociadas en /var/lib/mysql (salvo la de mysql), borrar los archivos de log de innodb (ib_logfile0 y ib_logfile1) y el archivo ibdata1. Una vez hemos hecho esto modificamos nuestro archivo my.cnf ubicado en /etc/ y ponemos las siguientes líneas: innodb_autoinc_lock_mode=0 innodb_file_per_table=1 innodb_fl...

SQL Server 2008 registro de transacciones

Imagen
El registro de transacciones en SQL Server es el archivo que registra como bien dice su nombre todas las transacciones de una tabla y sus modificaciones en la base de datos y si no le ponemos un límite al mismo este crecerá de manera indefinida llegando incluso a colapsar todo el espacio libre de nuestro almacenamiento. La recomendación de Microsoft es la siguiente: El registro de transacciones se debe truncar periódicamente para evitar que se llene. Sin embargo, algunos factores pueden retrasar el truncamiento del registro, por lo que es importante supervisar el tamaño del registro. Algunas operaciones se pueden registrar mínimamente para reducir su impacto sobre el tamaño del registro de transacciones. ¿Cómo saber el espacio ocupado por cada registro de transacciones? Ejecutamos la siguiente consulta: DBCC SQLPERF(LOGSPACE); Esto nos devolverá una tabla con los siguientes campos: nombre de la base de datos, tamaño del log en MB, espacio del log utilizado en porcentaje y el est...

Optimizar Navision en SQL Server

Imagen
Estas son algunas pautas a tener en cuenta para optimizar la base de datos de Microsoft Dynamics Nav (Navision) en Microsoft SQL Server. Dynamics NAV Default Isolation Level Con el lanzamiento de Microsoft Dynamics NAV 5.00 SP1 (Build 30482 / KB 979135) y posteriores tenemos la opción de cambiar el nivel de aislamiento predeterminado de NAV de SERIALIZABLE a REPEATABLEREAD. SERIALIZABLE: Este es el nivel de aislamiento más restrictivo. Cuando se utiliza, los valores fantasmas no pueden ocurrir pues impide que otros usuarios actualicen o inserten filas en el conjunto de datos hasta que la transacción se complete. REPEATABLEREAD: Cuando se utiliza, las lecturas ‘sucias’ y no repetibles no pueden ocurrir. Esto significa que los bloqueos se colocarán en todos los datos que se utilizan en una consulta y otra transacción no puede actualizarlos. En resumen SERIALIZABLE es más restrictiva y bloquea más registros que REPEATABLEREAD que puede causar más tiempos de espera de bloqueos y desb...

Recomendaciones respecto a SQL Server

Imagen
Estas son algunas recomendaciones que me pasaron hace un tiempo sobre parámetros para optimizar SQL Server, en realidad son la traducción de esas recomendaciones, espero que os sirvan de ayuda, a mi la verdad no mucho. Auto-Grow Auto-Growths (Auto-crecimientos) de la base de datos o del registro de transacciones en entornos de producción puede degradar el rendimiento pues todas las transacciones deben hacer cola y esperar al SQL Server para hacer crecer el archivo de registro o de datos antes de que pueda comenzar a procesar las transacciones de nuevo. Esto puede crear un cuello de botella. Recomendamos fuertemente el crecimiento de los datos y del archivo de registro durante las horas pico entre un 10 a 25% del tamaño actual. No recomendamos desactivar Auto-Grow pues en casos de emergencia es mejor tenerlo activado que quedarse sin espacio y poner la base de datos fuera de servicio. Trace Flag 4119 Si está ejecutando SQL Server 2005, le recomendamos que active el indicador de tr...

Procedimientos vs T-SQL en SQL Server

Imagen
¿Por qué recomendar el uso de los procedimientos almacenados en lugar de las sentencias T-SQL ? Los procedimientos almacenados deben de ser una de las herramientas reinas de los motores de bases de datos (cómo es el caso de SQL Server) y de los DBA ¿Por qué? Mayor optimización para el motor : Este mismo no debe compilar (a menos que se lo indiquemos) cada instrucción T-SQL, sino que ya la tiene compilada y esto genera mucho mayor rendimiento. También se da el caso que el procedimiento reside en nuestro servidor por lo cual el trafico de red es muy inferior al que podemos hacer si mandamos las T-SQL desde nuestro cliente. Seguridad : Los procedimientos no solo son buenos por rendimiento, sino que nos permiten hacer las operaciones no directamente sobre nuestras tablas. Reutilización de código : El uso de procedimientos es muy útil para esto, si la consulta de rangos de fechas para buscar los pedidos en firme de un cliente por ejemplo, la necesitamos en mas de una aplicación, e...

Aumentar la velocidad de tus páginas web

Si eres desarrollador de páginas web, o administrador de algún sitio web, sin duda una de tus principales preocupaciones es optimizar la carga de las mismas, un tiempo de carga pequeño se traduce en una mejor experiencia de usuario y de cara a los buscadores un sitio de más calidad. Buscando por internet encontré este maravilloso tutorial con unas excelentes y completas técnicas para aumentar la velocidad de una web , aunque para mi lo mejor fueron los enlaces externos al final del mismo y de ellos el más relevante y sobre el que basaré este tutorial es web page test . Cómo bien dice el nombre Web Page Test es un sitio que examina tu página web y te muestra las recomendaciones necesarias para corregir o mitigar cada uno de los fallos que sus test encuentran. Los test se basan en 6 bloques fundamentales: First Time Byte Keep alive enabled Compress text Compress images Cache static content CDN detected Sobre el primer punto el Time to First Byte ya he hab...

Time to First Byte

El Time To First Byte o TTFB es una medida que se utiliza a menudo como un indicador de la capacidad de respuesta de un servidor web o de otros recursos de red. Es la duración entre el momento en que se realiza una petición HTTP y la recepción del primer byte de la página por el navegador. Se compone del tiempo de conexión de socket, el tiempo necesario para enviar la solicitud HTTP y el tiempo para conseguir el primer byte de la página. Según la definición anterior podemos llegar a la conclusión de que el Time To First Byte depende de las capacidades de nuestro servidor y ellas son las que influyen directamente en que este tiempo sea mayor o menor. Aquí os dejo una web en la que podremos medir el Time to First Byte de nuestro sitio. ¿Cómo mejorar el Time To First Byte ? La respuesta es simple, mejorando las capacidades de nuestro servidor o eliminado carga del mismo. En este segundo aspecto es muy importante ver si estamos utilizando herramientas de compresión de códigos JS o CSS ...

SQL Server base de datos tempdb

Imagen
La base de datos del sistema tempdb es un recurso global disponible para todos los usuarios conectados a la instancia de SQL Server y se utiliza para incluir objetos de usuario temporales, objetos internos creados por el motor de base de datos de SQL Server y versiones de fila que se generan mediante transacciones. Por esta razón tener optimizada correctamente la configuración de esta base de datos es primordial para garantizar el rendimiento del sistema. Por ejemplo, si el tamaño de tempdb es demasiado pequeño, el procesamiento del sistema podría estar demasiado ocupado con el crecimiento automático de la base de datos y, por tanto, no podría satisfacer las necesidades de carga de trabajo cada vez que se inicia SQL Server. Para obtener más información, vea Optimizar el rendimiento de tempdb y Planeamiento de capacidad para tempdb . Otro factor de optimización a tener en cuenta es el número de archivos de datos de tempdb que debe ser igual al número de núcleos de CPU utilizada ...

SQL Server alineación de discos

Imagen
La alineación del disco (Disk Alignment) puede tener un impacto significativo en el rendimiento del servidor. Una partición mal alineada sufre de un desfase entre los sectores lógicos y los físicos, aumentando así las operaciones de entrada / salida en un disco reduciendo su rendimiento. En una sola partición independiente, el problema no es tan grave, ya que tanto el sistema operativo como los programas funcionan sin inconveniente alguno. Pero bajo determinadas configuraciones, (por ejemplo, discos en modo RAID), la pérdida de rendimiento puede llegar a ser notable. Puesto que la configuración adecuada puede variar mucho según el fabricante, debes consultar con los manuales de cada uno para verificar la correcta alineación del disco y la configuración adecuada. Para el caso específico de un servidor de datos como SQL Server, la asignación o el ancho de banda debe ser mayor o igual a 8k, para evitar páginas mal alineadas o cortadas, se recomienda que esta cifra sea de 64k para que c...

SQL Server: reorganizar y volver a generar índices

Imagen
Según la propia Microsoft : El Motor de base de datos de SQL Server mantiene índices automáticamente cada vez que inserta, actualiza o elimina operaciones realizadas en los datos subyacentes. Con el tiempo, estas modificaciones pueden hacer que la información del índice se disperse por la base de datos (se fragmente). La fragmentación ocurre cuando los índices tienen páginas en las que la ordenación lógica, basada en el valor de clave, no coincide con la ordenación física dentro del archivo de datos. Los índices muy fragmentados pueden reducir el rendimiento de la consulta y ralentizar la respuesta de la aplicación. Se puede solucionar la fragmentación del índice reorganizándolo o volviéndolo a generar pero el primer paso es identificar los índices fragmentados, para ello podemos ejecutar la siguiente consulta SQL que nos sacará un listado de los índices, las tablas a las que pertenecen y el nivel de fragmentación de los mismos: SELECT a.object_id as table_id, OBJECT_NAME(a.object...

Desventajas de minimizar código JavaScript con Minify

Imagen
Minify es una utilidad escrita en PHP5 que permite eliminar los caracteres innecesarios del código fuente sin cambiar su funcionalidad permitiendo incluir en una sola línea de código múltiples archivos JavaScript o CSS reduciendo con ello el tiempo de carga de nuestra página web. Pero todo lo que brilla no es oro y aunque llevo tiempo utilizando Minify hay algunas pegas a tener en cuenta: 1.- hay que tenerlo instalado en el entorno real y en el de desarrollo porque sino a la hora de combinar los archivos hay que estar descartando estas líneas de código 2.- los debuggers de los principales navegadores son incapaces de encontrar correctamente el archivo y en algunos casos la línea de error cuando se produce un fallo en JavaScript lo cual hace más complicada la tarea de corrección de errores 3.- puede dar problemas con las codificaciones de los archivos comprimidos 4.- debes tener configurado apache correctamente con una librería adicional (redirect) que no viene instalada por defecto 5...

Rendimiento SQL Server: grado de paralelismo

El tema de los grados de paralelismo en SQL Server es bastante extenso y tiene una bibliografía bastante amplia sobre todo en inglés (como casi todo en informática), en este post intentaré dar una visión global de qué es y para qué sirven los grados de paralelismo en SQL Server y sobre todo cuando y cómo utilizarlos. En primer lugar y lo más importante es disipar cualquier idea que puedas tener acerca de esta opción ( Max Degree of Parallelism ) y su vinculación a la cantidad de procesadores que SQL Server puede utilizar cuando trata de procesar más de una conexión (o usuario) - no es así. Si SQL Server tiene acceso a cuatro procesadores ociosos y tiene cuatro procesos para ejecutar, utilizará los cuatro procesadores - independientemente del grado máximo de paralelismo. Entonces, ¿qué esta opción no? Max Degree of Parallelism establece el número máximo de procesadores que SQL Server puede utilizar para una consulta. Si SQL Server tiene que devolver una gran cantidad de datos...

Read Committed Snapshot Isolation (RCSI)

Imagen
Con el lanzamiento de SQL Server 2005 se introdujo un nuevo nivel de aislamiento llamado Read Committed Snapshot ( aislamiento de instantáneas ). ¿Qué son los niveles de aislamiento? El nivel de aislamiento de una transacción (transaction isolation level) define el grado en que se aísla una transacción de las modificaciones de recursos o datos realizadas por otras transacciones . El nivel de aislamiento de una transacción es una característica de vital importancia en el desarrollo de aplicaciones de base de datos, ya que afecta a los tipos y duración de bloqueos que se producen en nuestra infraestructura de base de datos, lo cual, tiene efectos directos en el rendimiento y tiempo de respuesta de nuestras consultas y transacciones. Además, el nivel de aislamiento nos permite indicar cómo deseamos que se comporte nuestro motor de base de datos frente a situaciones (…) que pueden impactar consistentemente en la eficacia de nuestros desarrollos en entornos de base de datos con concu...