Q:

Can remote queries cause locks?

We have a SQL Server 2005 (SERVER-A) server that holds the database for an application that has been locking a lot lately. We suspect that the problem are transaction locks, so we decided to capture some traces on that server using SQL Server Profiler, we started capturing the blocked process report and got this:
<blocked-process-report monitorLoop="3501256">
 <blocked-process>
  <process id="processffffffff83047a68" taskpriority="0" 
    logused="0" waitresource="OBJECT: 18:85575343:0 " waittime="27656" 
    ownerId="1540544048" transactionname="InsertCall" 
    lasttranstarted="2013-11-25T14:40:43.083" XDES="0x3790fad8" 
    lockMode="IX" schedulerid="2" kpid="6852" status="suspended" 
    spid="78" sbid="0" ecid="0" priority="0" transcount="2" 
    lastbatchstarted="2013-11-25T14:40:43.083" lastbatchcompleted="2013-11-25T14:40:43.073" 
    clientapp="" hostname="" hostpid="3256" loginname="" 
    isolationlevel="read committed (2)" xactid="1540544048" currentdb="18" 
    lockTimeout="4294967295" clientoption1="673185824" clientoption2="128056">
   <executionStack>
    <frame line="201" stmtstart="10790" stmtend="11790" sqlhandle=""/>
    <frame line="1" sqlhandle=""/>
   </executionStack>
   <inputbuf>EXEC SomeProcedure</inputbuf>
  </process>
 </blocked-process>
 <blocking-process>
  <process status="suspended" waittime="15" spid="51" sbid="2" ecid="0" priority="0" 
  transcount="1" lastbatchstarted="2013-11-25T14:40:20.900" 
  lastbatchcompleted="2013-11-25T14:40:20.900" lastattention="2013-11-25T14:39:18.530" 
  clientapp="Microsoft SQL Server" hostname="SERVER-B" hostpid="1340" loginname="" 
  isolationlevel="read committed (2)" xactid="1540536548" currentdb="7" 
  lockTimeout="4294967295" clientoption1="671088672" clientoption2="128056">
   <executionStack>
    <frame line="1" sqlhandle=""/>
    <frame line="1" sqlhandle=""/>
   </executionStack>
   <inputbuf>INCOMING SELECT FROM SERVER-B</inputbuf>
  </process>
 </blocking-process>
</blocked-process-report>

On SERVER-B there's another SQL Server 2008 that has SERVER-A as linked server and it only executes remote SELECTs. So I don't understand the previous capture, can a remote select cause locks? And if so, how can we prevent this?

A:

If SERVER-A has been specified as a "linked server" then queries to tables concerning the linked data will be passed through to SERVER-A as if they were executed directly against SERVER-A. As such, they obviously could cause locks. 
In your case, with a READ COMMITTED transaction isolation level the SELECT query will hold read locks for the affected rows (which may be the entire table) for the entire duration of the query execution, effectively preventing execution of updates on these rows as well as statements which require a lock for the entire table (such as DML statements). 
Note that the statement seems to be running for a while already (at least a minute). If you have such long-running selects blockig your updates, consider running them using either a transaction isolation level of SNAPSHOT or READ UNCOMMITTED, depending on your performance and data consistency requirements. See the docs on transaction isolation levels for details.

