As I said, one method to monitor segment utilization is by using thresholds which are well documented in the manuals.
sp_helpdb also illustrates how one can use builtin functions and the system tables such as sysusages, sysdevices, etc to determine how much space is being consumed and how much is free.
Here is a very untested piece of sql to list, both pages free by device fragment and segment, and then grouped and aggregated by segment - derived from the code in sp_helpdb:
select db_name(u.dbid) as "dbname",d.name,s.name,
case u.segmap
when 4 then str(lct_admin("logsegment_freepages", db_id('mydb'))
- lct_admin("reserved_for_rollbacks", db_id('mydb')),12)
else str(curunreservedpgs(u.dbid, u.lstart, u.unreservedpgs),12)
end as "free_pgs"
from master..sysdevices d
inner join
master..sysusages u
on d.vdevno = u.vdevno
inner join
syssegments s
on u.segmap & power(2,s.segment) != 0
where u.dbid = db_id('mydb')
and d.status & 2 = 2
order by u.dbid,u.lstart
select db_name(u.dbid) as "dbname",s.name,
case u.segmap
when 4 then str(lct_admin("logsegment_freepages", db_id('mydb'))
- lct_admin("reserved_for_rollbacks", db_id('mydb')),12)
else str(sum(curunreservedpgs(u.dbid, u.lstart, u.unreservedpgs)),12)
end as "free_pgs"
from master..sysdevices d
inner join
master..sysusages u
on d.vdevno = u.vdevno
inner join
syssegments s
on u.segmap & power(2,s.segment) != 0
where u.dbid = db_id('mydb')
and d.status & 2 = 2
group by db_name(u.dbid),s.name,u.segmap
go
dbname name name free_pgs
------------------------------ ------------------------------ ------------------------------ ------------
mydb user_dev_01 system 2682
mydb user_dev_01 default 2682
mydb user_log_01 logsegment 209093
mydb user_dev_01 system 4480
mydb user_dev_01 default 4480
mydb user_log_01 logsegment 209093
mydb user_dev_02 system 159548
mydb user_dev_02 default 159548
mydb user_dev_02 system 255000
mydb user_dev_02 default 255000
mydb user_dev_01 system 249112
mydb user_dev_01 default 249112
mydb user_dev_01 system 255000
mydb user_dev_01 default 255000
(14 rows affected)
dbname name free_pgs
------------------------------ ------------------------------ ------------
mydb default 925822
mydb system 925822
mydb logsegment 209093
(3 rows affected)