Sybase:如何直接查询段的空间使用情况

问:使用sp_helpsegment可以看到段的空间使用情况,但是显示结果中还有段上的所有表和索引信息,对于一个建有很多表的段来说,这是很恐怖的。想直接看到所关心的段的空间使用情况,请高手指点一下?

答:

/*Author Hobbylu*/
/*Reference from sybase procedures*/
/*2005-07-01*/
create procedure sp_helpsegment_me
@segname varchar(30) = NULL /* segment name */
as
declare @segbit     int,  /* this is the bit version of the segment # */
@segment    int,  /* the segment number of the segment */
@free_pages   int,  /* unused pages in segment */
@factor     float, /* conversion factor to convert to MB */
@clr_pages int, /* Space reserved for CLRs */
@total_pages int, /* total allocatable log space */
@used_pages int, /* allocated log space */
@ismixedlog int /* mixed log & data database ? */ 
if @@trancount = 0
begin
set chained off
end
set transaction isolation level 1
set nocount on
/*
** If no segment name given, get 'em all.
*/
if @segname is null
begin
--Adaptive Server has expanded all '*' elements in the following statement
select syssegments.segment, syssegments.name, syssegments.status
from syssegments order by segment
return (0)
end
/*
** Make sure the segment exists
*/
if not exists (select *
from syssegments
where name = @segname)
begin
/* 17520, "There is no such segment as '%1!'." */
raiserror 17520, @segname
return (1)
end
/*
** Show the syssegment entry, then the fragments and size it is on,
** then any dependent objects in the database.
*/
--Adaptive Server has expanded all '*' elements in the following statement
select syssegments.segment, syssegments.name, syssegments.status
from syssegments
where name = @segname
/*
** Set the bit position for the segment.
*/
select @segment = segment
from syssegments
where name = @segname
/*
** Now set the segments on @devname sysusages.
*/
if (@segment < 31)
select @segbit = power(2, @segment)
else
/*
** Since this is segment 31, power(2, 31) will overflow
** since segmap is an int. We'll grab the machine-dependent
** bit mask from spt_values to set the right bit.
*/
select @segbit = low
from master.dbo.spt_values
where type = "E"
and number = 2
/*
** Get factor for conversion of pages to megabytes from spt_values
*/
select @factor = convert(float, low) / 1048576.0
    from master.dbo.spt_values
    where number = 1 and type = "E"
select @total_pages = sum(u.size)
from master.dbo.sysusages u
where u.segmap & @segbit = @segbit
and u.dbid = db_id()
select @ismixedlog = status2 & 32768
from master.dbo.sysdatabases where dbid = db_id()
/*
** Select the sizes of the segments
*/
if (@segbit = 4)
begin
  select device = d.name,
size = convert(varchar(20), round((sum(u.size) * @factor), 0)) + "MB"
from master.dbo.sysusages u, master.dbo.sysdevices d
  where u.segmap & @segbit = @segbit
and u.dbid = db_id()
and d.status & 2 = 2
and u.vstart between d.low and d.high
  group by d.name order by d.name
  select @clr_pages = lct_admin("reserved_for_rollbacks", db_id())
  select @free_pages = lct_admin("logsegment_freepages", db_id())
- @clr_pages
  select free_pages = @free_pages
  if(@ismixedlog = 32768)
  begin
/*
** 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 @used_pages = lct_admin("num_logpages", db_id())
/* Account allocation pages as used pages */
select @used_pages = @used_pages + (@total_pages / 256)
  end
  else
  begin
/* Dedicated log database */
select @used_pages = @total_pages - @free_pages
 - @clr_pages
  end
end
else
begin
  select device = d.name,
size = convert(varchar(20), round((sum(u.size) * @factor), 0)) + "MB",
free_pages = sum(curunreservedpgs(db_id(), u.lstart, u.unreservedpgs))
from master.dbo.sysusages u, master.dbo.sysdevices d
      where u.segmap & @segbit = @segbit
and u.dbid = db_id()
and d.status & 2 = 2
and u.vstart between d.low and d.high
  group by d.name order by d.name
  select @free_pages = sum(curunreservedpgs(db_id(), u.lstart, u.unreservedpgs))
from master.dbo.sysusages u
  where u.segmap & @segbit = @segbit
and u.dbid = db_id()
  select @used_pages = @total_pages - @free_pages
  select @clr_pages = 0
end
/*
** Select the dependent objects
*/
/*
** Print total_size, total_pages, free_pages, used_pages and reserved_pages
*/
select total_size = convert(varchar(15),
round(@total_pages * @factor, 0)) + "MB",
total_pages = convert(char(15), @total_pages),
free_pages = convert(char(15), @free_pages),
used_pages = convert(char(15), @used_pages),
reserved_pages = convert(char(15), @clr_pages)
return (0)

