Can someone explain the result set from sys.dm_tran_locks? I am trying to understand if the result I am seeing is normal for a long running process or an indication of a problem. 

When I run 
select * from sys.dm_tran_locks 

I am getting over 60k rows showing all from different session ids. 


resource_type = PAGE 
resource_description = same value
resource_associated_entity_id = same value
request_mode = S
request_status = GRANT


I'm trying to understand if this means that the query currently running needs tuning or if it is normal to see this much rows showing different 'request_session_id' with a shared lock on the same object?
You said, there are different 'request_session_id' showing up, so there are many sessions, not one, to read the same table. Shared locks are compatible with other shared locks so there is no problem at all. If you are warring about the memory comsumed by locks, every lock takes about 96 bytes thes is quite small and server can decide to escalate to table lock when:


  
  A single Transact-SQL statement acquires at least 5,000 locks on a    single nonpartitioned table or index.
  A single Transact-SQL statement acquires at least 5,000 locks on a    single partition of a partitioned table and the ALTER TABLE SET
  LOCK_ESCALATION option is set to AUTO.
  The number of locks in an instance of the Database Engine exceeds    memory or configuration thresholds.
  


More about lock escalation here:  Lock Escalation (Database Engine)

Your situation is normal, no lock escalation takes place but just many sessions are reading the same table