jueves, 6 de septiembre de 2012

Redes Servidores y UDP confiable

Pregunta sobre Reliable UDP con interesantes comentarios:
http://stackoverflow.com/questions/2940106/simple-reliable-udp-c-libraries

Boost.Asio

http://www.boost.org/doc/libs/1_51_0/doc/html/boost_asio.html

Librería muy utilizada encuadrada dentro del framework Boost con múltiples utilidades. Tiene sockets asincronos, ejemplo de un servidor de chat,

UDP - UDP reliable protocol

http://udt.sourceforge.net/index.html

Se parece mucho a las funciones normales de sockets, minima barrera de entrada. Usado por Raknet y otros frameworks. El mejor protocolo para envío de mucha información en redes de amplio ancho de banda.

NOTA: en documentos de paco hay un ejemplo de implementación de EPOLL.

lunes, 3 de septiembre de 2012

Estadísticas de acierto de la cache

Es muy interesante saber en nuestra base de datos cuantas veces encontramos en la caché el resultado de las consultas. Si tenemos valores altos, seguro que no accedemos al disco a buscar los resultados y por lo tanto nuestra base de datos está funcionando bien.

Vamos a ver el porcentaje de acierto a nivel de base de datos:

SELECT d.datname, pg_database_size(d.datname), SUM(pg_stat_get_db_blocks_hit(d.oid)) / SUM(pg_stat_get_db_blocks_fetched(d.oid)) AS hit_rate
FROM pg_database d
GROUP BY d.datname
HAVING SUM(pg_stat_get_db_blocks_fetched(d.oid)) > 0

Pero aún más interesante es ver el resultado a nivel de tabla:

select t.schemaname, t.relname, heap_blks_hit*100/(heap_blks_hit+heap_blks_read) as BCHR
from pg_statio_user_tables t
where t.heap_blks_read > 0

Si tus tablas más accedidas tienen valores superiores a 95% todo va bien.


Sino revisa tus valores de "shared_buffers" y "effective_cache_size", si son correctos quizá tengas que revisar tus sentencias o aumentar tu memoria.

Referencias:
http://blog.kimiensoftware.com/2011/05/postgresql-vs-oracle-differences-4-shared-memory-usage-257