O uso de merge fazia várias consultas para validar se as entidades já existiam.
Verifique se tem alguma forma de fazer merge em banco. No postgresql tem essa solução:
INSERT INTO order_items (
id,
quantity,
price,
created_at,
updated_at
) values (
@Id,
@Quantity,
@Price,
NOW() AT TIME ZONE 'UTC',
NOW() AT TIME ZONE 'UTC'
) ON CONFLICT (id) DO UPDATE SET
quantity = EXCLUDED.quantity,
price = EXCLUDED.price,
updated_at = NOW() AT TIME ZONE 'UTC';";
Mysql:
INSERT INTO users (user_id, username, email)
VALUES (1, 'john_doe', '[email protected]')
ON DUPLICATE KEY UPDATE
email = '[email protected]';
no postgres inclusive tem uma técnica de passar arrays para o banco (unnest), assim consigo incluir (ou atualizar) dezenas de registros com uma única query
Existe alguma outra forma mais eficiente e simples de lidar com esse tipo de timeout, especialmente em sistemas legados como esse?
Debug .. Identificar a causa raiz .. otimizar
Para não ser pego desprevenido: Observabilidade
Muitos sistemas ignoram completamente a observabilidade, mas é com ela que conseguimos identificar problemas de desempenho antes deles se tornarem críticos.