查询数据和日志在同一设备中的 Sybase 数据库的日志段使用情况
Query log segment usage for a Sybase database where data and log are in same device
有没有办法从数据和日志段位于 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 infocenter中的512的值,所以我们只需要除以@used_pages / 512 得到 space 以 MB 为单位。
有没有办法从数据和日志段位于 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 infocenter中的512的值,所以我们只需要除以@used_pages / 512 得到 space 以 MB 为单位。