在起草過程中的管理元數據(元數據存儲在數據庫中)我們的數據倉庫的一部分'表增長的向前發展。 在數據倉庫,它是有用的知道有多大的增長表和如何開發這些表。
如果你認識到異常,及時採取措施,以確保最佳性能等數據,歸檔保存在單獨的舊表。 在本文中,我舉一個例子,你怎樣可以監察增長表。
的增長表來識別您每天作快照狀態表。 SQL Server中保持統計的數量在一個表中的記錄存在。 你不這樣做的罪名在桌子上。 也許你想這對每個數據庫中的SQL實例做。 然後,你想寫的狀態表中的一個表,每一天。
下表是一個你可以創建示例表的統計數字給我們寫信。 你可以明顯地擴大你的列是有道理的。
[ dbo ] . [ Tablerowcount ] ( 的CREATE TABLE [dbo的]。[Tablerowcount]( TableRowCountID ] [ VARCHAR ] ( 128 ) NOT NULL, [TableRowCountID] [的VARCHAR](128)NOT NULL的, RegistrationDate ] [ DATETIME ] NULL, [登記日期] [日期時間]為NULL, DatabaseName ] [ VARCHAR ] ( 64 ) NULL, [數據庫名] [的VARCHAR](64)NULL,則 TableName ] [ VARCHAR ] ( 64 ) NULL, [表名] [的VARCHAR](64)NULL,則 NrOfRecords ] [ INT ] NULL, [NrOfRecords] [詮釋]為NULL, [ PK_Tablerowcount ] PRIMARY KEY CLUSTERED 約束 [PK_Tablerowcount] PRIMARY KEY的群集 ( TableRowCountID ] ASC [TableRowCountID] 升序 WITH ( PAD_INDEX = OFF , STATISTICS_NORECOMPUTE = OFF , IGNORE_DUP_KEY = OFF , ALLOW_ROW_LOCKS = ON , ALLOW_PAGE_LOCKS = ON ) ON [ PRIMARY ] )與(PAD_INDEX = OFF,則關閉 = STATISTICS_NORECOMPUTE,IGNORE_DUP_KEY = 關 = 對 ALLOW_ROW_LOCKS,ALLOW_PAGE_LOCKS = ON)的[小學] ON [ PRIMARY ] ) 在[小學]
然後,我們創建了一個存儲過程,將寫入統計為每個數據庫表中。 有一些硬編碼的東西,你必須適應作為數據庫名稱(插入到BI2_METABASE)代替你的數據庫的名稱。
[ dbo ] . [ sp_tablerowcount ] ( @DEBUG BIT = 0 ) 的CREATE PROCEDURE [dbo的]。[Sp_tablerowcount](@調試位 = 0) /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 由於 / * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~ SPC的目的:收集號碼記錄每個數據庫每天每日期 創建人:羅納德Kraijesteijn 建立時間:2010年3月 更新:十 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~ 例子 Exec的sp_tablerowcount 1 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 〜〜〜* / 動工 設定SET NOCOUNT ON @ SQL AS NVARCHAR ( MAX ) 隨著的DECLARE @ 的SQL數據類型為 nvarchar(MAX)的 @DB AS VARCHAR ( 32 ) 隨著數據庫的DECLARE @ 的VARCHAR(32) @RC AS INT 作為區局的DECLARE @ 詮釋 @ DATE AS INT 日期為int的DECLARE @ @ DATE = CAST ( YEAR ( GETDATE ( ) ) * 10000 + MONTH ( GETDATE ( ) ) * 100 科協 的SET @ 日期=(年 (的getDate())* 10000 + 月份 (的getDate())* 100 ( GETDATE ( ) ) AS VARCHAR ( 8 ) ) + 日 (getdate()的) 為varchar(8)) -清理現有數目今天(我們不希望有一天雙註冊!) Tablerowcount 需要刪除 Tablerowcount CAST ( YEAR ( RegistrationDate ) * 10000 + MONTH ( RegistrationDate ) 在WHERE 科協 (年 (註冊日期)* 10000 + 月份 (註冊日期) + DAY ( RegistrationDate ) AS VARCHAR ( 8 ) ) = @ DATE * 100 + 日 (註冊日期) 為varchar(8))= @ 日期 @RC = @@ROWCOUNT鋼筋混凝土的SET @ @ @行數 = @DEBUG = 1 如果 @調試= 1 CAST ( @RC AS VARCHAR ( 16 ) ) 打印 科協 (@鋼筋混凝土為varchar(16)) +刪除,因為他們已經在今天的統計' -數據庫檢索系統表 CUR_DB CURSOR DECLARE CURSOR的 CUR_DB [ name ] 對於SELECT [名字] sys. databases 從 sys。 數據庫 [ name ] NOT IN ( 'master' , 'tempdb' , 'model' , 'msdb' ) 其中,[ 名稱]不中('師父','tempdb中','模式','msdb資料') -註冊人數的記錄每個表 CUR_DB 開放 CUR_DB CUR_DB INTO @DB數據庫CUR_DB 的FETCH改成 @ @@FETCH_STATUS = 0 在WHILE @ @的fetch_status = 0 動工 @DEBUG = 1 PRINT 'Loading table statistics to metabase for database: ' + @DB 如果 @調試= 1 打印 加載數據庫表統計元數據庫:'+ @數據庫 @ SQL = 'INSERT INTO BI2_METABASE.dbo.Tablerowcount 設置 @ 的SQL ='的INSERT INTO BI2_METABASE.dbo.Tablerowcount 選擇 (科協(年(的getDate())* 10000 +月份(的getDate())* 100 +天(getdate()的)為varchar(8))+ '' '' + _ @數據庫+'_'+ O.name)作為TableRowCountID ,getdate()的作為登記日期 ,@數據庫作為數據庫名 作為O.name表名稱 作為I.rowcnt NrOfRecords + @DB + '.dbo.sysobjects AS O 從'+ @數據庫+'。Dbo.sysobjects為O + @DB 內部聯接'+ @數據庫 +'。Dbo.sysindexes正如我在= O.id I.id 在WHERE中I.indid(0,1) 與O.xtype = ''' 和O. [名稱]不是在('' '' '' dtproperties sysdiagrams '') 令由O. [名稱] TRY嘗試動工 SP_EXECUTESQL @ SQL , N '@DB AS VARCHAR(32)' , @DB = @DB Exec的 sp_executesql的 @ SQL中,'@ 數據庫為varchar(32),@ @數據庫=數據庫 @RC = @@ROWCOUNT鋼筋混凝土的SET @ @ @行數 = @DEBUG = 1 PRINT 'Records loaded: ' + CAST ( @RC AS VARCHAR ( 8 ) ) 如果 @調試= 1 打印 '記錄加載:'+ 科協 (為varchar @ 區局)(8) TRY 完嘗試 CATCH漁獲物的BEGIN ERROR_MESSAGE ( ) 打印的Error_Message() 'Error: processing table rowcount data for database ' 打印 '錯誤:表行計數數據處理數據庫' + @數據庫 @ SQL 打印 @ 的SQL CUR_DB 關閉 CUR_DB CUR_DB 的LOCATE CUR_DB 牌 @RC鋼筋混凝土的RETURN @ CATCH 完漁獲物 CUR_DB INTO @DB數據庫的FETCH改成 @ CUR_DB 完 CUR_DB 關閉 CUR_DB CUR_DB 的LOCATE CUR_DB 牌 完
注:我有一個額外的選項設置進行調試。 如果你的價值 1抗拒,看看存儲過程的輸出。 此外,他放棄了所有的統計數字,已在當天早些時候,因為你只是想要一個快照每天。
此存儲過程可以通過一個 SQL Server代理作業調度,使夜間自動調用和寫入數據。
如有意見或問題,留言。 希望你做點什麼。






















標籤