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 / 问题 / 23305
Accepted
Ross Bush
Ross Bush
Asked: 2012-08-29 09:57:16 +0800 CST2012-08-29 09:57:16 +0800 CST 2012-08-29 09:57:16 +0800 CST

Sql Server - 增长数据库文件的最佳实践

  • 772

我已经通过 sql server 2008 r2 中的数据收集器监控文件增长两周了。该数据库以每天 35 (MB) 左右的速度持续增长。数据库尚未达到 2 GB 的初始大小。

数据库文件自动增长设置为 5MB,我想尝试不同的方法,所以我正在寻找建议和/或评论。

每周日晚上 1:30 有一个调优任务运行。该任务将:

  • 检查数据库完整性
  • 缩小日志文件——(这没关系,因为日志模式很简单)
  • 收缩数据库
  • 重组索引
  • 重建索引
  • 更新统计
  • 清理历史

我想在每周调整计划中再添加两个步骤:

  1. 如果已用空间达到某个阈值或总大小,则将数据库文件增加 500 MB。
  2. 如果已用空间达到总大小的某个阈值,则将日志文件增加 250 MB(收缩后)。

通过将增长负担放在离线时间,我希望通过减少重负载期间的自动增长事件数量来获得性能。

我有两个与自动增长文件有关的问题。

  • 放置文件增长步骤的最佳位置是在当前步骤之前还是之后?
  • 如果我使用ALTER DATABASE|MODIFY FILE来增长文件,那么我如何确定是否SpaceUsedInFile >= (TotalFileSpace-@AllowanceThreshold)?
sql-server sql-server-2008
  • 2 2 个回答
  • 42931 Views

2 个回答

  • Voted
  1. Best Answer
    Aaron Bertrand
    2012-08-29T10:06:11+08:002012-08-29T10:06:11+08:00

    您的目标应该是尽可能少地自动增长。即使是即时文件初始化,一天七次也很痛苦。

    不要做收缩数据库。曾经。Shrinkfile,也许是,但只有在一个非常事件之后。收缩它只是为了再次增长是徒劳的,实际上应该被称为自动碎片。

    如果恢复模型很简单,那么您根本没有办法将日志文件增加 250 GB。文件中的已用空间会随着时间的推移自动清除,除非您在一个月前开始交易并且无意提交或回滚它。

    所以我的建议是:

    在安静期间手动自动增长数据文件,使其大小可以适应几个月的增长。这段时间你存它干什么?

    将数据文件的自动增长增量设置为相对较小的值(这样它在发生时不会中断用户),并在此事件上发出警报(例如,您可以在默认跟踪中捕获它,或通过扩展事件)。这可以告诉您,您正在达到您估计的高点,是时候再次手动增长了。此时,您需要保留本手册,以防您想在不同的驱动器上添加新文件/文件组以容纳空间,因为最终您将填满当前驱动器。

    例如,将日志文件自动增长到有史以来最大的两倍。它不应该进一步自动增长,除非有一些异常交易阻碍了事情。您还应该监视此事件,以便了解它们。

    • 28
  2. Nick Winstanley
    2012-11-24T14:00:10+08:002012-11-24T14:00:10+08:00

    如果可能,您应该尽量避免自动增长。问题是您无法控制何时会发生增长,并且您的系统可能会受到严重打击。

    将您的文件大小设置为一个月左右的合理大小,并从那里监控您的增长率,计算出您估计 X 时间量的空间量,并将您的大小设置为该值 + 误差范围。

    我已经设置了一个简单的监控作业,当文件大小在自动增长之前达到预定义的最大值时会提醒我。你可以使用这样的东西:

    SELECT instance_name,
           [Data File(s) Size (KB)],
           [LOG File(s) Size (KB)],
           [Log File(s) Used Size (KB)],
           [Percent Log Used]
           into ##Logsize
    FROM
    (
       SELECT *
       FROM sys.dm_os_performance_counters
       WHERE counter_name IN
       (
           'Data File(s) Size (KB)',
           'Log File(s) Size (KB)',
           'Log File(s) Used Size (KB)',
           'Percent Log Used'
       )
         AND instance_name = 'database your interested in' 
    ) AS Src
    PIVOT
    (
       MAX(cntr_value)
       FOR counter_name IN
       (
           [Data File(s) Size (KB)],
           [LOG File(s) Size (KB)],
           [Log File(s) Used Size (KB)],
           [Percent Log Used]
       )
    ) AS pvt 
    go
    declare @logsize int
    Select @logsize = [Percent Log Used] from ##Logsize
    
    If @logsize > the maximum percent you want the log to fill too i.e 90
        BEGIN
            --Do your thing here
        END
    
    Drop table ##Logsize
    

    这当然可以安排为一项工作。

    • 12

相关问题

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

  • 我在索引上放了多少“填充”?

  • 是否有开发人员遵循数据库更改的“最佳实践”类型流程?

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

  • 从 SQL Server 2008 降级到 2005

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

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

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve