我正在为我们的实例推出DBCC。
每个数据库最终将有一个DBCC或DBCC PHYSICAL_ONLY。
我一直在评估是否应该执行完整的CHECKDB,还是使用ESTIMATEONLY检查DBCC的结果。
然而,我昨天在Server 2008 (SP1)上运行了这个程序,并且对某个数据库的tempdb估计值是510 on。
然而,在实践中,它填补了整个19 it的驱动器,所以估计是很遥远的!
我的印象是ESTIMATEONLY错误在SQL 2008 R2中,而不是标准的2008?
还有另一种方法来衡量tempdb的使用情况吗?某种类型的数据库大小与tempdb使用率:(也就是说,如果我有一个500 be的数据库,那么我应该期望使用多少tempdb?)
我还需要实现测试恢复,因为这里不这样做。一旦服务器就绪,我将切换到PHYSICAL_ONLY,然后在还原的数据库上执行完整的CHECKDB操作。
谢谢
发布于 2015-06-03 13:02:18
在重新启动作为维护活动的一部分之前,我们通过表中跟踪一段时间的数据来估计tempdb的使用和大小,跟踪它的增长。
注:它可能不是另一种选择,但有助于跟踪一段时间内tempdb是如何增长的。
步骤1创建表来存储数据:
CREATE TABLE [dbo].[TempDBFileSize] (
[TFSID] [int] IDENTITY (1, 1) NOT NULL ,
[FileID] [int] NULL ,
[File_Logical_Name] [varchar] (128) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[State_Desc] [varchar] (128) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[Type_Desc] [varchar] (128) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[Default_File_SizeMB] [int] NULL ,
[ActualKB] [int] NULL ,
[ActualMB] [int] NULL ,
[File_MaxSize] [varchar] (20) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[File_Growth] [varchar] (20) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[Growth_Type] [varchar] (20) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[Physical_File_Name] [varchar] (128) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[DateCaptured] [datetime] NULL
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[TempDBFileSize] WITH NOCHECK ADD
CONSTRAINT [PK_TempDBFileSize] PRIMARY KEY CLUSTERED
(
[TFSID]
) ON [PRIMARY]
GO步骤2创建SP以捕获上面创建的表中的tempdb数据和日志文件使用情况:
CREATE PROCEDURE dbo.spTempdbFileSize
AS
/*
------------------------------------------------------
-- Object Name: dbo.spTempdbFileSize
-- Project: SQL Server TempDB Sizing
-- Business Process: SQL Server Capacity Planning
-- Purpose: Capture the TempDB growth
-- Detailed Description: Capture the TempDB size, name, file, etc for the TempDB files
-- Database: TempDB
-- Dependent Objects: dbo.TempDBFileSize
-- Called By: Admin - TempDB Sizing
-- Upstream Systems: None
-- Downstream Systems: None
--
------------------------------------------------------
-- Rev | CMR | Date Modified | Developer | Change Summary
------------------------------------------------------
-- 001 | N\A | 12.02.2007 | Edgewood | Original code
-- 002 | | 03.30.2009 | Penberth | Modified the code to get the actual size
-- of the tempdb alongside the the default sizes.
-- Added the ActualKB and ActualMB columns and
-- renamed the [File_SizeMB] to [Default_File_SizeMB]
--
*/
SET NOCOUNT ON
INSERT INTO dbo.TempDBFileSize (FileID, File_Logical_Name, State_Desc, Type_Desc,
[Default_File_SizeMB], ActualKB, ActualMB, File_MaxSize, File_Growth, Growth_Type,
Physical_File_Name, DateCaptured)
SELECT File_ID,
MasterTbl.[Name],
MasterTbl.State_Desc,
MasterTbl.Type_Desc,
(MasterTbl.[Size] * 8)/1024 AS 'File_SizeMB',
(TempTbl.[size]*8) AS ActualKB,
(TempTbl.[size]*8)/1024 as ActualMB,
File_MaxSize = CASE
WHEN MasterTbl.[Max_Size] = 0 THEN 'NoGrowth'
WHEN MasterTbl.[Growth] = 0 THEN 'NoGrowth'
WHEN MasterTbl.[Max_Size] = -1 THEN 'UnlimitedGrowth'
WHEN MasterTbl.[Max_Size] = 268435456 THEN 'TLogMax'
ELSE CAST((MasterTbl.[Max_Size] * 8)/1024 AS varchar(10)) END,
File_Growth = CASE
WHEN MasterTbl.[Growth] = 0 THEN 'NoGrowth'
WHEN MasterTbl.[Growth] > 0 AND MasterTbl.[is_percent_growth] = 0
THEN CAST((MasterTbl.[Growth]* 8)/1024 AS varchar(10))
WHEN MasterTbl.[Growth] > 0 AND MasterTbl.[is_percent_growth] = 1
THEN CAST(MasterTbl.[Growth] AS varchar(10))
ELSE 'Unknown' END,
Growth_Type = CASE
WHEN MasterTbl.[Growth] = 0 THEN 'NoGrowth'
WHEN MasterTbl.[is_percent_growth] = 0 THEN 'MegaBytes'
WHEN MasterTbl.[is_percent_growth] = 1 THEN 'Percentage'
ELSE 'Unknown' END,
MasterTbl.[Physical_Name],
GETDATE() AS 'DateCaptured'
FROM Master.sys.master_files MasterTbl (NOLOCK)
LEFT OUTER JOIN TEMPDB.SYS.SYSFILES TempTbl (NOLOCK)
ON MasterTbl.[Physical_Name] = TempTbl.[filename]
WHERE Database_ID = 2
SET NOCOUNT OFF
GO步骤3:通过SQL代理作业执行上面的SP :我们安排它每4小时运行一次。因此,到本周末,我们有足够的数据来预测tempdb增长了多少,并据此进行了估算。
只需执行
SELECT *
FROM [dbo].[TempDBFileSize]
ORDER BY ActualMB查看存储的结果
https://dba.stackexchange.com/questions/103149
复制相似问题