powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASE: tempdb. Space allocated
4 сообщений из 4, страница 1 из 1
ASE: tempdb. Space allocated
    #38717548
Mikle83
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Открыл для себя большое белое пятно в понимании системных таблиц Сайбеза.

Есть следующий скрипт для определения свободного места на базе (внутренние нужды):


Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
  
  Declare @PageSize integer Set @PageSize = @@maxpagesize/1024
  Declare @DBName varchar (100) set @DBName = 'DATABASE'
  select 
		'Convert(varchar(100), Convert(decimal(18,0),Sum(su.unreservedpgs)* @PageSize/1024.00)) + ' MB ' + '(used ' +
        Left(Convert (varchar(100), 100 - Convert(decimal(18,0),Sum(su.unreservedpgs) / Convert(decimal(18,0), Sum(su.size))* 100.00)),5) + '%)',
        Case when Sum(su.unreservedpgs) / Convert(decimal(18,0), Sum(su.size))* 100 < 10 then 1 else 0 end as IsBad
	from master..sysusages su
	  where su.dbid = db_id(@DBName)



Все замечательно работало, пока не появилась дурная мысль так же "смотреть" на темповую базу (tempDb).
Оказалось, скрипт - всегда выдает одно и тоже значение, не смотря на реальное используемое пространство в БД.

Может отрицательно сказывается понедельник, но не пойму где искать инфу по темповой базе?
...
Рейтинг: 0 / 0
ASE: tempdb. Space allocated
    #38717899
Mikle83
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ы. был лишний апостроф в скрипте


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
  Declare @PageSize integer Set @PageSize = @@maxpagesize/1024
  Declare @DBName varchar (100) set @DBName = 'tempdb'
  select 
		Convert(varchar(100), Convert(decimal(18,0),Sum(su.unreservedpgs)* @PageSize/1024.00)) + ' MB ' + '(used ' +
        Left(Convert (varchar(100), 100 - Convert(decimal(18,0),Sum(su.unreservedpgs) / Convert(decimal(18,0), Sum(su.size))* 100.00)),5) + '%)',
        Case when Sum(su.unreservedpgs) / Convert(decimal(18,0), Sum(su.size))* 100 < 10 then 1 else 0 end as IsBad
	from master..sysusages su
	  where su.dbid = db_id(@DBName)



Не могу понять откуда вытягивает инфу sp_helpdb
По юзерским базам все сходится, темп-же выдает странное...
...
Рейтинг: 0 / 0
ASE: tempdb. Space allocated
    #38717911
SQLMantis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
ASE: tempdb. Space allocated
    #38723747
Mikle83
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQLMantis,
Спасибо! Действительно процедура дала то, что нужно, переписал ее во вьюху - для моей задачи удобнее использовать.
Из минусов - пришлось захардкодить pagesize и несколько поизвращаться с округлениями, дабы вывести корректные значения в мегабайтах и не словить ексепшен. Из плюсов - по всем базам инфа в одной вьюхе.

Мож кому пригодиться:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
Create view dbo.vsa_db_SpaceAllocate
as
select    
    sa.dbid, db_name(sa.dbid) as dbname, sa.name as SegmentName,
    CONVERT(DECIMAL(38,0), Convert(decimal(38,0), sa.Total_Pages) * /*@@maxpagesize*/2048/1024/1024,0) as TotalMb, 
    CONVERT(DECIMAL(38,0), Convert(decimal(38,0), sa.Free_Pages) * /*@@maxpagesize*/2048/1024/1024) as FreeMb,
    CONVERT(DECIMAL(38,0), Convert(decimal(38,0),
        Case 
            when sa.segbit = 4 and sd.status2 & 32768 = 32768 then IsNull(lct_admin("num_logpages", sa.dbid),0) + sa.Total_Pages / 256
            when sa.segbit = 4 and sd.status2 & 32768 <> 32768 then sa.Total_Pages - sa.Free_Pages - lct_admin("reserved_for_rollbacks", sa.dbid)
            else sa.Total_Pages - sa.Free_Pages
        end) * /*@@maxpagesize*/2048/1024/1024) as UsedMb,
    CONVERT(DECIMAL(38,0), Convert(decimal(38,0),
        Case 
            when sa.segbit = 4 then lct_admin("reserved_for_rollbacks", sa.dbid)
            else 0
        end) * /*@@maxpagesize*/2048/1024/1024) as ReservedMb
from
(
    Select
      su.dbid, si.name, si.segbit, sum(IsNull(su.size,0)) as Total_Pages,
      case 
        when segbit = 4 then
            lct_admin("logsegment_freepages", su.dbid) - lct_admin("reserved_for_rollbacks", su.dbid)
        else sum(curunreservedpgs(su.dbid, su.lstart, su.unreservedpgs))
      end as Free_Pages
    from 
    (
      Select 
        ss.name, 
        Case 
          when ss.segment < 31 then power(2, ss.segment)
          else sv.low 
        end as segbit,
        convert(float, sv.low) / 1048576.0 as factor
      from syssegments ss, master.dbo.spt_values sv,master.dbo.spt_values svFactor
        where sv.type ='E' and sv.number = 2 and svFactor.type = 'E' and svFactor.number = 1 
    ) si
    join master.dbo.sysusages su on 1=1
    where su.segmap & si.segbit = si.segbit
	  --and su.dbid = db_id()
    group by su.dbid, si.name,si.segbit
) sa
  join master.dbo.sysdatabases sd on sd.dbid = sa.dbid


...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASE: tempdb. Space allocated
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]