Optimizar Mysql

0 comentarios


Cuando trabajamos con programas OpenSource es muy probable que terminemos usando MySQL 5.0, y cuando lo hacemos durante varios meses, también es muy probable que acabemos administrándolo, e intentando mejorar el redimiento. Para conseguirlo, os propongo tres posibles mejoras:

  1. La primera, es que usemos ext4 o xfs como sistema de archivos para /var/lib/mysql. Estos sistemas de archivos consiguen más velocidad y rendimiento que ext3.
  2. La segunda, consiste en usar un fichero por cada tabla innodb, para lo cual habrá que añadir la siguiente línea a la sección [mysqld] en /etc/mysql/my.cnf,
    innodb_file_per_table
    Esto evitará que el fichero /var/lib/mysql/ibdata1 crezca sin límite, alamcenando en él todos los datos de nuestra BBDD y siendo este fichero cuello de botella para el acceso a disco. Si este fichero se dañara perderíamos todas las bases de datos. Con esta optimización, lo que hacemos es que cada tabla MYSQL tenga su propio fichero bajo su correspondiente subdirectorio en/var/lib/mysql.Después de aplicar este cambio y reiniciar el servicio, tendremos que exportar e importar cada una de las base de datos que tuviéramos configuradas.
La tercera consiste en aplicar algunas mejoras en la configuración, que encontramos en la comparativahttp://developer.cybozu.co.jp/kazuho/2009/12/comparing-innod.html?lang=en, dentro de la sección tunning del fichero/etc/mysql/my.cnf:
innodb_buffer_pool_size = 2048M
innodb_log_file_size = 64M
innodb_flush_method=O_DIRECT
innodb_flush_log_at_trx_commit=2
key_buffer_size=64M
myisam_sort_buffer_size=32M
copy/paste: http://tecnoquia.blogspot.com/2009/12/ideas-para-optimizar-mysql.html

Recomendaciones para programar en PHP

4 comentarios

En PHP Benchmark hacen algunas pruebas de eficiencia con respecto a funciones similares de PHP. A continuación voy a hacer un breve repaso, con algunos añadidos:

  • Usar HTML ante PHP: Si necesitas escribir HTML hazlo directamente sin utilizar echo o print. Usa PHP para imprimir información sólo cuando sea necesario.
  • Variables: Favorece siempre que puedas el uso de variables estáticas. No utilices variables que no necesites (ocupan memoria). Evita las variables globales en la medida de lo posible. Usa constantes.
  • Unset: Utiliza la función unset para destruir variables y liberar memoria, sobre todo con arrays o variables extensas. PHP usa un Garbage Collector, pero en mitad de un script puedes usarlo para maximizar la memoria disponible (útil en servidores limitados).
  • Bucles: Revisa bien los bucles en tus programas, si no es necesario un bucle, evitalo. Si puedes ahorrarte ciclos, hazlo. Comprueba la condición de parada y nunca uses funciones en ella (vuelca en una variable antes del bucle). En términos de velocidad un do..while es más rápido que un while, que a su vez es más rápido que un for.
  • Inclusiones: Organiza bien tu código y evita en lo posible el uso de funciones como include_once() y require_once(). Estas funciones son muy utiles para comprobar si un script ya ha sido procesado, pero son muy costosas. En su lugar utiliza include() y require().
  • Supresión de errores @: Al colocar una @ antes de una función evitamos que se muestre un posible mensaje de error. Muy útil, pero muy costoso. Es preferible utilizar un funcion() or ....
  • Random: Si queremos generar valores aleatorios con la función rand(), es recomendable utilizar la familia de funciones mt_rand(). Esta función utiliza un algoritmo de Mersenne Twister mucho más eficiente y rápido.
  • Uso de comillas en PHP: Las comillas simples interpretan literales, sin embargo, las comillas dobles además interpolan el valor de variables. Da siempre preferencia a las comillas simples y nunca escribas símbolos de dolar sin escapar (\$) en comillas dobles, ralentiza mucho la ejecución.
  • Comprobar si existen variables: Siempre se debería utilizar una función para comprobar si existe una variable. Entre las funciones isset(), empty() y is_array(), la primera es la más rápida y eficiente.
  • Operador ===: En las comparaciones, la diferencia del operador === con el operador == es que este último hace una comprobación de tipos de variables antes. Si estás seguro de que son del mismo tipo, utiliza el primero.
  • Memoria y velocidad: Utiliza memory_get_usage() y microtime() para comprobar la velocidad y la memoria que consume tu código.
  • Comparaciones: Los if / else son siempre más rápidos que los switch / case.
  • Las siguientes funciones son alias de las de su derecha. Utilizar la función de la izquierda es mucho más lento que usar la de la derecha:
    • chop -> rtrim
    • close -> closedir
    • die -> exit
    • dir -> getdir
    • diskfreespace -> disk_free_space
    • fputs -> fwrite
    • ini_alter -> ini_set
    • is_writeable -> is_writable
    • join -> implode
    • pos -> current
    • rewind -> rewinddir
    • strchr -> strstr
    • sizeof -> count
    Curiosamente, fputs, a pesar de ser un alias, se comenta que es más rápida que fwrite.
  • Incrementos: Cuando incrementamos una variable del modo $i++ es más lento que si lo hacemos ++$i. La diferencia es que la primera forma primero usa su valor y luego lo incrementa, en cambio, la segunda primero la incrementa y luego la usa. La segunda forma es más rápida, puesto que utiliza 3 opcodes, en lugar de los 4 opcodes de la primera. Usarla cuando sea posible.
  • Imprimiendo textos: La función echo es más rápida que la función print, además de otras diferencias.
  • Expresiones regulares: El uso de regexp es muy contradictorio. Como ventajas tenemos que usan muy poca de memoria, muy potentes y ahorran mucho código. Como desventajas son muy lentas, muy difíciles para novatos o personas que no conozcan teoría de autómatas y lenguajes formales. Personalmente, aconsejo evitarlas a no ser que sean muy necesarias. Por ejemplo, la expresión regular preg_match("![0-9]+!", $foo); reconoce cualquier cadena que sea un número, esto es mucho mas eficiente usando la función ctype_digit($foo);. Las funciones strcasecmp(), strpbrk() y stripos() pueden ayudar mucho.
  • Reporte de errores: Utiliza E_STRICT como nivel de error para hacer debug en tu código PHP. Revisando los logs podrás ver todos los avisos de posibles errores con un nivel máximo.
  • Separaciones: split() permite utilizar expresiones regulares, mientras que explode() no. Intenta utilizar explode siempre antes que la función split.
