понедельник, 27 августа 2012 г.

Место есть?

Все знают как узнать сколько есть свободного места на ваших HDD. Но как узнать сколько свободного места в ваших файловых группах? Забиты они или же напротив лишь занимают место, а внутри очень мало данных? Ниже приведен скрипт для определения размера файлов, используемого и свободного объема в них, а так же размера, до которого будут расширяться файлы, когда места станет недостаточно.

select db_name(sa.dbid) as DBname 
 , sa.name as LogicalName
 , case sa.groupid
  WHEN 0 then 'LOG'
  ELSE sfg.groupname
   end as Filegroup
 , sa.filename as Filename
 , cast(sf.size*8/1024. as numeric(19,3))as sizeMB
 , cast(sf.spaceused*8/1024. as numeric(19,3)) as spaceusedMB
 , cast((sf.size-sf.spaceused)*8/1024. as numeric(19,3)) as freespaceMB
 , case sf.maxsize
  when -1 then 'Unlimited'
  else cast(cast(sf.maxsize*8/1024.  as numeric(19,3))as varchar(22))
   end as maxsizeMB
 , cast(sf.growth*8/1024. as numeric(19,3)) as nextgrowthMB
from master..sysaltfiles sa 
left join (
 select   cast(size as bigint) as size
   ,fileid
   ,groupid
   ,cast(fileproperty(name,'SpaceUsed')as bigint) as spaceused 
   ,cast(maxsize as bigint) as maxsize
   ,cast(case 
    when status & 0x100000 = 0 then growth
    else size*growth/100
    end as bigint) as growth
 from sysfiles
 ) sf on sf.fileid=sa.fileid 
  and sf.groupid = sa.groupid
left outer join sysfilegroups sfg on sfg.groupid = sf.groupid
where sa.dbid = db_id()
order by case when sa.groupid = 0 then 1 else 0 end, sa.groupid, sa.fileid

Владение этими данными очень важно для планирования и понимания внутренних процессов сервера. Ниже приведен пример возвращаемых данных. Видно, что в данном случае реальных данных в файлах очень мало.

1 комментарий:

  1. Этот комментарий был удален администратором блога.

    ОтветитьУдалить