Sql-Server
SSMS 磁碟使用情況報告不顯示自動增長事件
一段時間以來,我懷疑 SSMS 中的磁碟使用情況報告已停止顯示自動增長事件。為了測試,我創建了一個具有非常小的自動增長設置的空數據庫。然後我將大量數據插入到數據庫中的一個表中,這樣我就知道它必須增長。查看數據庫的文件屬性時文件較大,但磁碟使用情況報告未顯示任何自動增長事件。
然後我嘗試從這篇文章中執行 Aaron Bertrand 的腳本,這清楚地顯示了每個自動增長事件。
那麼,為什麼磁碟使用情況報告不會顯示相同的增長?有什麼建議?順便說一句,它是 SQL Server 2014 SP2。
磁碟使用情況報告的邏輯已寫入 SSMS,雖然我們不知道 RDL 的樣子(以及是否進行了任何過濾),但我使用 Profiler 抓取了 SSMS 2016 發送的此查詢:
if (select convert(int,value_in_use) from sys.configurations where name = 'default trace enabled' ) = 1 begin declare @curr_tracefilename varchar(500) ; declare @base_tracefilename varchar(500) ; declare @indx int ; select @curr_tracefilename = path from sys.traces where is_default = 1 ; set @curr_tracefilename = reverse(@curr_tracefilename); select @indx = patindex('%\%', @curr_tracefilename) ; set @curr_tracefilename = reverse(@curr_tracefilename) ; set @base_tracefilename = left( @curr_tracefilename,len(@curr_tracefilename) - @indx) + '\log.trc' ; select (dense_rank() over (order by StartTime desc))%2 as l1 , convert(int, EventClass) as EventClass , DatabaseName , Filename , (Duration/1000) as Duration , StartTime , EndTime , (IntegerData*8.0/1024) as ChangeInSize from ::fn_trace_gettable( @base_tracefilename, default ) left outer join sys.databases as d on (d.name = DB_NAME()) where EventClass >= 92 and EventClass <= 95 and ServerName = @@servername and DatabaseName = db_name() and (d.create_date < EndTime) order by StartTime desc ;
這與 Aaron 的腳本沒有本質區別,我看不出它如何返回不同的結果。在我看來,即使軌跡翻轉,它仍然會迭代所有軌跡(並且它們不會在幾分鐘甚至幾小時的測試空間內翻轉 5 倍)。