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”

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)”

Data Skew Detector: aplicación para detectar Data Skew en tu ORG

En la entrada anterior describí que era la anomalía en los datos llamada Data Skew en Salesforce. Y aunque ese es el primer paso, lo realmente útil, en nuestro día a día, es poderlo detectar con antelación.

No conozco qué Salesforce ofrezca, ninguna utilidad para la localización de Data Skew, aunque anticiparnos a qué suceda en nuestra ORG, puede suponer ahorrarnos muchos dolores de cabeza.

Por ello, he desarrollado una utilidad en APEX que permite analizar tu ORG, y encontrar todos los campos con Data Skew. Disponer de esta información puede ahorrar problemas a los usuarios de tu ORG, espero que te sea de ayuda .

Seguir leyendo “Data Skew Detector: aplicación para detectar Data Skew en tu ORG”

Data Skew: bloqueos y pérdida de rendimiento con GRU y los Minions

(Actualización 11/12/2018:  realizé una presentación en el evento, Barcelona Dreamforce Global Gathering 2018, donde expuse la problemática de Data Skew. Para la explicación, utilizé analogías con Gru y los Minions, y dado su buen recibimiento he creído necesario actualizar este artículo y el uso de las analogías que utilicé).

Sucede habitualmente que podemos tomar decisiones para gestionar nuestros datos, que disfrazadas de buenas ideas, pueden perjudicar el rendimiento e incorporan incidencias importantes. Estas han sido detectadas en muchas ORGs y reciben el nombre de Data Skew.

En este artículo, con la ayuda de GRU y los Minions, veremos estos 3 tipos de Data Skew:

  1. Ownership Skew
  2. Implicit Sharing Data Skew
  3. Lookup Skew

Veremos qué son, por qué suceden y cómo podemos evitarlos.

Seguir leyendo “Data Skew: bloqueos y pérdida de rendimiento con GRU y los Minions”

Contexto de Ejecución en Salesforce

Estás creando un nuevo trigger con la funcionalidad deseada. Lo has probado en tus scratch orgs, funciona correctamente, tus tests devuelven los resultados esperados.

Realizas el pase a la Sandbox de Integración, y PUF!! tu trigger finaliza con una Excepción de Límites superados. ¿Cómo puede ser?

Uno de tus compañeros, te pregunta: ¿Qué se está ejecutando dentro del Contexto de Ejecución al invocar el Trigger?

Si esta pregunta te suena a chino o no estás seguro de los que es el Contexto de Ejecución, quizás este artículo pueda ayudarte… y que sepas que no es culpa de nadie 😉

Seguir leyendo “Contexto de Ejecución en Salesforce”

Salesforce Connect en dreamOlé 18 –

Durante el pasado Abril, tuve el inmenso placer de introducir el protocolo oData mediante el uso Salesforce Connect en dreamOlé.

Este evento, el mayor realizado en España, está liderado por un equipo de personas absolutamente increíble, que dedican su tiempo libre, sus energías y buen humor para crear un evento de ámbito internacional.

Seguir leyendo “Salesforce Connect en dreamOlé 18 –”

Dynamic Planning for Async Processing

As explained in the last 2 entries, asynchronous processing and execution planning capabilities on Salesforce are very useful and powerful.

But nonetheless, in some complex scenarios, you will find some limitations that can be overcome easily.

Let me explain how, with some Apex Developing and using standard capabilities, you can get a quite powerful Dynamic Planner to sort out those limitations.

My goal on this entry is to describe the current limitations on the platform, explain how they can be solved, and hope they are useful and make some contribution to improve your knowledge in this key area.

Seguir leyendo “Dynamic Planning for Async Processing”

Apex Connector Framework – Usar un servicio externo como un Objeto Nativo

Vimos en las entradas anteriores sobre el uso de oData en Salesforce con Connect, pero dejé para más adelante el Apex Connector Framework (ACF), y ha llegado la hora.

Con un caso de uso que espero entretenido e interesante, muestro como el ACF nos abre un fácil integración con sistemas externos que sin él tendría un coste muy elevado, abriendo las capacidades internas de Salesforce Connect.

Si no conoces el ACF, no te preocupes, realizaré una pequeña introducción, y si lo conoces, quizás te intereses saber algo más de criptomonedas 😉

Seguir leyendo “Apex Connector Framework – Usar un servicio externo como un Objeto Nativo”

Planificador Dinámico para Procesos Asíncronos

Como hemos visto en las 2 entradas anteriores, las capacidades asíncronas de Salesforce y su planificación son de gran ayuda.

Aún así, vimos que podemos encontrar una carencia: si nuestros procesos asíncronos tiene condiciones funcionales o técnicas de las que depende lanzar su ejecución.

Mi objetivo es explicar la idea, ofreciendo una prueba de concepto funcional, para que puedas darle la vuelta, mejorarlo y ampliarlo para tus necesidades.
Seguir leyendo “Planificador Dinámico para Procesos Asíncronos”

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”

Introducción a la Arquitectura de Eventos en Salesforce

“Four years from now, ‘mere mortals’ Will begin to adopt an event-driven architecture (EDA) for the sort of complex event processing that has been attempted only by software gurus [until now]’
—Roy Schulte (Gartner), 2003

En esta primera entrada de una serie, intento situar, cuales son los mecanismos existentes en Salesforce, cuyo core es el uso de Eventos, e intento compararlos y ubicarlos en sus casos de uso.

Podría decirse que esta es una entrada 101 en Eventos de Salesforce.

En mi experiencia, no es trivial entender los “productos/mecanismos” que ofrece y ofrecerá Salesforce sobre eventos (Streaming API, Platform Events, etc.), y las tecnologías (Kafka, Bayeaux, Long Polling, etc.)  asociadas y los casos de uso a que dan respuesta.

Por ejemplo, el título de esta entrada es incorrecto, ya que debería ser algo así como: Introducción a los mecanismos de la Salesforce Enterprise Messaging Platform (pero con ese nombre …), espero pues, que el resto del artículo no sea como el título ;-).

Seguir leyendo “Introducción a la Arquitectura de Eventos en Salesforce”

Backup en Salesforce: Opciones disponibles y Alternativas

58% of downtime incidents are caused by human error alone (Boston Computing Network)

Every Minute 3,535 data Records are lost (breachlevelindex)

En este artículo, se enumeran los mecanismos nativos en Salesforce para la realización del Backup de datos, y su recuperación. También se analizan los puntos débiles de estas mecanismos ante los casos de uso más habituales de pérdida de datos.

Seguir leyendo “Backup en Salesforce: Opciones disponibles y Alternativas”

Las Named Credentials simplifican el código Apex de Callouts mediante configuración estándar

La mayoría de los proyectos de Salesforce requieren Callouts para integrarse e invocar servicios en sistemas externos. Habitualmente estos Callouts, requieren de código Apex, el cual, puede volverse costoso, voluminoso y engorroso de mantener si desconocemos las Named Credentials.

Seguir leyendo “Las Named Credentials simplifican el código Apex de Callouts mediante configuración estándar”

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”

Reporting sobre una Arquitectura Híbrida: Amazon-Salesforce usando Salesforce Connect

Una de las limitaciones que existian en referencia al uso de External Objects, era su limitada capacidad de Reporting.

En un artículo de Mark Kovacevich, Salesforce Connect Reporting, explicaba un workaround mediante programación en APEX:

  • Mostrando una List View con un Controller básico
  • VisualForce que con un Custom Controller muestra los registros y pinta un par de diagramas.

Seguir leyendo “Reporting sobre una Arquitectura Híbrida: Amazon-Salesforce usando Salesforce Connect”

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”