如果Sybase的数据和日志段位于同一设备中,是否有方法从数据库中获取日志使用情况?
我搜索过,有一些查询示例显示了所有数据库和用法,但许多人评论说,当数据库段=7(数据和登录在同一设备中(时,它将显示相同的值,因为它们在同一个设备中。
当出现日志挂起时,数据使用量不一定是满的,这就是为什么我问是否有方法显示数据和日志的真实使用情况,即使在同一设备中也是如此。
这是我正在使用的查询:
select
ceiling(sum(case when u.segmap != 4 then u.size/1048576.*@@maxpagesize end )),
ceiling(sum(case when u.segmap != 4 then size - curunreservedpgs(u.dbid, u.lstart, u.unreservedpgs) end)/1048576.*@@maxpagesize),
ceiling(sum(case when u.segmap = 4 then u.size/1048576.*@@maxpagesize end)),
ceiling(sum(case when u.segmap = 4 then u.size/1048576.*@@maxpagesize end) - lct_admin('logsegment_freepages',d.dbid)/1048576.*@@maxpagesize)
from master..sysdatabases d, master..sysusages u
where u.dbid = d.dbid and d.status != 256 and u.dbid = db_id('DBNAME') group by d.dbid
在sp_spaceused的源代码中,我找到了混合数据和日志的部分。
/*
** For a mixed log and data database, we cannot
** deduce the log used space from the total space
** as it is mixed with data. So we take the expensive
** way by scanning syslogs.
*/
select @total_pages = sum(u.size)
from master.dbo.sysusages u
where u.segmap & 4 = 4
and u.dbid = db_id()
select @used_pages = lct_admin("num_logpages", db_id())
/* Account allocation pages as used pages */
select @used_pages = @used_pages + (@total_pages / 256)
在我们得到结果后,我们需要将页面转换为KB或MB,因此我们必须查询页面大小:
select @@maxpagesize
在我的例子中是2048(2K页(,对应于Sybase信息中心中512的值,所以我们只需要除以@used_pages/512的结果,就可以得到以MB为单位的空间。