You, or someone else named Dom, asked a very similar question back in April
in comp.databases.ms-sqlserver and got several answers, including the
excellent advice to stop shrinking your database, which you seem to have
ignored.
Either cancel the job or wait for it to complete. Your choice. Just be aware
that the cancellation process might take as long as the process took to
reach the point at which you are clicking the Cancel button. Here is ravi's
reply, which you seem to have thought was really helpful:
If the state is in suspended, you need to identify on what is the spid or
session waiting on. You can do that by running the dmv
select * from sys.dm_os_wait_stats
order by wait_time_ms desc.
select * from sys.dm_os_waiting_tasks where session_id ='user session no'
Once have the information you can compare the session waits with server
waits.
To check how much of shrink of database is complete, you can use the query
Select percent_complete from sys.dm_exec_requests where session_id= 'your
session id'
The shrinking of database causes fragemtation , you need to update the
statistics of the database once the shrink is complete.
the following command calls sp_updatestats to update all statistics for the
database.
EXEC sp_updatestats
for table or index
UPDATE STATISTICS table_or_indexed_view_name
[
{
{ index_or_statistics__name }
| ( { index_or_statistics_name } [ ,...n ] )
}
]
[ WITH
[
[ FULLSCAN ]
| SAMPLE number { PERCENT | ROWS } ]
| RESAMPLE
| <update_stats_stream_option> [ ,...n ]
]
[ [ , ] [ ALL | COLUMNS | INDEX ]
[ [ , ] NORECOMPUTE ]