Poco a poco nuestros discos duros mecánicos van perdiendo batalla tras batalla la guerra respecto a los discos basados en memoria flash (discos SSD). La tecnología todavía está en un estado incipiente y el principal de sus inconvenientes, aparte del precio, es que actualmente aún no se disponen de unidades con grandes densidades. Las ventajas respecto a consumo, tiempo de acceso, resistencia a golpes, IOPs, etc. son abismales por lo que nos encontramos ante un gran paso adelante en la tecnología de almacenamiento.
Una de las alternativas que nos ofrecerá el futuro cercano para incrementar el rendimiento de nuestras bases de datos es migrar a tecnología flash nuestro sistema de almacenamiento. Existen almacenamientos especializados para edición de video basados en estas tecnologías ofreciendo unos rendimientos impensables con cabinas basadas en discos mecánicos. En concreto situaciones en las cuales SQL Server se ve obligado a realizar lookups aleatorios serán las más beneficiadas a priori.
Un escenario típico lo encontramos cuando utilizamos una tabla con un conjunto de identificadores (por ejemplo idfactura) y debemos obtener datos asociados a éstos. La aproximación para realizar esto suele ser o bien una solución pura basada en operaciones de conjuntos (mediante join y filtrado), una solución basada en cursor (preferiblemente FAST_FORWARD) o basada en una UDFs (hace el lookup directamente sobre la tabla). A continuación vamos a mostrar cómo se comportarían estas tres alternativas sobre un disco mecánico tradicional de2.5″ a 7200RPM usb y sobre un pendrive de memoria flash usb . Hemos utilizado en ambos casos dispositivos USB para no beneficiar al disco duro con un interfaz (SATA II 3 GBps) mucho más rápido que el USB (USB 2.0 480Mbps). Hemos analizado la duración de la consulta ante una única operación de lookup, 100 y 1000 de ambas alternativas. Los tiempos se han obtenido sobre una caché fría y se han ponderado tras 10 ejecuciones. Los lookup se han realizado sobre una tabla con 1 millón de registros cuya clave primaria es a su vez índice cluster de la tabla y clave para el lookup.
Lo primero que podemos apreciar es que el tiempo total es menor sobre el dispositivo flash en todos los tests. Las mayores diferencias se encuentran cuando las operaciones son pequeñas (<=100 lookups) donde podemos apreciar mejoras de hasta un 67% en el tiempo de respuesta. Por otra parte no podemos dejar de lado las diferencias entre realizar estos lookups mediante una operación orientada a conjuntos, un cursor o una UDF. El uso de un cursor hace que el uso de la nueva tecnología se atenúe en gran medida por lo que preveemos pocas mejoras en aquellas aplicaciones que abusen de los cursores. En aquellas aplicaciones que se caractericen por consultar un pequeño número de registros usando bien operaciones de conjuntos bien UDFs vemos que la mejora en el rendimiento puede ser muy considerable. Obviamente estamos comparando dos dispositivos enfocados al usuario doméstico por lo que cuando trabajemos con dispositivos empresariales deberían realizarse las pruebas de stress y los benchmarks correspondientes para evaluar la mejora a obtener en nuestros escenarios.
Personalmente creo que esta tecnología puede ser un gran aliado, no un sustitutivo, para llevar un paso más allá el rendimiento en aquellos escenarios donde un buen tuning no permite alcanzar las cotas de rendimiento requeridas y se requiere mejorar el hardware. Otro escenario que podría ser un gran beneficiado sería aquel en el que una pequeña parte de la base de datos se actualiza/consulta muy frecuentemente mientras que el resto se mantiene para consultas pesadas, histórico de información o cargas masivas. En este escenario la combinación de un particionamiento inteligente junto a almacenamiento mixto basado en discos mecánicos y en discos SSD podría obtener una gran mejora en el rendimiento sin penalizar en exceso el coste total del sistema.