AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 162313
Accepted
Magier
Magier
Asked: 2017-01-27 05:01:10 +0800 CST2017-01-27 05:01:10 +0800 CST 2017-01-27 05:01:10 +0800 CST

手动日志文件增长过程是否与自动增长不同?

  • 772

我想知道增长文件的内部方法是否使用

ALTER DATABASE testdb 
MODIFY FILE 
( 
        NAME = testdb_Log 
      , SIZE = 40960MB  --40 GB
)

工作方式不同然后让文件随着时间的推移自动增长到相同的大小?

我的问题的背景: 我面临非常高(> 10K)的 VLF 依赖于不同实时数据库的几个日志文件,这些文件具有完全恢复,大小约为 100 GB。

在测试解决此问题的策略时,我将日志文件的大小调整为 16 MB,具有 4 个 VLF,然后让它增长到 40960 MB,然后将 AUTOGROW 设置为 100 MB。之后,我的文件中有 20 个 VLF。

我的期望是看到更多

(40960 MB - 16 MB) / 100 MB *(每个自动增长 8 个 VLF)= 文件中的 3276 个 VLF。

相反,我现在只有 20 个。为什么?

我的问题的第二部分:到目前为止,我了解到不适当的 AUTOGROW 设置会导致高 VLF 计数,这在我们的数据库中肯定是这种情况,在很长一段时间内都没有关注此设置。所有解释如何处理这种情况的文章都建议为 AUTOGROW 选择一个合适的值。但是如果我假设手动增长过程(本文的第一部分)甚至不使用自动增长设置是正确的,并且我以这种方式将日志文件增长到不需要任何自动增长的适当大小,那么自动增长之后设置就没那么重要了吗?

我的问题的第三部分?40GB 日志文件上的 VLF 计数 20 现在是否太低了?这是我读到我们应该以增量方式再次备份文件的原因吗?对于 40 G 或 80 G 的日志文件,多少 VLF 计数可能是一个好的(性能)数字?

sql-server sql-server-2008-r2
  • 1 1 个回答
  • 380 Views

1 个回答

  • Voted
  1. Best Answer
    John K. N.
    2017-01-27T06:16:09+08:002017-01-27T06:16:09+08:00

    甚低频计算

    对于事务日志文件的手动或自动增长,VLF 的数量没有区别。

    SQL Server < 2014

    在 SQL Server 2014 版本之前,当您创建、增长或自动增长 TLog 文件时,VLF 数量的算法如下:

    • 小于 1 MB:复杂忽略
    • 高达 64 MB:4 个新的 VLF
    • 64 MB 到 1 GB:8 个新的 VLF
    • 超过 1 GB:16 个新的 VLF

    SQL Server 2014 及更高版本

    从 SQL Server 2014 开始,算法如下:

    • TLog 的增长小于当前 TLog 大小的 1/8?
      • 是:创建 1 个新的 VLF
      • 否:使用上面的公式(对于以前的版本)

    您对 VLF 数量的计算应该是正确的。

    您的数据库是否设置为 AUTOSHRINK?您是否正在执行任何其他可能调整 TLOG 大小的维护任务?

    自动增长:是还是不是?

    如果您手动增加 TLog 文件,那么您确实可以关闭自动增长设置。但请注意:如果您不可用并且数据库必须增长,会发生什么情况?数据库将停止并显示一条错误消息。

    基线大小

    在某个时间点,您的数据库的 TLog 大小将有足够的空间用于发生的一般导入和日常工作负载以及发生的 TLog/Diff/Full 备份。

    从头开始创建新的 TLog 时,使用此基线大小作为起点。如果数据库的 TLog 真的很大,那么创建一个基本大小为 8 GB 的 TLog,然后以 8 GB 的步长手动增长,直到达到“基线”大小。

    然后在磁盘上保留一些额外的空间,以允许一两个 8GB 大小的“自动增长”。

    根据事务日志 VLF——太多还是太少?一文,这将为您提供最佳设置。他们建议 VLF 的大小为 512 MB。

    磁盘空间

    如果您没有无限的磁盘空间,请确保 TLog 文件设置了最大大小,这不会将您的磁盘填满。

    监控

    最重要的一点是要有一个监视工具来监视数据库的“可用空间”,因为您永远不知道流氓进程是否会做您没有预料到的事情。

    事务日志物理架构

    TechNet 上有一篇很好的文章解释了事务日志的物理体系结构。这使您对 TLog 滚动的原因或它可能必须增长的原因有了一些了解。

    参考

    SQL Server 2014 中 VLF 创建算法的重要变化
    初始 VLF 序列号和默认日志文件大小
    事务日志 VLF——太多还是太少?
    事务日志物理架构

    • 2

相关问题

  • SQL Server - 使用聚集索引时如何存储数据页

  • 我需要为每种类型的查询使用单独的索引,还是一个多列索引可以工作?

  • 什么时候应该使用唯一约束而不是唯一索引?

  • 死锁的主要原因是什么,可以预防吗?

  • 如何确定是否需要或需要索引

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve