Optimizaciones para organizaciones de Salesforce con muchos datos (parte 1)
A medida que crece el volumen de datos de tu organización de Salesforce, también pueden aumentar los problemas de rendimiento. Esta es la parte 1 de una serie de 4 partes sobre cómo optimizar el rendimiento de tu organización de Salesforce.
Por Randalyn Hill-Coffer·Revisado por el equipo de Blue Canvas··7 min de lectura
Si alcanzas constantemente tus límites de almacenamiento y tienes millones de filas de datos en tu organización de Salesforce, puedes beneficiarte de algunas optimizaciones que mejorarán el rendimiento de tu organización y harán que tus implementaciones sean más fluidas. Muchos de los consejos de la siguiente serie de publicaciones son conocimientos que se esperan de cualquier profesional de Salesforce que busque una certificación de diseñador de arquitectura y gestión de datos o cualquier persona que trabaje con grandes volúmenes de datos.
Arquitectura de la plataforma
Antes de comenzar, repasemos cómo funciona la plataforma Salesforce a grandes rasgos. Salesforce tiene un documento técnico sobre su arquitectura, y creo que es importante saber cómo se relaciona todo antes de comenzar la optimización. Combinar esos conocimientos fundamentales con técnicas aplicadas a nivel de metadatos y configuración puede resolver problemas de rendimiento en organizaciones grandes de Salesforce.
Salesforce es una plataforma multiinquilino que utiliza tecnologías internas diferentes a las de una base de datos relacional tradicional. Como plataforma multiinquilino basada en metadatos y con capacidades polimórficas, utiliza un motor de ejecución que presenta los datos de las aplicaciones a partir de los propios metadatos. Salesforce contiene tres capas diferentes: el motor de base de datos (núcleo), los datos de los inquilinos y los metadatos de la aplicación. Salesforce aprovecha las tres para estructurar la organización específica de cada cliente.
Salesforce utiliza una Diccionario Universal de Datos (UDD) para almacenar objetos, campos, desencadenadores, páginas Visualforce y componentes Lightning, que se registran exclusivamente como metadatos. Así es como Salesforce puede manejar 2 mil millones de transacciones al día y, al mismo tiempo, ofrecer un sistema de gestión de bases de datos relacionales con optimizaciones de consultas adaptadas a entornos multiinquilino. (Salesforce ha implementado muchas optimizaciones: por ejemplo, el código Apex se compila y almacena como metadatos, se interpreta durante la ejecución y se guarda en caché para facilitar la escalabilidad).
Cuando creas esquemas de aplicaciones, el UDD registra los metadatos de tus objetos, sus campos, sus relaciones y otros atributos. Mientras tanto, unas pocas tablas grandes de base de datos almacenan los datos estructurados y no estructurados de todas las tablas virtuales. Un conjunto de índices multiinquilino relacionados, implementados como tablas dinámicas simples con datos desnormalizados, hace que el conjunto de datos combinado sea extremadamente funcional.
Salesforce también utiliza múltiples optimizaciones de motores de búsqueda para gestionar el uso y distribuir la carga de la plataforma. Para mejorar los tiempos de respuesta de las aplicaciones, estos motores admiten la indexación y las búsquedas de texto completo. A medida que las aplicaciones evolucionan, los servicios en segundo plano de estos motores de búsqueda crean índices específicos para cada usuario e inquilino.
Los sistemas de bases de datos tradicionales dependen de índices nativos para obtener información específica, pero Salesforce utiliza técnicas como una sola columna flexible para almacenar datos de muchos campos con distintos tipos de datos estructurados. Para garantizar que tu aplicación de Salesforce escale con buen rendimiento, aquí tienes algunos consejos para reducir drásticamente los tiempos de operación:
- Utiliza la operación de base de datos más eficiente para realizar cada tarea; por ejemplo, en términos de velocidad de comparación, usar Insert es mejor que Update, y Update es mejor que Upsert.
- Utiliza las técnicas de optimización que ofrece Salesforce, como índices personalizados, tablas reducidas, etc.
- Utiliza funciones de administración como Aplazar mantenimiento del acceso compartido o Cálculo paralelo del acceso compartido en el escenario adecuado.
- Aplica las mejores prácticas para adaptarte a los cambios en los metadatos, el esquema y la carga de datos.
Salesforce también ofrece Big Objects como una forma de almacenar y administrar grandes volúmenes de datos en la plataforma. Puedes archivar datos de otros objetos o importar conjuntos de datos masivos desde otros sistemas. Vamos a hablar sobre cómo optimizar objetos estándar y personalizados, pero puedes aprovechar Big Objects mediante BULK API o Apex por lotes.

Cuando las organizaciones crean objetos personalizados, la plataforma registra metadatos sobre los objetos y sus campos, relaciones y otras características de su definición. Salesforce almacena los datos de las aplicaciones de todas las tablas virtuales en unas pocas tablas grandes de base de datos, que se particionan por inquilino y funcionan como almacenamiento de tipo heap. Luego, el motor de la plataforma materializa los datos de las tablas virtuales durante la ejecución, tomando en cuenta los metadatos correspondientes.
Si hay muchas consultas fuera de control y el rendimiento no está optimizado, lo notarás en toda tu organización, especialmente al realizar implementaciones. Estas son algunas señales claras:
- Operaciones lentas de gestión de datos, bloqueos al compartir registros y bloqueos que afectan a los usuarios finales
- Bajo rendimiento en vistas de lista e informes
- Integraciones de API y otras operaciones que agotan el tiempo de espera debido a los límites de ejecución, especialmente los de tiempo de espera y CPU
- Rendimiento lento de SOQL y SOSL, implementaciones ineficientes
- Aumento del tiempo de actualización de sandboxes y gestión ineficiente de cambios
- Páginas y componentes Lightning y Visualforce lentos
- Resultados de búsqueda imprecisos; algunos registros no aparecerán hasta que se procesen
Desequilibrio de datos
Aunque es difícil cambiar los modelos de datos de las organizaciones existentes, diseñar tu modelo de datos anticipando su crecimiento y siguiendo las mejores prácticas protegerá eficazmente a tu organización de los problemas de rendimiento mencionados anteriormente.
Un problema frecuente ocurre cuando tienes más de diez mil registros secundarios en un objeto principal. Los objetos estándar como Cuenta y Oportunidad tienen relaciones de datos integradas y modelos de acceso compartido específicos. Un antipatrón común es tener un objeto principal asociado a muchos secundarios, lo que provocará bloqueos de registros y un bajo rendimiento de las consultas si las consultas y búsquedas no son lo suficientemente selectivas. Si este objeto principal también se actualiza desde distintos puntos, como API externas y cambios manuales de los usuarios, se generarán cuellos de botella y fallas a medida que aumente la cantidad de registros. Si tu organización depende en gran medida de configuraciones de visibilidad y acceso compartido basados en relaciones entre objetos principales y secundarios, usar métodos alternativos ayudará a reducir los tiempos de procesamiento:

- Prueba configurar el acceso compartido público de lectura y escritura como valor predeterminado para toda la organización en los datos no confidenciales, de modo que no sea necesario procesar reglas para datos a los que todos pueden acceder.
- Configura los objetos secundarios para que estén controlados por el objeto principal siempre que sea posible.
- Si experimentas bloqueos de registros, debes implementar una lógica de reintentos para los casos en que un registro esté bloqueado.
- Procesa tus operaciones con ParentID para garantizar la unicidad y el uso de distintos hilos de ejecución.
- Utiliza Apex por lotes y ten en cuenta los valores de tiempo de espera, los límites de Bulk API y las técnicas de optimización.
Para evitar el desequilibrio de datos, intenta distribuir los registros entre varios objetos principales y evita concentrar demasiados registros en un solo usuario, especialmente un usuario de integración o de API, como suele ocurrir. También puedes considerar otros enfoques de visibilidad y acceso compartido basados en roles mediante reglas de asignación de casos o prospectos.
Si ya trabajas con una organización que presenta estos problemas, lo mejor para comenzar es elegir un usuario al que asignar estos registros secundarios y colocarlo por encima de la jerarquía de roles, para que los cambios de propietario y el procesamiento no se ejecuten cada vez.
Cuando cambias las reglas de acceso compartido, independientemente de los criterios, se recalculan los cambios para todos los registros relevantes del sistema. Los cambios en la jerarquía de roles y la lógica de acceso compartido también se ejecutan en cada implementación, lo que aumenta los tiempos de implementación.
Otro escenario que debes considerar es el desequilibrio en las relaciones de búsqueda. Esto ocurre cuando tienes demasiados registros secundarios asociados al registro que buscas. Es muy fácil crear nuevos campos y relaciones en Salesforce, pero estos tienen un costo de rendimiento si trabajas con un gran volumen de datos. Para identificar este problema de rendimiento, debes revisar cuidadosamente los objetos con demasiadas operaciones de inserción y actualización.

