Jac*_*las 6 sql-server-2008 logs
在夜间计划任务期间,我使用select into然后添加聚集索引从头开始创建一个大表。我想在整个过程中最大限度地减少日志记录量,因为我用于日志备份传送的带宽有限。
如果有帮助,我很乐意考虑另一种方法。
根据我的经验,最好的方法是:
INSERT使用TABLOCK提示进行最少日志记录详细信息包含在此 MS 白皮书中。
首先创建表,然后在与源相同的键上对其进行索引,从而消除了排序。
如果键匹配,TABLOCK使用,并启用跟踪标志 610,操作将被最少记录(记录页面而不是事务或行)。
对我来说,这更快,因为在SELECT INTO强制排序之后添加聚集索引可能非常昂贵且耗时。
编辑:
TF 610 仅用于控制插入索引表时的最小日志记录行为。
我不知道使用它有任何问题,但 MS 建议(我认为是防御性的)在使用前进行测试。
有没有一种简单的方法来衡量一个事务产生多少日志,以便我可以定量比较方法?
简单的方法,您可以在批处理之前和之后从 dm_io_virtual_file_stats DMV 记录当前日志使用情况。但是,这会受到其他服务器活动的污染,因此只有在您可以单独测试时才有用。
SELECT
DB_NAME(DB_ID()) AS [Database Name]
, vs.[file_id]
, vs.num_of_reads
, vs.num_of_bytes_read
, vs.num_of_writes
, vs.num_of_bytes_written
FROM
sys.database_files f
INNER JOIN
sys.dm_io_virtual_file_stats(DB_ID(), NULL) vs
ON vs.file_id = f.file_id
WHERE
f.type_desc = 'LOG'
OPTION
(RECOMPILE) ;
Run Code Online (Sandbox Code Playgroud)
更好的任务工具是sp_whoisactive,如果@get_transaction_info设置了参数,它会报告每个事务日志的统计信息。
| 归档时间: |
|
| 查看次数: |
3337 次 |
| 最近记录: |