数据库日常维护-CheckList_03有关数据库数据文件大小检查

日常数据维护中容量规划是每个DBA的基础工作之一,也是非常重要的工作。在生产环境中一些比较重要的业务数据库会用前期容量规划不足,或出现意外的爆发式的数据增长,直至盛满整个磁盘空间,系统会无法使用,最终业务受到影响。这时候,如果没有及时的磁盘预警的情况下会更糟糕,最终带来经济损失。那么,为了避免这种情况发生,我们可以做到提前预警,主动搜集相关数据文件的大小,例如数据库、数据文件、备份文件大小,以及主要业务数据表大小等,定期追踪并已报告形式给到存储团队,提醒容量的变化。详细的代码如下 :

1.检查数据库文件大小

SELECT  convert(varchar(10),getdate(),120) as ‘Date‘,d.name as ‘Database Name‘,sum(CONVERT(decimal(9,3),convert(float,l.size) * (8192.0/1024.0/1024.)/1024.))  as ‘Size(GB)‘

FROM sys.master_files  l

LEFT JOIN sys.databases d  ON  l.database_id=d.database_id

WHERE d.database_id>4--排除系统数据库

group by d.name

order by  ‘Size(GB)‘ desc

--或者...
---MDF+LDF
SELECT DISTINCT
--a.database_id,
a.name AS dbName,
a.compatibility_level,
CONVERT(VARCHAR(25), a.create_date, 106) AS dbCreateDate,
CONVERT(VARCHAR(25), CAST(CAST(SUM(b.size * 8.0 / 1024.0/1024.) AS NUMERIC(10,2)) AS money), 1) AS ‘Size(GB)‘,
DATABASEPROPERTYEX(a.name, ‘Recovery‘) AS recoveryMode,
DATABASEPROPERTYEX(a.name, ‘Status‘) AS databaseStatus,
CASE DATABASEPROPERTYEX(a.name, ‘IsAutoCreateStatistics‘) WHEN 1 THEN ‘TRUE‘ ELSE ‘FALSE‘ END AS autoCreateStatsEnabled,
CASE DATABASEPROPERTYEX(a.name, ‘IsAutoUpdateStatistics‘) WHEN 1 THEN ‘TRUE‘ ELSE ‘FALSE‘ END AS autoUpdateStatsEnabled,
DATABASEPROPERTYEX(a.name, ‘UserAccess‘) AS userAccess,
DATABASEPROPERTYEX(a.name, ‘Updateability‘) AS Updateability,
CASE DATABASEPROPERTYEX(a.name, ‘IsTornPageDetectionEnabled‘) WHEN 1 THEN ‘TRUE‘ ELSE ‘FALSE‘ END AS tornPageDetectionEnabled,
CASE DATABASEPROPERTYEX(a.name, ‘IsRecursiveTriggersEnabled‘) WHEN 1 THEN ‘TRUE‘ ELSE ‘FALSE‘ END AS recursiveTriggersEnabled,
CASE DATABASEPROPERTYEX(a.name, ‘IsInStandBy‘) WHEN 1 THEN ‘TRUE‘ ELSE ‘FALSE‘ END AS isDBStandBy
FROM
master.sys.databases a INNER JOIN master.sys.master_files b ON a.database_id = b.database_id

where a.database_id>4
GROUP BY
a.database_id,
a.name,
a.compatibility_level,
CONVERT(VARCHAR(25), a.create_date, 106)
ORDER BY 1

2.检查数据库备份文件大小  

SELECT   getdate()  as,

b.server_name, Round(SUM(convert(float,b.backup_size) /1024.0/1024.0/1024.0),2) AS ‘backup_size_GB‘,

Round(SUM(convert(float,b.compressed_backup_size)/1024.0/1024.0/1024.0),2) AS ‘compressed_backup_size_GB‘ FROM msdb..backupset b

where  b.database_name not in (‘model‘,‘master‘,‘msdb‘,‘‘)

--and b.type=‘D‘

AND backup_start_date>getdate()-1

GROUP BY b.server_name

3.检查表空间大小

