Monday, June 15, 2009

Enamorándome

Disclaimer: post técnico.

El oráculo siempre me ha parecido la base de datos que, por mucho, aventajaba a sus competidores. Por esas cosas del fanatismo, tenía pocos argumentos porque siempre había trabajado con Oracle, salvo algunas cortas pesadillas donde mi disgusto por la nueva base podía tener que ver más con mis costumbres y hábitos que con la diferencia real entre ellas.

Ahora, trabajando con Sql Server, mi gusto por Oracle se está transformando en enamoramiento. Enamoramiento, claro, como el de un tanguero: llorando por lo perdido. O como canta Serrat, no hay nada más amado que lo que perdí.

Y que perdí?. Esto perdí:
  • En Oracle, de toda la vida, un lector no se bloquea porque otro proceso escriba. Sql Server lo incorpora a partir de 2005. Antes, si queríamos hacer que un lector no se bloqueara por un escritor podíamos leer los bloques sucios (no comiteados).
  • En Oracle, el profiler no agrega carga adicional, tanto que si no fuera por el espacio en disco, uno lo podría tener siempre prendido.
  • En oracle el profiler da datos agregados y también da un listado de los eventos generados por esa sesión: por ejemplo, puedo ver una línea por cada bloque que leyó una consulta, viendo a que tablespace fue. En Sql Server solo tengo valores agregados por consulta. Y que para que quiero ver a donde leyó cada bloque?... por ejemplo para saber si está yendo al rollback (o a la tempdb en Sql Server) para leer consistente. Como me entero en el profiler de Sql Server si el problema es que un stored procedure está recibiendo parámetros innecesariamente largos y la demora está en la transferencia de red? (cosa que me ha pasado en Oracle). Más genéricamente, la comunidad de Sql Server parece que todavía está haciendo análisis de performance por indicadores (tema para otro post, mientras tanto, se puede leer online el primer capítulo del libro de Cary Millsap , particularmente la página 6).
  • En Oracle, existe un paquete, llamado DBMS_STATS (por cierto, si googlean algo de Oracle y caen en oracle-dba.com dba-oracle.com (*), sepan que su autor sabe muy poco de lo que habla), que permite generar estadísticas de las tablas para probar que plan elegiría el motor con otros, hipotéticos, juegos de datos. En Sql Server hay un mecanismo no documentado que permite exportar estadísticas de una tabla que ya existe. El mecanismo de Sql Server genera una larga sucesión de números en hexa que tienen codificados, de alguna manera y claramente inaccesible al resto de los mortales (muy Microsoft's way) las estadísticas. O sea, si querés sacarte una duda sobre una situación hipotética, esperá a que se produzca (sin mencionar lo incómodo que es pedirle al DBA algo cada cinco minutos)
  • Oracle tiene RAC, que no es un mecanismo de snapshots, por más que los admiradores de Sql Server lo intenten comparar con la replicación. RAC no es replicación de snapshots, RAC es un mecanismo por el cual varias instancias de bases de datos pueden acceder a los mismos archivos de datos. Y anda muy pero muy bien.
  • En Oracle puedo correr un debug contra los stored procedures sin necesidad de comprar un producto adicional. En Sql Server necesito una de las versiones de 'gama alta' del Visual Studio.
  • Oracle anda en varios sistemas operativos. Sql Server en uno (concedámosle ese status a Windows)
  • En Oracle, hay un UTL_MATCH, para calcular distancias entre strings que hasta implementa el algoritmo Jaro-Winkler. En Sql Server, claro, lo podés hacer.
  • En Oracle existe una API armada que incluye muchísimas funciones típicamente necesarias, en Sql Server se pueden hacer (con la extensión del CLR en 2005). Un ejemplo?... expresiones regulares (lo que ocurre, emho, es que los programadores windows se enteraron de la existencia de las expresiones regulares hace unos pocos años)
Supongo que habrá más diferencias, que iré disfrutando con el correr de las semanas.

Update: me comenta mi amigo P. que el dominio de la empresa de Burleson está mal, que el correcto es dba-oracle.com. En el link de su nombre hay un artículo de alguien que sí sabe sobre la ignorancia de este tipo. En la página de Jonathan Lewis hay bastante sobre Don Burleson.


No comments: