0

有没有办法从 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
4

1 回答 1

0

搜索 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 infocenter 中的 512 的值,所以我们只需将@used_pa​​ges / 512的结果相除即可获得以 MB 为单位的空间。

于 2020-12-03T17:30:00.327 回答