SELECT OBJECT_NAME(id) tablename ,
CASE WHEN reserved * 8 > 1024 THEN RTRIM(8 * reserved / 1024) + ‘MB‘
ELSE RTRIM(reserved * 8) + ‘KB‘
END DataReserve ,
CASE WHEN dpages * 8 > 1024 THEN RTRIM(8 * dpages / 1024) + ‘MB‘
ELSE RTRIM(dpages * 8) + ‘KB‘
END Used ,
CASE WHEN 8 * ( reserved - dpages ) > 1024
THEN RTRIM(8 * ( reserved - dpages ) / 1024) + ‘MB‘
ELSE RTRIM(8 * ( reserved - dpages )) + ‘KB‘
END unused ,
CASE WHEN ( 8 * dpages / 1024 - rows / 1024 * minlen / 1024 ) > 1024
THEN RTRIM(( 8 * dpages / 1024 - rows / 1024 * minlen / 1024 )
/ 1024) + ‘MB‘
ELSE RTRIM(( 8 * dpages / 1024 - rows / 1024 * minlen / 1024 ))
+ ‘KB‘
END FREE ,
rows AS Rows_Count
FROM sys.sysindexes
WHERE indid = 1
AND status = 2066 -- status=‘18‘
ORDER BY reserved DESC

4.检查表索引大小

--特别提醒:此查询较慢,如果是生产环境请选择非业务时间执行

IF OBJECT_ID(‘tempdb..#Indexdata‘, ‘U‘) IS NOT NULL
DROP TABLE #Indexdata
DECLARE
@SizeofIndex BIGINT, @IndexID INT,
@NameOfIndex nvarchar(200),@TypeOfIndex nvarchar(50),
@ObjectID INT,@IsPrimaryKey INT,
@FGroup VARCHAR(20)

create table #Indexdata (name nvarchar(50),
IndexID int, IndexName nvarchar(200),
SizeOfIndex int, IndexType nvarchar(50),
IsPrimaryKey INT,FGroup VARCHAR(20))
DECLARE Indexloop CURSOR FOR
SELECT idx.object_id, idx.index_id, idx.name, idx.type_desc
,idx.is_primary_key,fg.name
FROM sys.indexes idx
join sys.objects so
on idx.object_id = so.object_id JOIN sys.filegroups fg
ON idx.data_space_id = fg.data_space_id
where idx.type_desc != ‘Heap‘
and so.type_desc not in (‘INTERNAL_TABLE‘,‘SYSTEM_TABLE‘)
AND idx.name in(

select
i.name

FROM sys.dm_db_index_usage_stats AS ius
JOIN sys.indexes AS i ON i.index_id = ius.index_id
AND i.object_id = ius.object_id
WHERE ius.database_id = DB_ID() --and i.name like ‘%ClusteredIndex%‘
--and OBJECT_NAME(i.object_id) like‘%DAILYSALES‘
AND i.is_disabled = 0
)

OPEN Indexloop
FETCH NEXT FROM Indexloop
INTO @ObjectID, @IndexID, @NameOfIndex,
@TypeOfIndex,@IsPrimaryKey,@FGroup
WHILE (@@FETCH_STATUS = 0)
BEGIN
SELECT @SizeofIndex = sum(avg_record_size_in_bytes * record_count)
FROM sys.dm_db_index_physical_stats(DB_ID(),@ObjectID,
@IndexID, NULL, ‘detailed‘)
insert into #Indexdata(name, IndexID, IndexName, SizeOfIndex,
IndexType,IsPrimaryKey,FGroup)
SELECT TableName = OBJECT_NAME(@ObjectID),
IndexID = @IndexID,
IndexName = @NameOfIndex,
SizeOfIndex = CONVERT(DECIMAL(16,1),(@SizeofIndex/(1024.0 * 1024))),
IndexType = @TypeOfIndex,
IsPrimaryKey = @IsPrimaryKey,
FGroup = @FGroup
FETCH NEXT FROM Indexloop
INTO @ObjectID, @IndexID, @NameOfIndex,
@TypeOfIndex,@IsPrimaryKey,@FGroup
END
CLOSE Indexloop
DEALLOCATE Indexloop
select name as TableName, IndexName, IndexType,
SizeOfIndex AS [Size of index(MB)],
case when IsPrimaryKey = 1 then ‘Yes‘ else ‘No‘ End as [IsPrimaryKey]
,FGroup AS [File Group]
from #Indexdata order by SizeOfIndex DESC

-----------------------------------------------------------------------------------------

SameZhao

时间: 2025-01-01 23:51:50

数据库日常维护-CheckList_03有关数据库数据文件大小检查的相关文章

数据库日常维护-CheckList_02有关数据库备份检查

--------------------------------------------------------------------------------- --前一周所有数据库备份情况 --------------------------------------------------------------------------------- SELECT CONVERT(CHAR(100), SERVERPROPERTY('Servername')) AS Server, msdb

数据库日常维护-CheckList_01历史Agent Job执行情况检查

检查Agent Job中日常维护作业或业务作业是否成功,如每天的备份.碎片整理.索引维护.历史备份文件清除等,可利用SSMS工具,通过CDC下面设置好的DB Server List,运行下面脚本一次,便可以查询完成所有JOB历史运行情况. --SQL -- 参数定义 DECLARE @PreviousDate datetime DECLARE @Year VARCHAR(4) DECLARE @Month VARCHAR(2) DECLARE @MonthPre VARCHAR(2) DECLA

数据库监控和日常维护项目

序号 设备类型 内容/参数 参数类型 备注 1 操作系统层次  系统日志 状态  检查日志的err或warning  进程数 性能参数  检查系统进程数是否相对稳定  系统CPU利用率 性能参数  参考值 Idle > 50%  系统内存利用率 性能参数  参考值 free > 10%  系统IO请求数/秒 性能参数  参考值 < 4000  系统IO请求量/稍 性能参数  参考值 < 100M  网络流量 性能参数  空间使用率 性能参数  参考值 free > 10% 2

数据库运行维护

1 .数据库运行维护基本工作①数据库的转储与恢复②数据库的安全性.完整性控制③检测并改善数据库的性能④数据库的重组和重构 2.运行状态监控与分析:管理员借助相应工具在数据库运行过程中监测数据库系统的运行情况,掌握系统当前或以往的负荷.配置.应用和其他相关信息,并对监测数据进行分析. ①自动监控机制②手动监控机制③对数据库构架体系的监控④对数据库性能的监控 3. 数据库存储空间管理:数据库的存储结构一般分为逻辑存储结构和物理存储结构,其物理存储结构决定了数据库存储数据时数据文件所占用空间的大小及分

服务器日常维护需注意哪些事项?

在服务器行业火热的今天,服务器是如今被使用较广的一款网络设备,很多用户在开展业务的时候,往往会选择服务器租用或者服务器托管来发展自己的线上业务,那么在使用管理服务器的时候,服务器的日常维护方面都哪些呢?需要注意些什么呢?为了能更好的使用和延长服务器的使用寿命,定期的对服务器进行维护和管理是非常必要的.在维护服务器的时候一定要小心的处理好维护的工作,否则出现错误的话就会影响很大.为了方便大家在维护中了解一些维护内容的同时又能避免出现错误.下面智简魔方小编就收集了一些关于服务器硬件设施维护资料供大家

DB2日常维护——REORG TABLE命令优化数据库性能

[转]DB2日常维护——REORG TABLE命令优化数据库性能 一个完整的日常维护规范可以帮助 DBA 理顺每天需要的操作,以便更好的监控和维护数据库,保证数据库的正常.安全.高效运行,防止一些错误重复发生. 由于DB2使用CBO作为数据库的优化器,数据库对象的状态信息对数据库使用合理的 ACCESS PLAN至关重要.DB2 优化器使用目录统计信息来确定任何给定查询的最佳访问方案.如果有关表或索引的统计信息已过时或者不完整,则会导致优化器选择不是最佳的方案,并且会降低 执行查询的速度.当数据

【表空间支持的最大数据文件大小的算法】【数据库限制】【数据文件文件头保留数据块数】

本地管理表空间中设置不同大小的db_block_size时数据文件头保留空间相应例如以下:--?? db_block_size=2KB,文件头保留32个数据块,即64KB. db_block_size=4KB.文件头保留16个数据块,即64KB. db_block_size=8KB,文件头保留8个数据块,即64KB. db_block_size=16KB,文件头保留4个数据块.即64KB. db_block_size=32KB,文件头保留4个数据块.即128KB. --为什么不是64kb? 默认

Oracle ASM数据库日常管理维护_超越OCP精通Oracle视频课程培训25

oracle视频教程目标  Oracle视频教程,风哥本套oracle教程培训学习ASM基础知识,ORACLE单机与RAC的ASM安装配置说明,ORACLE单机与RAC ASM启动与关闭,图形界面和命令行下ASM磁盘组的创建与维护,ASM环境下的表空间管理,ASMCMD管理工具介绍,配置ASM监听实现远程连接管理,同机迁移数据库从ASM磁盘至文件系统,异机迁移数据库从文件系统至ASM磁盘等. 适用人群IT相关从业人员.Oracle数据库技术人员.想加工资的.想升职的都可以.  视频在线学习地址:

让你提前认识软件开发(34):数据库的维护

第2部分 数据库SQL语言 数据库的维护 对于某些大型软件产品,一旦商用,必定会存储非常多用户信息,这就对产品所使用的数据库(下面简称业务数据库)带来了压力.为了保证业务数据库的平稳执行,须要在日常工作中对数据库做一些主要的维护操作. 业务数据库的维护规则例如以下: 1. 对业务数据库必须进行定期全量备份 业务数据库的定期备份能在数据库被意外破坏时进行高速恢复,备份策略能够依据数据增量大小採用周计划或月计划. 假如备份数据库db_100,则Oracle.Sybase和SQL Server中的操作