I clear locked records all the time and you don't have to clear all users out of the system (we have up to 85 users between 4am and 7pm local time). I just run the following query in SQL Query Analyzer to find locked records.
select A.session_id, A.row_id, table_path_name, B.sqlsvr_spid, C.USERID,*
from tempdb..dex_lock A
left join tempdb..dex_session B
on A.session_id=B.Session_id
left join dynamics..activity C
on C.sqlsesid=b.session_id
order by table_path_name, B.session_id
If a record has an abandoned lock, the USERID field will be null. I then delete the lock from the dex_session and dex_lock tables and we're back up and running. I can also confirm that I am clearing the correct lock because it lists the company, table, and Row_ID being locked as well. This makes it a 2 minute job to free users, without the MS method of asking everyone nicely to log out while I clear sessions.
I just thought I should add this as it happens far more than I would like and I'm pretty sure I'm not the only one that finds this.