时间: 2024-11-02 05:14:05

Sybase:如何直接查询段的空间使用情况的相关文章

Sybase ASA中查询元信息的几个常用SQL函数

Sybase ASA中查询元信息的几个常用SQL函数: sp_column_privileges Unsupported sp_columns table-name [, table-owner ] [, table-qualifier] [, column-name] 返回指定列的数据类型 sp_databases Unsupported sp_datatype_info Unsupported sp_fkeys pktable_name [, pktable-owner][, pktable

SQL查询服务器硬盘剩余空间_MsSql

关键代码如下所示: DECLARE @tb1 Table ( drive varchar(20), [MB 可用空间] varchar(20) ) INSERT INTO @tb1 Exec master.dbo.xp_fixeddrives select drive , CAST( CAST((CAST([MB 可用空间] as decimal(9,2))/1024 ) as decimal(9,2)) as varchar)+'G' as 剩余空间 from @tb1 以上所述是SQL查询服

SQL查询服务器硬盘剩余空间

关键代码如下所示: DECLARE @tb1 Table ( drive varchar(20), [MB 可用空间] varchar(20) ) INSERT INTO @tb1 Exec master.dbo.xp_fixeddrives select drive , CAST( CAST((CAST([MB 可用空间] as decimal(9,2))/1024 ) as decimal(9,2)) as varchar)+'G' as 剩余空间 from @tb1 以上所述是SQL查询服

Shell脚本实现监控swap空间使用情况和查看占用swap的进程_linux shell

复制代码 代码如下: #!/bin/bash   echo -e `date +%y%m%d%H%M` echo -e "PID\t\tSwap\t\tProc_Name"   # 拿出/proc目录下所有以数字为名的目录(进程名是数字才是进程,其他如sys,net等存放的是其他信息) for pid in `ls -l /proc | grep ^d | awk '{ print $9 }'| grep -v [^0-9]` do     # 让进程释放swap的方法只有一个:就是重

SQL Server--获取磁盘空间使用情况

原文:SQL Server--获取磁盘空间使用情况 对于DBA来说,监控磁盘使用情况是必要的工作,然后没有比较简单的方法能获取到磁盘空间使用率信息,下面总结下这些年攒下的脚本: 最常用的查看磁盘剩余空间,这个属于DBA入门必记的东西: -- 查看磁盘可用空间 EXEC master.dbo.xp_fixeddrives xp_fixeddrives方式有点是系统自带,可直接使用,缺点是不能查看磁盘总大小和不能查看SQL Server未使用到的磁盘信息 ======================

[20150312]了解表空间使用情况.txt

[20150312]了解表空间使用情况.txt --11g,想了解表空间使用情况: --首先查询 select * from sys.ts$ --获得ts#.   SELECT LAG (RTIME) OVER (ORDER BY snap_id) begin_time         ,a.*         ,  tablespace_usedsize          - LAG (tablespace_usedsize) OVER (ORDER BY snap_id)          

SQL Server获取磁盘空间使用情况

对于DBA来说,监控磁盘使用情况是必要的工作,然后没有比较简单的方法能获取到磁盘空间使用率信息,下面总结下这些年攒下的脚本: 最常用的查看磁盘剩余空间,这个属于DBA入门必记的东西: -- 查看磁盘可用空间 EXEC master.dbo.xp_fixeddrives xp_fixeddrives方式有点是系统自带,可直接使用,缺点是不能查看磁盘总大小和不能查看SQL Server未使用到的磁盘信息 使用sys.dm_os_volume_stats函数 --===================

Linux中如何查询端口被占用的情况

今天要使用python写一个端口探测的小程序,以检测一些特定的服务端口有没有被占用,突然发现自己居然不知道在linux中如何查询端口被占用的情况,天呐,赶快学习一下. Linux如何查看端口 1.lsof -i:端口号 用于查看某一端口的占用情况,比如查看8000端口使用情况,lsof -i:8000 可以看到8000端口已经被轻量级文件系统转发服务lwfs占用 2.netstat -tunlp |grep 端口号,用于查看指定的端口号的进程情况,如查看8000端口的情况,netstat -tu

centos中df—查看文件系统的磁盘空间占用情况

名称df语法df [-options]参数    -a 显示所有文件系统的磁盘使用情况,包括0块(block)的文件系统,如/proc文件系统. -k 以k字节为单位显示. -i 显示i节点信息,而不是磁盘块. -t 显示各指定类型的文件系统的磁盘空间使用情况. -x 列出不是某一指定类型文件系统的磁盘空间使用情况(与t选项相反). -T 显示文件系统类型.使用实例列出各文件系统的磁盘空间使用情况 df 列出各文件系统的i节点使用情况 df -ia 列出文件系统的类型 df -T -h更具目前磁