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 / 问题 / 25656
Accepted
Petter Brodin
Petter Brodin
Asked: 2012-10-10 00:51:57 +0800 CST2012-10-10 00:51:57 +0800 CST 2012-10-10 00:51:57 +0800 CST

SQL Server 虚拟日志大小

  • 772

我是一个偶然的 DBA,作为一名开发人员,从一个对数据库管理知之甚少的人那里继承了几个数据库服务器(2005 年和 2008 年),而且似乎对了解更多关于该主题的兴趣更小。

我边走边学,目前正在尝试找出事务日志文件。

我们所有的数据库都设置了简单的恢复模型和自动收缩。我知道使用自动收缩通常是一个可怕的想法,但我的理解是这样做是为了阻止事务日志失控。(自动收缩实际上是收缩日志文件还是仅仅收缩数据库?)

我在 SQL Server 2012 中发现了这一点,并且想知道关于 2005 年和/或 2008 年是否属实,以及它的确切含义:“当数据库使用简单恢复模型时,数据库引擎会在检查点之后截断事务日志。[. ..] 当虚拟日志已满 70% 时,数据库引擎会在简单恢复模式下触发自动检查点。” 虚拟日志大小在哪里指定?

我想在所有数据库上禁用自动收缩,但在我这样做之前,我需要知道日志文件不会很快失控。

任何帮助将不胜感激。

sql-server transaction-log
  • 3 3 个回答
  • 4359 Views

3 个回答

  • Voted
  1. Best Answer
    Jon Seigel
    2012-10-10T09:01:30+08:002012-10-10T09:01:30+08:00

    单个事务日志文件既有物理大小(您在磁盘上看到的),也有在物理文件中分解为称为虚拟日志文件 (VLF) 的逻辑部分。

    自动增长和自动收缩都对物理事务日志文件进行操作。

    事务日志截断(也称为“日志清除”)对事务日志 (VLF) 的逻辑部分进行操作,不会影响物理文件大小。这部分经常是混淆的主题。

    日志文件必须始终增长以容纳大型事务;关闭自动收缩将使日志文件保留其最大所需大小,而不是物理减小其大小。

    如果您没有大笔交易,禁用自动收缩是安全的;FULL如果数据库在或BULK_LOGGED您没有进行事务日志备份,那么日志文件将不会无限制地增长。

    此行为与 SQL Server 2005+ 相同。

    • 6
  2. Sky
    2012-10-10T02:40:45+08:002012-10-10T02:40:45+08:00

    正如您在问题中提到的,在检查点之后的 SQL 2005 和 2008 中,事务日志文件也将被截断。

    我的建议是将恢复模式设置为完整并创建一个作业以从事务日志文件中进行备份。可以在您的数据库上安排此作业,并在备份后截断事务日志。它会自动为您截断日志文件。请查看以下链接:

    SQL Server 2005: http ://technet.microsoft.com/en-us/library/ms189085(v=sql.90).aspx

    SQL Server 2008: http ://technet.microsoft.com/en-us/library/ms189085(v=sql.100).aspx

    • 2
  3. Petter Brodin
    2012-10-11T04:27:42+08:002012-10-11T04:27:42+08:00

    因此,这是我在阅读此处的其他回复并自己进行一些研究后发现的:

    问:“自动收缩实际上是收缩日志文件还是仅仅收缩数据库?” 答:据我了解:是的,确实如此。Autoshrink 在数据库级别设置,并影响所有文件(如果您右键单击数据库 -> 属性 -> 文件,或者运行查询 1,则会看到)。但是,自动增长适用于每个文件级别。

    问:“虚拟日志大小在哪里指定?” 答:请参阅 Jon Seigel 的回复和 Remus 发布的链接。要查看物理和逻辑日志大小,请使用查询 2

    一个问题是,如果数据库已激活完全恢复模式,增长到较大的大小,然后将恢复模式更改为简单,则不会触发检查点,因为 VLF 已自动增长。可以尝试通过运行查询 3 来解决此问题(请参阅 Remus 对日志文件头/尾的潜在问题的回复),这会将日志文件减小到最初创建时的大小。

    查询:

    1)

    SELECT name, physical_name AS current_file_location, DB_NAME(database_id) AS dbname
    FROM sys.master_files
    WHERE DB_NAME(database_id) = 'mydb'
    

    2)

    DECLARE @tmpt TABLE(
        dbname VARCHAR(255),
        logsize DECIMAL,
        logspaceused DECIMAL,
        stat INT
    )
    
    INSERT INTO @tmpt
        EXEC ('DBCC SQLPERF(LOGSPACE)')
    
    SELECT * FROM @tmpt WHERE dbname LIKE 'mydb' ORDER BY logspaceused DESC
    

    3)

    checkpoint
    DBCC SHRINKFILE('logfile_name')
    
    • 2

相关问题

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

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

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

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

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

Sidebar

Stats

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

    如何查看 Oracle 中的数据库列表?

    • 8 个回答
  • Marko Smith

    mysql innodb_buffer_pool_size 应该有多大?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    从 .frm 和 .ibd 文件恢复表?

    • 10 个回答
  • Marko Smith

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

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    如何选择每组的第一行?

    • 6 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

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

    • 4 个回答
  • Marko Smith

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

    • 7 个回答
  • 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
    pedrosanta 使用 psql 列出数据库权限 2011-08-04 11:01:21 +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
  • Martin Hope
    bernd_k 什么时候应该使用唯一约束而不是唯一索引? 2011-01-05 02:32:27 +0800 CST

热门标签

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

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助
subwaysurfers
my femboy roommate

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve