web-dev-qa-db-ja.com

DBCCCHECKDB見積もりの​​代替

現在、インスタンス全体でDBCCCHECKDBを展開しています。

各データベースには、最終的にDBCCCHECKDBまたはDBCCCHECKDBPHYSICAL_ONLYのいずれかが含まれます。

FULL CHECKDBを実行する必要があるのか​​、PHYSICAL_ONLYを実行するのかを判断する方法は、DBCC CHECKDB WITHESTIMATEONLYの結果を調べることです。

ただし、昨日SQL Server 2008(SP1)でこれを実行したところ、特定のデータベースのtempdbの見積もりは510MBでした。

ただし、実際には19 GBのドライブ全体がいっぱいになったため、見積もりはかなりずれていました。

ESTIMATEONLYのバグはSQL2008 R2にあり、標準の2008ではないという印象を受けました。

Tempdbの使用状況を測定する別の方法はありますか?ある種のデータベースサイズとtempdbの使用率:(つまり、500GBのデータベースがある場合、どのくらいのtempdbの消費が予想されますか?)

ここでは実行しないため、テスト復元も実装する必要があります。そのサーバーを配置したら、すべてをPHYSICAL_ONLYに切り替えてから、復元されたデータベースに対して完全なCHECKDBを実行します。

ありがとうございました

4
hpk89

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:上記のSPをSQLエージェントジョブ経由で実行します。4時間ごとに実行するようにスケジュールします。したがって、週末までに、tempdbの増加量を予測するのに十分なデータがあります。それに応じて見積もる。

実行するだけ

    SELECT * 
FROM [dbo].[TempDBFileSize]
ORDER BY ActualMB

保存された結果を表示するには

3
KASQLDBA