查询Sybase数据库的日志段使用情况,其中数据和日志位于同一设备中



如果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为单位的空间。

相关内容

  • 没有找到相关文章

最新更新