Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

169
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!