They can be many factors and it is difficult to determine without knowing your environment. What I would recommend doing is the following:
Try to check the performance of your application's queries and it does not let you query large tables entirely (eg, query screens where you do not specify anything and it returns all the records in the table at once). Several of these occurring at the same time will lock the bank.
Check if there are any cases where the database is locked when inserting or updating a table for a long time, as it may occur if you insert or update a table without committing or doing rollback, of commitar and in the meantime another user would try to do the same process, locking the bank.
Always after running an application script, make sure that the connection is
closed before closing it. Usually MVC already deals with this, but in applications where you need to open the connection manually, they should be closed on exiting the application, avoiding leaving locked tables