我正在读保罗·兰德尔的“比例填充算法的研究”
每当将文件添加到文件组或从文件组中删除文件时,都会重新计算跳过目标,或者在文件组中至少进行8192个区段分配。
我正在使用AdventureWorks中的SQL 2014 (SP2)实例。我已经添加和删除了文件,但这不会导致在错误日志中显示跳过目标计数。它只定期显示(比如8192个区段分配计数)。我有追踪标志,1165开始。
我在执行insert (或delete)时运行了一个查询,以查看每个文件上的数据空间是如何受到影响的。我希望能够看到‘跳过目标’的价值,实时按需。或者作为此查询的一部分,或者在单独的查询中。
--Identifies used space on files, run during a insert, or delete it shows data usage by file.
select file_id
, type_desc
, name
, substring([physical_name],1,3) AS [Drive]
, physical_name
, state_desc
, size / 128 as 'AllocatedSizeMB'
, FILEPROPERTY([name],'SpaceUsed') /128 AS 'SpaceUsedMB' --Addapted from https://sqlperformance.com/2014/12/io-subsystem/proactive-sql-server-health-checks-1
, (1- (FILEPROPERTY([name],'SpaceUsed') / CAST (size AS MONEY))) *100 AS 'PercentFree'
, growth / 128 as 'GrowthSettingMB'
from sys.database_files
order by type_desc Desc, name如何在需求时看到“跳过目标”值?
当前显示在错误日志中。我在尝试期间添加并删除了AdventureWorks2014_Data_A3,还添加了一个没有在错误日志中显示计数的AdventureWorks2014_Data_X1。
LogDate ProcessInfo Text
2017-05-25 12:44:20.300 spid62 Proportional Fill Recalculation Starting for DB AdventureWorks2014 with m_cAllocs 8192.
2017-05-25 12:44:20.330 spid62 Proportional Fill Recalculation Completed for DB AdventureWorks2014 new m_cAllocs 8192, most free file is file 4.
2017-05-25 12:44:20.330 spid62 File [AdventureWorks2014_Data] (1) has 0 free extents and skip target of 393.
2017-05-25 12:44:20.330 spid62 File [AdventureWorks2014_Data_A3] (4) has 393 free extents and skip target of 1.
2017-05-25 12:44:20.330 spid62 File [AdventureWorks2014_Data_A2] (3) has 0 free extents and skip target of 393.
2017-05-25 13:06:54.510 spid62 Proportional Fill Recalculation Starting for DB AdventureWorks2014 with m_cAllocs 8192.
2017-05-25 13:06:54.520 spid62 Proportional Fill Recalculation Completed for DB AdventureWorks2014 new m_cAllocs 8192, most free file is file 1.
2017-05-25 13:06:54.520 spid62 File [AdventureWorks2014_Data] (1) has 2054 free extents and skip target of 1.
2017-05-25 13:06:54.520 spid62 File [AdventureWorks2014_Data_A3] (4) has 0 free extents and skip target of 2054.
2017-05-25 13:06:54.520 spid62 File [AdventureWorks2014_Data_A2] (3) has 230 free extents and skip target of 8.
2017-05-25 14:16:32.010 spid62 Proportional Fill Recalculation Starting for DB AdventureWorks2014 with m_cAllocs 8192.
2017-05-25 14:16:32.020 spid62 Proportional Fill Recalculation Completed for DB AdventureWorks2014 new m_cAllocs 8192, most free file is file 3.
2017-05-25 14:16:32.020 spid62 File [AdventureWorks2014_Data] (1) has 1517 free extents and skip target of 2.
2017-05-25 14:16:32.020 spid62 File [AdventureWorks2014_Data_X1] (5) has 427 free extents and skip target of 10.
2017-05-25 14:16:32.020 spid62 File [AdventureWorks2014_Data_A3] (4) has 4320 free extents and skip target of 1.
2017-05-25 14:16:32.020 spid62 File [AdventureWorks2014_Data_A2] (3) has 2944 free extents and skip target of 1. 编辑经过一些实验,这似乎是由保罗兰德尔的说法是正确的。
每当将文件添加到文件组或从文件组中删除文件时,都会重新计算跳过目标,或者在文件组中至少进行8192个区段分配。
但至少在SQL 2014中,重新计算的值不会显示在添加或删除文件的错误日志中,只显示8192个区段分配的事件。当8192度重新计算发生时,我可以推测这篇文章的大部分是准确的。
对于下面的内容,我看到了一些部分支持并与“跳过目标”部分冲突的行为,在每个非分配中都会减少一个。
在循环期间,检查文件的跳过目标,如果它等于1,则进行分配。如果跳过的目标大于1,则会减少1(最小值为1),不进行任何分配,并且考虑转移到文件组中的下一个文件。
在编写新记录时,能够看到“跳过目标”值的变化将是非常有趣的。
请记住,“跳过目标值”值是用大约每500 MB的新分配重新计算的;在大多数情况下,比例填充与GB的“S”或“100”S有关。关于正在编写的几MB数据的跳过目标的详细信息大多是学术性的。
发布于 2017-05-26 08:35:36
还有参数 for xp_readerrorlog。
因此,我认为您可以为最近的操作创建2个查询。
exec xp_readerrorlog 0, 1, 'Proportional Fill Recalculation', '', NULL, NULL, N'desc'。exec xp_readerrorlog 0, 1, 'skip target', '', NULL, NULL, N'desc'。https://dba.stackexchange.com/questions/174600
复制相似问题