資料庫空間能撐多久 容量規劃

2021-07-28 19:39:10 字數 3258 閱讀 7678

絕大多數資料庫都在增長,而不是減小。作為dba必須準備好空間耗盡的對應策略。

那麼我們都需要監控哪些資訊,用以支援我們對應空間的使用狀況評估呢?

先建立一張儲存記錄的表

create table [dbo].[dbgrowthhistory] 

( [timecollected] [datetime] not null ,

[monitored_object] [nvarchar](100) not null ,

[dbname] [nvarchar](100) not null ,

[fgname] [nvarchar](100) not null ,

[filelogicalname] [nvarchar](100) not null ,

[totalmb] [float] not null ,

[freemb] [float] not null ,

[growthsremaining] [int] not null ,

[dbgrowthhistory_id] [bigint] identity(1, 1)

not null ,

constraint [pk_dbgrowthhistory] primary key clustered

( [dbgrowthhistory_id] asc )

) on [primary];

用下面的語句,定時將採集資訊(請在要監控的資料庫中執行,如何從每個資料庫執行,請參考sp_msforeachdb)加入到表中

select  convert(datetime, convert(date, getdate())) as [timecollected] , 

@@servername as [monitored_object] ,

db_name() as [dbname] ,

b.groupname as [fgname] ,

name as [filelogicalname] ,

[filename] as [osfilename] ,

convert (decimal(15, 2), round(a.size / 128.000, 2)) as [totalmb] ,

convert (decimal(15, 2), round(( a.size - fileproperty(a.name,

'spaceused') )

/ 128.000, 2)) as [freemb]

from dbo.sysfiles a ( nolock )

join sysfilegroups b ( nolock ) on a.groupid = b.groupid

order by b.groupname;

用上面的**可以獲取,當前資料庫的情況.接下來還需要查詢可用的增長量資訊. 

sp_configure 'xp_cmdshell', 1 

goreconfigure

godeclare @svrname varchar(255)

declare @sql varchar(400)

--獲取伺服器名稱

set @svrname = @@servername

set @sql = 'powershell.exe -c "get-wmiobject -computername '

+ quotename(@svrname, '''')

+ ' -class win32_volume -filter ''drivetype = 3'' | select name,capacity,freespace | foreach"'

--建立臨時表

create table #output ( line varchar(255) )

--插入資訊

insert #output

exec xp_cmdshell @sql

--擷取powershell提供的資訊

select @svrname as [servername] ,

convert(datetime, convert(date, getdate())) as timecollected ,

rtrim(ltrim(substring(line, 1, charindex('|', line) - 1))) as drivename ,

round(cast(rtrim(ltrim(substring(line, charindex('|', line) + 1,

( charindex('%', line) - 1 )

- charindex('|', line)))) as float),

0) as 'capacity(mb)' ,

round(cast(rtrim(ltrim(substring(line, charindex('%', line) + 1,

( charindex('*', line) - 1 )

- charindex('%', line)))) as float),

0) as 'freespace(mb)'

from #output

where line like '[a-z][:]%'

order by drivename

--drop table #output

--go

--sp_configure 'xp_cmdshell',0

--go

--reconfigure

--go

用此**將獲取,伺服器的名稱, 建立日期, 驅動器名,以及總的大小(mb),剩餘的可用空間大小(mb).

這個地方有乙個小hint在裡面, 還記得  xp_fixeddrives嗎? 用這個儲存過程不是也能獲取磁碟空間資訊嗎?

注意:xp_fixeddrives  不能獲取掛載點(mount point ) 的資訊; powershell卻可以.

最後就是計算了:

剩餘天數 = 檔案中的可用空間 + (增長量 * 增長數) / 每日平均增長量

所有檔案的計算出來的最小剩餘天數,就是我們要監控的值了

ps:索引重建,歸檔/清除或底層應用程式中的非正常活動將會產生異常的檔案增長

mysql資料庫容量 檢視mysql資料庫容量大小

1.檢視所有資料庫各容量大小 select table schema as 資料庫 sum table rows as 記錄數 sum truncate data length 1024 1024,2 as 資料容量 mb sum truncate index length 1024 1024,2 ...

資料庫 oracle資料庫建立表空間

上學的時候就裝過兩次oracle資料庫,但是一直沒有學會使用,缺少的是建立使用者表空間。臨時表空間 資料表空間 給使用者授權 sid 表空間 使用者 表 oracle11g伺服器安裝詳細步驟 教程 源文件 1 sqlplus登入 as sysdba2 建立臨時表空間 createtemporary ...

資料庫大容量欄位的插入

從系統檔案中讀取資料的任務可以有帶bulk的openrowset函式來完成 openrowset bulk 檔案路徑 single blob single clob single cblob use test if object id file table is not null drop tabl...