婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > SQL Server獲取磁盤空間使用情況

SQL Server獲取磁盤空間使用情況

熱門標簽:武漢長沙外呼系統方法和技巧 智能語音外呼系統選哪家 百度地圖標注不同路線 優質地圖標注 外呼系統電銷專用 千呼電銷機器人價格 奧威地圖標注多個地方 怎樣在地圖上標注路線圖標 京華物流公司地圖標注

對于DBA來說,監控磁盤使用情況是必要的工作,然后沒有比較簡單的方法能獲取到磁盤空間使用率信息,下面總結下這些年攢下的腳本:

最常用的查看磁盤剩余空間,這個屬于DBA入門必記的東西:

-- 查看磁盤可用空間
EXEC master.dbo.xp_fixeddrives

xp_fixeddrives方式有點是系統自帶,可直接使用,缺點是不能查看磁盤總大小和不能查看SQL Server未使用到的磁盤信息

使用sys.dm_os_volume_stats函數

--======================================================================
--查看數據庫文件使用的磁盤空間使用情況
WITH T1 AS (
SELECT DISTINCT
REPLACE(vs.volume_mount_point,':\','') AS Drive_Name ,
CAST(vs.total_bytes / 1024.0 / 1024 / 1024 AS NUMERIC(18,2)) AS Total_Space_GB ,
CAST(vs.available_bytes / 1024.0 / 1024 / 1024 AS NUMERIC(18,2)) AS Free_Space_GB
FROM  sys.master_files AS f
CROSS APPLY sys.dm_os_volume_stats(f.database_id, f.file_id) AS vs
)
SELECT
Drive_Name,
Total_Space_GB,
Total_Space_GB-Free_Space_GB AS Used_Space_GB,
Free_Space_GB,
CAST(Free_Space_GB*100/Total_Space_GB AS NUMERIC(18,2)) AS Free_Space_Percent
FROM T1

查詢效果:

sys.dm_os_volume_stats函數很好用,能直接查詢到總空間和空閑空間,可惜只支持SQL Server 2008 R2 SP1即更高版本,另外無法查到數據庫文件未使用到的磁盤

為兼容低版本,可采用xp_fixeddrives+xp_cmdshell方式來獲取,我寫了幾個存儲過程來獲取磁盤信息:

USE [monitor]
GO

/****** Object: StoredProcedure [dbo].[usp_get_disk_free_size]  Script Date: 2016/5/25 18:21:11 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

-- =============================================
-- Author:    GGA
-- Create date:  2016-2-1
-- Description:  收集磁盤剩余空間信息
-- =============================================
CREATE PROCEDURE [dbo].[usp_get_disk_free_size]
AS
BEGIN
  SET NOCOUNT ON;
  SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

--==========================================
--創建相關表

IF OBJECT_ID('server_disk_usage') IS NULL
BEGIN
  CREATE TABLE [dbo].[server_disk_usage](
    [disk_num] [nvarchar](10) NOT NULL,
    [total_size_mb] [bigint] NOT NULL CONSTRAINT [DF_server_disk_usage_total_size_mb] DEFAULT ((0)),
    [free_siez_mb] [bigint] NOT NULL CONSTRAINT [DF_server_disk_usage_free_siez_mb] DEFAULT ((0)),
    [disk_info] [nvarchar](400) NOT NULL CONSTRAINT [DF_server_disk_usage_disk_info] DEFAULT (''),
    [check_time] [datetime] NOT NULL CONSTRAINT [DF_server_disk_usage_check_time] DEFAULT (getdate()),
     CONSTRAINT [PK_server_disk_usage] PRIMARY KEY CLUSTERED 
    (
      [disk_num] ASC
    )
  ) ON [PRIMARY]
END

--==========================================
--查看所有數據庫使用到的磁盤剩余空間
DECLARE @disk TABLE(
    [disk_num] VARCHAR(50),
    [free_siez_mb] INT)
INSERT INTO @disk
EXEC xp_fixeddrives

--更新當前磁盤的剩余空間信息
UPDATE M
SET M.[free_siez_mb]=D.[free_siez_mb]
FROM [dbo].[server_disk_usage] AS M
INNER JOIN @disk AS D
ON M.[disk_num]=D.[disk_num]

--插入新增磁盤的剩余空間信息
INSERT INTO [dbo].[server_disk_usage]
(
  [disk_num],
  [free_siez_mb]
)
SELECT 
[disk_num],
[free_siez_mb]
FROM @disk AS D
WHERE NOT EXISTS(
  SELECT 1
  FROM [dbo].[server_disk_usage] AS M 
  WHERE M.[disk_num]=D.[disk_num] )

END

GO

/****** Object: StoredProcedure [dbo].[usp_get_disk_total_size]  Script Date: 2016/5/25 18:21:11 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

-- =============================================
-- Author:    GGA
-- Create date:  2016-2-1
-- Description:  收集磁盤總空間信息
-- =============================================
CREATE PROCEDURE [dbo].[usp_get_disk_total_size]
AS
BEGIN
  SET NOCOUNT ON;
  SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

IF NOT EXISTS(SELECT * FROM [dbo].[server_disk_usage]
    WHERE [total_size_mb] = 0)
BEGIN
  RETURN;
END

--==========================================
--開啟CMDShell
EXEC sp_configure 'show advanced options',1;

RECONFIGURE WITH OVERRIDE;

EXEC sp_configure 'xp_cmdshell',1;

RECONFIGURE WITH OVERRIDE

--========================================
--創建臨時表用來存放每個盤符的數據
CREATE TABLE #tempDisks
(
  ID INT IDENTITY(1,1),
  DiskSpace NVARCHAR(200)
)
--============================================
--將需要檢查的磁盤放入臨時表#checkDisks
SELECT 
ROW_NUMBER()OVER(ORDER BY [disk_num]) AS RID,
[disk_num]
INTO #checkDisks
FROM [dbo].[server_disk_usage] 
WHERE [total_size_mb] = 0;

--============================================
--循環臨時表#checkDisks檢查每個磁盤的總量

DECLARE @disk_num NVARCHAR(20)
DECLARE @total_size_mb INT
DECLARE @sql NVARCHAR(200)
DECLARE @max INT
DECLARE @min INT
SELECT @max=MAX(RID),@min=MIN(RID) FROM #checkDisks

WHILE(@min=@max)
BEGIN
SELECT @disk_num=[disk_num] 
FROM #checkDisks WHERE RID=@min

SET @sql = N'EXEC sys.xp_cmdshell ''fsutil volume diskfree '+@disk_num+':'+''''
PRINT @sql

INSERT INTO #tempDisks
EXEC sys.sp_executesql @sql

SELECT @total_size_mb=CAST((RIGHT(DiskSpace,LEN(DiskSpace)
  -CHARINDEX(': ',DiskSpace)-1)) AS BIGINT)/1024/1024
FROM #tempDisks WHERE id = 2

SELECT @total_size_mb,@disk_num

UPDATE [dbo].[server_disk_usage]
SET [total_size_mb]=@total_size_mb
WHERE [disk_num]=@disk_num

--SELECT * FROM #tempDisks

TRUNCATE TABLE #tempDisks

SET @min=@min+1

END

--==========================================
--CMDShell

EXEC sp_configure 'xp_cmdshell',0;

EXEC sp_configure 'show advanced options',1;

RECONFIGURE WITH OVERRIDE;

END

GO

/****** Object: StoredProcedure [dbo].[usp_get_disk_usage]  Script Date: 2016/5/25 18:21:11 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

-- =============================================
-- Author:    GGA
-- Create date:  2016-2-1
-- Description:  收集磁盤總空間信息
-- =============================================
CREATE PROCEDURE [dbo].[usp_get_disk_usage]
AS
BEGIN
  SET NOCOUNT ON;
  SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

  EXEC [dbo].[usp_get_disk_free_size]
  EXEC [dbo].[usp_get_disk_total_size]

  SELECT 
  [disk_num] AS Drive_Name
  ,CAST([total_size_mb]/1024.0 AS NUMERIC(18,2)) AS Total_Space_GB
  ,CAST(([total_size_mb]-[free_siez_mb])/1024.0 AS NUMERIC(18,2)) AS Used_Space_GB
  ,CAST([free_siez_mb]/1024.0 AS NUMERIC(18,2)) AS Free_Space_GB
  ,CAST([free_siez_mb]*100/[total_size_mb] AS NUMERIC(18,2)) AS Free_Space_Percent
  ,[disk_info]
  ,[check_time]
  FROM [monitor].[dbo].[server_disk_usage]
END
GO
--==================================
--查看磁盤空間使用
EXEC [dbo].[usp_get_disk_usage]

效果顯示:

只有第一次收集磁盤信息或第一次收集新磁盤信息時,才會調用xp_cmdshell來獲取磁盤的總大小,盡量減少xp_cmdshell開啟帶來的風險,可配合SQL Server Agent Job來使用,定期調用存儲過程刷新磁盤信息,監控程序直接訪問數據表來或許最后一次刷新時的磁盤信息。

此方式有一缺點是開啟xp_cmdshell后獲取磁盤總大小期間,其他進程可能關閉xp_cmdshell,造成存儲過程執行失敗,雖然發生概率較低,但畢竟存在。

如果想跳過存儲過程+SQL Server Agent Job方式,直接通過程序來調用xp_cmdshell,當程序使用“RECONFIGURE WITH OVERRIDE”來配置時,會報如下錯誤:

CONFIG statement cannot be used inside a user transaction.DB-Lib error message 574

錯誤類似于我們在SSMS中使用事務包裹sp_configure語句,如:

BEGIN TRAN
EXEC sp_configure 'show advanced options',1;
RECONFIGURE WITH OVERRIDE;
EXEC sp_configure 'xp_cmdshell',1;
RECONFIGURE WITH OVERRIDE;
COMMIT

錯誤消息為:

配置選項 'show advanced options' 已從 0 更改為 1。請運行 RECONFIGURE 語句進行安裝。
消息 574,級別 16,狀態 0,第 3 行
在用戶事務內不能使用 CONFIG 語句。
配置選項 'xp_cmdshell' 已從 0 更改為 1。請運行 RECONFIGURE 語句進行安裝。
消息 574,級別 16,狀態 0,第 5 行
在用戶事務內不能使用 CONFIG 語句。

難道不能通過程序調用RECONFIGURE WITH OVERRIDE語句?

當然不是,google下相關錯誤,僅發現下面一個相關,有興趣的可以參考下:

https://www.sqlservercentral.com/Forums/Topic1349778-146-1.aspx

粗略看了下,使用存儲過程套存儲過程的方式來繞過報錯,本人沒有具體測試,感覺太繁瑣,于是采用簡單粗暴的方式,既然報“在用戶事務內不能使用 CONFIG 語句”,哪我是否可以先COMMIT下干掉“用戶事務”呢?

基于此思路,最終測試獲得下面方式:

DECLARE @sql VARCHAR(2000)
SET @sql ='
COMMIT;
EXEC sp_configure ''show advanced options'',1;
RECONFIGURE WITH OVERRIDE;
EXEC sp_configure ''xp_cmdshell'',1;
RECONFIGURE WITH OVERRIDE;
'
EXEC(@sql)

仔細的朋友發現我先執行了COMMIT, 您沒看錯,這樣的打開方式雖然怪異但的確是一種打開方式,在SSMS中執行結果為:

消息 3902,級別 16,狀態 1,第 2 行
COMMIT TRANSACTION 請求沒有對應的 BEGIN TRANSACTION。
配置選項 'show advanced options' 已從 1 更改為 1。請運行 RECONFIGURE 語句進行安裝。
配置選項 'xp_cmdshell' 已從 1 更改為 1。請運行 RECONFIGURE 語句進行安裝。

雖然報錯,但是的但是,xp_cmdshell的值已經被設置為1,即腳本執行生效啦!

將此代碼移植到代碼中,然后通過TRY CATCH將異常捕獲并丟棄,你就可以愉快地調用xp_cmdshell啦。

使用xp_cmdshell開了頭,當然相關信息也可以使用類似方式來獲取啦!

比如獲取磁盤的扇區信息:

--====================================
--使用xp_cmdshell來執行CMD命令
--獲取磁盤扇區信息
EXEC sp_configure 'show advanced options',1 
GO
RECONFIGURE
GO
sp_configure 'xp_cmdshell',1 
GO
RECONFIGURE
GO
EXEC xp_cmdshell 'fsutil fsinfo ntfsinfo D: | find "每個"';
GO
sp_configure 'xp_cmdshell',0 
GO
RECONFIGURE
GO
sp_configure 'show advanced options', 0 
GO
RECONFIGURE
GO

運行效果為:

當然你可以使用fsutil fsinfo ntfsinfo D:來獲取完整信息,但是更值得您關注的就是上面這幾行。

感言:

當了這么多年的SQL Server DBA,現在找份像樣的SQL SERVER DBA的工作真不容易,一方面是當前市場趨勢導致,另一方面也是咱DBA自己“作死”造成的,看到很多同行包括我自己都還處在“刀耕火種”時代,有問題就在界面上點來點去,給外界一種“SQL Server很容易運維”的假象,而再看看MySQL DBA,只要你能假裝“研究下源碼”,立馬給人一種“很牛逼”的趕腳,于是乎年薪三五十萬不再是夢想!

以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!

您可能感興趣的文章:
  • SqlServer如何通過SQL語句獲取處理器(CPU)、內存(Memory)、磁盤(Disk)以及操作系統相關信息
  • ubuntu下磁盤空間不足導致mysql無法啟動的解決方法
  • Mysql存儲引擎MyISAM的常見問題(表損壞、無法訪問、磁盤空間不足)
  • lnmp下如何關閉Mysql日志保護磁盤空間
  • 幾個縮減MySQL以節省磁盤空間的建議
  • Mysql InnoDB刪除數據后釋放磁盤空間的方法
  • MySQL中查詢所有數據庫占用磁盤空間大小和單個庫中所有表的大小的sql語句
  • mssql 監控磁盤空間告警實現方法

標簽:防疫戰設 威海 銅仁 來賓 七臺河 益陽 天水 宿州

巨人網絡通訊聲明:本文標題《SQL Server獲取磁盤空間使用情況》,本文關鍵詞  SQL,Server,獲取,磁盤,空間,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《SQL Server獲取磁盤空間使用情況》相關的同類信息!
  • 本頁收集關于SQL Server獲取磁盤空間使用情況的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    亚洲国产日韩a在线播放| 91蜜桃视频在线| 日韩va亚洲va欧美va久久| ...中文天堂在线一区| 国产精品动漫网站| 成人欧美一区二区三区小说| 国产精品欧美一区二区三区| 国产精品免费视频一区| 国产精品久久久久影院亚瑟| 国产精品私房写真福利视频| 亚洲欧美日韩中文播放 | 制服.丝袜.亚洲.中文.综合| 欧美中文字幕不卡| 欧美性猛交xxxx乱大交退制版 | 3atv一区二区三区| 欧美二区三区的天堂| 91精品国产综合久久福利| 精品欧美一区二区久久| 国产欧美精品一区二区三区四区| 日本一区二区三区四区在线视频 | 欧美日韩国产免费一区二区| 欧美日韩国产中文| 精品久久久三级丝袜| 国产精品色呦呦| 亚洲在线成人精品| 精品中文字幕一区二区| 波多野结衣中文一区| 欧美午夜不卡视频| 久久伊人蜜桃av一区二区| 18成人在线观看| 久久av中文字幕片| 一本色道**综合亚洲精品蜜桃冫| 欧美一区二区日韩| 日韩毛片高清在线播放| 日韩有码一区二区三区| 成人午夜在线免费| 欧美精品久久天天躁| 日本一区二区视频在线| 丝袜美腿亚洲一区| 国产成a人亚洲| 精品视频一区二区三区免费| 国产校园另类小说区| 亚洲国产你懂的| 国产suv精品一区二区6| 6080国产精品一区二区| 日韩美女视频一区二区| 狠狠色2019综合网| 欧美三级视频在线观看| 18涩涩午夜精品.www| 精品午夜久久福利影院| 91婷婷韩国欧美一区二区| 精品国精品国产| 婷婷综合五月天| 91麻豆产精品久久久久久 | 色综合天天综合网天天狠天天| 欧美一级xxx| 亚洲成人午夜电影| 99精品视频在线观看免费| 精品久久久久久亚洲综合网| 亚洲二区在线视频| 91国模大尺度私拍在线视频| 日本一区二区三区国色天香 | 欧美成人福利视频| 亚洲成在线观看| 99久久精品一区| 日韩黄色免费电影| 色噜噜狠狠一区二区三区果冻| 中文字幕不卡在线观看| 老司机午夜精品99久久| 日韩精品一区在线| 裸体一区二区三区| 欧美成人精品3d动漫h| 六月丁香婷婷色狠狠久久| 日韩欧美在线影院| 麻豆精品在线看| 欧美精品一区二区久久久| 另类人妖一区二区av| 精品成人a区在线观看| 国产一区二区三区香蕉 | 国产一区二区成人久久免费影院| 91精品国产乱码久久蜜臀| 天堂va蜜桃一区二区三区漫画版| 欧美高清性hdvideosex| 日韩av网站在线观看| 欧美一区二区女人| 精品一区二区成人精品| 亚洲精品在线网站| 懂色av中文字幕一区二区三区| 国产精品视频观看| 欧美在线|欧美| 麻豆91免费观看| 国产精品理伦片| 欧美性大战久久久| 麻豆免费精品视频| 国产精品美女久久久久高潮 | 亚洲不卡在线观看| 日韩免费一区二区| 不卡在线视频中文字幕| 亚洲黄色免费电影| 精品美女被调教视频大全网站| 国产精品性做久久久久久| 综合久久国产九一剧情麻豆| 精品视频全国免费看| 精品亚洲国产成人av制服丝袜| 亚洲国产高清在线观看视频| 日本韩国欧美在线| 久久不见久久见免费视频1| 日韩一区在线免费观看| 日韩视频免费观看高清完整版 | 国产欧美一区二区三区沐欲| 欧美专区在线观看一区| 国产一区二区福利视频| 香蕉加勒比综合久久| 国产精品欧美精品| 日韩欧美中文一区二区| 在线观看国产日韩| 国产+成+人+亚洲欧洲自线| 午夜精品爽啪视频| ㊣最新国产の精品bt伙计久久| 91精品国产美女浴室洗澡无遮挡| 91色porny蝌蚪| 精品无人码麻豆乱码1区2区| 亚洲精品视频一区二区| 国产午夜精品一区二区三区四区| 欧美日本一道本在线视频| 成人av网址在线观看| 久久超碰97中文字幕| 亚洲国产精品一区二区尤物区| 国产视频一区二区三区在线观看| 欧美日韩精品欧美日韩精品| av亚洲精华国产精华精| 国产一区美女在线| 免费成人在线播放| 亚洲1区2区3区4区| 亚洲制服丝袜在线| 亚洲老妇xxxxxx| 国产精品久线在线观看| 国产亚洲综合av| 久久色在线视频| 久久久久久免费网| 日韩精品一区二区三区视频播放 | 久久精品国产精品亚洲精品| 亚洲制服丝袜av| 一区二区三区四区视频精品免费| 国产蜜臀av在线一区二区三区| 久久亚洲一区二区三区明星换脸| 日韩欧美国产一区二区三区| 91精品国产91久久久久久一区二区 | 成人免费视频app| 国产成人av网站| 国产馆精品极品| 国产69精品久久久久777| 成人免费毛片嘿嘿连载视频| 成人av在线一区二区| 成人黄色一级视频| 91麻豆成人久久精品二区三区| 色偷偷久久人人79超碰人人澡| 一本高清dvd不卡在线观看| 91日韩在线专区| 欧美视频在线播放| 日韩一区二区三区精品视频| 日韩欧美亚洲另类制服综合在线 | 暴力调教一区二区三区| 91在线视频观看| 欧美日韩高清在线播放| 精品日韩一区二区三区| 国产午夜精品一区二区三区四区| 国产精品国产自产拍高清av| 亚洲精品你懂的| 视频在线观看91| 国产精品一区二区不卡| 91在线云播放| 精品视频在线免费看| 欧美成人高清电影在线| 中文字幕一区二区在线播放| 亚洲电影一级片| 国产一区二区三区免费在线观看 | 奇米影视一区二区三区小说| 国产一本一道久久香蕉| 欧洲另类一二三四区| 精品国产成人在线影院| 亚洲婷婷综合久久一本伊一区| 午夜电影网一区| 成人一区在线观看| 这里只有精品99re| 国产精品免费久久久久| 日本欧美肥老太交大片| 成人开心网精品视频| 91精品国产综合久久精品app| 国产欧美视频一区二区| 天天操天天色综合| eeuss鲁片一区二区三区| 日韩午夜三级在线| 一区二区高清免费观看影视大全| 久久国产欧美日韩精品| 91黄视频在线观看| 国产女人水真多18毛片18精品视频| 午夜影视日本亚洲欧洲精品| 风间由美一区二区三区在线观看| 在线成人av网站|