Query Performance Detector

En la última entrada sobre Optimización de Queries en Salesforce, destapaba unos de los problemas más evidentes de cualquier proyecto: la degradación de rendimiento de los elementos que consultan datos en Salesforce.

Es decir, a medida que nuestra ORG crece, las consultas que inicialmente diseñamos (que quizás optimizamos o quizás no) pueden sufrir degradación. Pero no estoy hablando sólo de las Queries de los Developers con SOQL, estoy hablando de List Views, Reports y Dashboards que crean los usuarios.

Además, esta degradación se realiza en silencio, inadvertida, y solo es visible con incidencias de rendimiento en Producción, cuando ya es demasiado tarde, y las acciones correctoras (creación de índices, re-organización de datos, etc.) no serán inmediatas.

Por ello, y porque existen diversos componentes, que puestos a trabajar de forma conjunta, permiten obtener esta información simplemente, he creado una herramienta, que he denominado: Query Performance Detector ( un nombre poco original, pero significativo 🙂 ).

Seguir leyendo “Query Performance Detector”

Dreamforce Gathering 2018 Barcelona con 1 Millón de Minions

Ayer, 06/11 tuvimos el evento de Dreamforce Gathering 2018 en Barcelona, conjuntamente el grupo de Developers y Administradores de Salesforce.

Primero de todo agradecer a Cognizant, por ceder sus oficinas, y a los organizadores Pablo García, David Sánchez y Roger Borges, por la magnífica organización (dedicando su tiempo), lo interesante del evento y el buen rollo que uno siente en estos eventos.

Repasamos las novedades de  Dreamforce 2018, siendo esta lista los highlights principales:

  1. Strategic partnership with Amazon (AWS)
  2. Global partnership with Apple
  3. Salesforce Customer 360
  4. Einstein Voice Assistant
  5. Integration with Mulesoft

Adicionalmente participé con una presentación sobre Skew Data que pensé que era un tema que era interesante tanto a Administradores como a Developers, y conté con la inestimable ayuda de Gru y los Minions.

Espero pues, poder repetir con el mismo grupo y más participantes porque realmente es interesante, divertido y personalmente disfruto mucho asistiendo.

El pase de diapositivas requiere JavaScript.

A todos muchas gracias y espero volvernos a ver pronto!!

Optimización de Queries en Salesforce (Parte 2) – con Query Plan y Tooling/REST API

Vimos en la entrada anterior que el objetivo de la optimización de consultas es conseguir:

  • Obtener el menor coste posible, es decir el mejor plan de ejecución
  • Que este coste sea inferior a 1, significando que la consulta es selectiva utilizando los índices creados

Como desarrolladores o administradores necesitamos validar si una consulta será selectiva antes de llegar a Producción, y mejorar su rendimiento.

Veremos en esta entrada las herramientas de las que disponemos para obtener los planes de ejecución y los costes asociados calculados por el Optimizer, y así anticipar problemas de rendimiento, y lo haremos no solo para consultas SOQL sinó también para Reports, List Views y Dashboards.

Lo haremos mediante la configuración y utilización de 2 herramientas:

  • Query Plan (muy conocida) de la que solo comentaré aspectos básicos y usos menos conocidos
  • El recurso explain de la REST API y de la Tooling API

Seguir leyendo “Optimización de Queries en Salesforce (Parte 2) – con Query Plan y Tooling/REST API”

Optimización de Queries en Salesforce (Parte 1)

Un tema fundamental al que nos enfrentamos es conseguir que las Queries, Reports, Dashboards, List Views que construimos tengan el mejor rendimiento posible (muchas veces fueron escritas por otros compañeros hace un tiempo).

Desde hace un tiempo quería dedicar una serie de entradas al diseño y optimización de Queries y habiendo finalizado la certificación de Data Architecture and Designer es el momento ideal.

En esta serie de entradas trataré:

  • Qué son los índices y las estadísticas de Salesforce (esta entrada)
  • Qué es y para qué se utiliza el Optimizador de Salesforce (esta entrada)
  • Cuales son las reglas y condicionantes que utilizan el Optimizador para obtener un plan de ejecución de la query con el menor coste (esta entrada)
  • Cuales son las reglas de oro básicas que debemos seguir (esta entrada)
  • Como evaluar el rendimiento de una Query y herramientas que nos proporciona Salesforce para poderla tunear antes de publicarla (entradas siguientes)
  • Mecanismos a nuestro alcance para mejorar el rendimiento sin afectar a nuestro modelo de datos (entradas siguientes)
  • Mecanismos a nuestro alcance que requieren acciones sobre los datos para mejorar el rendimiento (entradas siguientes)
  • Motivos por los cuales el rendimiento de una Query se degrada a lo largo del tiempo (entradas siguientes)

Y finalmente proporcionaré una herramienta propia, que nos permitirá detectar degradación de rendimiento en Queries de nuestra ORG.

Espero pues, que sea interesante y útil para todos los perfiles, tanto admins, desarolladores como arquitectos.

Seguir leyendo “Optimización de Queries en Salesforce (Parte 1)”

Empezando Apex Asíncrono por las colas

En esta entrada me centraré, en cómo diseñar la ejecución de Procesos Asíncronos Apex (en adelante Apex Async), aprovechando las capacidades de la plataforma.

Pero lo haré de manera invertida a como se hace habitualmente, donde se explica como programar los mecanismos de programación. Pero en IMMO, si los desarrolladores, arquitectos y administradores, entendemos bien como gestiona Salesforce los procesos asíncronos, sus colas de Espera y Ejecución, sus límites asociados, etc., la elección del mecanismo de programación, es muy sencilla u obvia.

Seguir leyendo “Empezando Apex Asíncrono por las colas”

BULK API v2: 2 veces más rápida con la mitad de código

Una de las novedades que quizás pasaron inadvertidas en la última release de Winter ’18, fue la nueva versión de la BULK API, denominada BULK API v2, disponible en v41.0.

Esta nueva versión, sigue siendo una API REST, que utiliza los verbos HTTP para crear Jobs, cerrar/abortar, eliminar y obtener información al respecto, aportando novedades para el programador y una mejora del rendimiento para el usuario final.

En esta entrada, se muestran las diferencias entre ambas versiones y se compara el rendimiento.

Seguir leyendo “BULK API v2: 2 veces más rápida con la mitad de código”

Big Objects: Contenedores de Datos – un quiero y quizás puedo de almacenamiento masivo en Salesforce

En la entrada anterior, describía el caso de uso de cómo acceder a una gran volumen de datos desde nuestra ORG via External Objects, y dejaba la puerta abierta a la alternativa a la funcionalidad nativa de Big Objects en Salesforce.

Esta entrada describe qué son, en qué casos de uso pueden aplicarse, cómo crearlos, insertar datos (con Data Loader que parece ser un caso poco documentado) y describir sus características y restricciones, que no son pocas.

Seguir leyendo “Big Objects: Contenedores de Datos – un quiero y quizás puedo de almacenamiento masivo en Salesforce”

Skinny Tables para la mejora de rendimiento Salesforce

Supongamos que después de haber seguido las buenas prácticas de diseño, programación, aplicado índices donde era necesario, seguimos teniendo problemas de rendimiento de un Report/Dashboard o SOQL concreta.

Como almacena Salesforce la información internamente

Seguir leyendo “Skinny Tables para la mejora de rendimiento Salesforce”