Slow operation may be due to bad query plans or to lock contention. Queries do not normally lock data since they by default run in read committed isolation. Concurrent updates may lock each other and there are lock waiting statistics available in a system view.
The system can produce explanations of query plans for diagnostics. In the even of an application developer writing often reused queries, it is possible to explicitly specify a join order, which will get around any bad choices by the query optimizer. This is not normally needed, though.