Copy/Paste desde emezeta.

Office 2003 en Ubuntu con PlayOnLinux

0 comentarios

Ingredientes:

  • 5 Min
  • CD original de Office 2003

Más fácil echarle agua, en consola:

sudo wget http://deb.playonlinux.com/playonlinux_jaunty.list -O /etc/apt/sources.list.d/playonlinux.list
sudo apt-get update
sudo apt-get install playonlinux
Para otra distro o version de Ubuntu, visitar la página de descargas.

La primera vez te pedirá instalar las fuentes (tipos de letra para los amigos), de windows. Luego en el menu aplicaciones-juegos lanza playonlinux, boton Instalar(+), menu Office, Office 2003. Seguir la instalación como si fuera windows. Al final te pregunta si deseas crear accesos directos.

Problemas conocidos sin solución hasta ahora.

  • El excel no abre el documento al hacer doble click (y envia un mensaje de error de red), se puede abrir desde el menu Abrir.
  • El El word no abre el documento al hacer doble click, se puede abrir desde el menu Abrir.
  • Al parecer no funciona bien el portapapeles, al copiar texto e imagen desde la web, solo copia el texto y sin formato.

Las aplicaciones corren notablemente bien.

SS:

Página usuario linux con Apache2 (Ubuntu)

0 comentarios

Se accedería así: http://mihost/~usuario

Nota: la virgulilla o cola de chancho pa los amigos, se saca con alt gr ñ ó alt gr 4

1.- Crear el directorio public_html en tu home
por ejemplo, mi nombre de usuario es kto, entonces quedaría:

/home/kto/public_html

2.- Habilitar el módulo de apache

a2enmod userdir

3.- Reiniciar o recargar
service apache2 force-reload
Me quedaría http://mihost/~kto

Done!

Virtual Host en Apache2 (Ubuntu)

0 comentarios

Ejemplo:

Si queremos agregar el dominio kto.cl

1. Agregar en /etc/hosts

127.0.0.1 kto.cl

2. Crear el server virtual en apache en el directorio sites-available usando la plantilla default :

cp /etc/apache2/sites-available/default /etc/apache2/sites-available/ktocl

3. Modificar /etc/apache2/sites-available/ktocl estos parámetros (con puntos rojos) dejándolos más o menos así :


4. Luego en terminal:
a2ensite ktocl
5. Reinicia o recarga apache:
service apache2 force-reload

Nota: service es para no estar escribiendo /etc/init.d/ , si no lo tienes instalado hazlo con:
aptitude install debian-helper-scripts
7. Prueba en tu navegador http://kto.cl/
Tus contenidos entonces estaran en el directorio /var/www/ktocl

Done!