Rendimiento de búsqueda en Salesforce
La arquitectura de búsqueda de Salesforce está diseñada y optimizada exhaustivamente para su propio almacenamiento de datos. Se utiliza internamente en muchos lugares:
- Captura web de prospectos y casos
- Reglas de duplicados y reglas de coincidencia
- Conocimiento y soluciones de Salesforce
- Campos de búsqueda y cuadros de búsqueda
- Búsqueda global
- La barra lateral
Salesforce indexa automáticamente la mayoría de los campos de texto. Esto devuelve primero las búsquedas indexadas en el conjunto de resultados y luego lo reduce según los permisos, los filtros y los límites de búsqueda. SOSL también funciona de manera similar y puedes utilizarlo mediante la API o Apex.
Lo que diferencia estas operaciones de una función de búsqueda en una base de datos tradicional es que, si aplicas ajustes de rendimiento tradicionales basados en el esquema de tu organización, verás que no son eficaces, porque la plataforma utiliza tablas virtuales de base de datos con metadatos, datos y tablas de pivote.
Otro punto importante es que, para que los datos aparezcan en el conjunto de resultados, primero deben estar indexados. Por eso, es posible que no veas registros nuevos en los resultados de búsqueda después de una carga masiva de datos: los registros aún no están indexados. (Hay muchas particularidades de la plataforma como esta que queremos abordar en nuestras próximas publicaciones para facilitarte el trabajo).
Optimizador de consultas de la plataforma Lightning
El Optimizador de consultas de la plataforma Lightning ayuda al optimizador de la propia base de datos a generar consultas eficaces al proporcionar acceso eficiente a los datos en Salesforce.
El optimizador de consultas de la plataforma Lightning trabaja con consultas generadas automáticamente que gestionan reportes, vistas de lista y consultas SOQL. El optimizador:
- Determina el mejor índice para ejecutar la consulta, si es posible, según los filtros de la consulta.
- Determina la mejor tabla para ejecutar la consulta si no hay un índice adecuado disponible.
- Determina cómo ordenar las tablas restantes para minimizar el costo.
- Inserta tablas de valores de claves externas personalizadas necesarias para crear rutas de unión eficientes.
- Influye en el plan de ejecución de las uniones restantes, incluidas las relacionadas con el acceso compartido, para minimizar la entrada y salida (E/S) de la base de datos.
- Actualiza las estadísticas.
Por ejemplo, también puedes aplicar estos consejos específicos para optimizar los reportes y paneles de bajo rendimiento en tu organización:
- Usa filtros selectivos y reduce los datos que se consultarán.
- Utiliza la indexación del sistema (ID externo) y la indexación personalizada según el caso de uso.
- Generación asíncrona de reportes para ejecutar un reporte en segundo plano.
- Vacía la papelera de reciclaje con frecuencia.
- Usa parámetros de URL para filtrar reportes.
- Usa métodos de envío por correo electrónico para recibir reportes de ejecución prolongada.
En la siguiente parte, profundizaremos en cómo escribir mejores consultas utilizando índices, tablas reducidas y estadísticas de bases de datos. Consulta Parte 2 de esta serie para obtener más información.



