Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

173
Vistas
¿Las transacciones innecesarias de la base de datos causan lentitud?

Estoy trabajando en un entorno Spring, Java, Hibernate, Postgresql. Estoy viendo una lentitud bastante severa en mi base de datos. Mi pregunta específica es qué tan malo es si estoy agregando la anotación @Transactional de Spring a una clase que contiene métodos que no llegan a la base de datos. En otras palabras, no requieren una transacción. Suponga que estos métodos son algunos de los más utilizados.

Así que algo como esto (sólo un ejemplo):

 @Component @Transactional public class ProjectManager { public String getProjectUrl(Project project) { //simple logic that does not use the database return "/my/url/" + project.getId(); } }

Entiendo que hay muchos factores que pueden causar la lentitud de la base de datos. Me pregunto si esto es una gran bandera roja o no es tan importante. ¿Debería sacar estos métodos y ponerlos en una clase diferente que no esté marcada con @Transactional ?

AIT

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

En primer lugar, su método getProjectUrl será interceptado con un aspecto primaveral, que:

  1. Crea transacción si es necesario
  2. Invoca tu método
  3. Completa la transacción

Esto está bien descrito en Spring Docs . Además, Spring no es lo suficientemente inteligente como para comprender que el código del método no usa DB en absoluto ( como vemos en la fuente ).

Entonces, definitivamente podemos concluir que @Transactional de Spring causa algunos gastos generales .

Pero, ¿qué tipo de gastos generales?

  • Java en cualquier caso: el código de aspecto se implementa de todos modos
  • Según el valor de propagation de @Transactional , es posible que nos veamos obligados a crear una transacción física (DB). Esto provoca red + conexión + sobrecarga del lado de la base de datos.

Por otro lado, si elimina @Transactional , también debe saber que Postgres envuelve CUALQUIER consulta SQL no transaccional en transacción implícita ( docs ):

PostgreSQL en realidad trata cada instrucción SQL como ejecutada dentro de una transacción. Si no emite un comando BEGIN, entonces cada declaración individual tiene un BEGIN implícito y (si tiene éxito) COMMIT envuelto alrededor.

Finalmente, la respuesta: no use @Transactional si su método no trata con DB.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda