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 / 问题

问题[checkpoint](dba)

Martin Hope
SEarle1986
Asked: 2018-08-20 13:50:59 +0800 CST

如果系统在下一个检查点之前发生故障,脏页会发生什么?

  • 9

假设一个数据库使用完全恢复模型,当在 SQL Server 中写入记录时(通过INSERT/ UPDATEetc),预写日志记录将确保在修改数据页之前将更改写入日志文件。

日志和数据页条目都在 RAM 中生成,稍后由检查点提交到磁盘。

如果系统崩溃(为了争论而断电)脏页(在 RAM 中更改但未提交到磁盘的 IE 数据)会发生什么情况,因为 RAM 的内容无法在系统重启后继续存在,这些数据是否丢失?

编辑

经过一些测试,我可以看到脏页没有丢失,但我不确定为什么:

使用本教程

创建测试数据库

CREATE DATABASE DirtyPagesDB
GO
USE DirtyPagesDB
GO

关闭自动检查点

DBCC TRACEON(3505, -1);
DBCC TRACESTATUS();

创建一个表,插入一些数据并发出检查点:

CREATE TABLE t1 (Speaker_Bio CHAR(8000))
GO
INSERT INTO t1 VALUES ('SQL'),('Authority')
GO
CHECKPOINT

确认没有脏页

-- Get the rows of dirtied pages
SELECT
database_name = d.name,
OBJECT_NAME =
CASE au.TYPE
WHEN 1 THEN o1.name
WHEN 2 THEN o2.name
WHEN 3 THEN o1.name
END,
OBJECT_ID =
CASE au.TYPE
WHEN 1 THEN p1.OBJECT_ID
WHEN 2 THEN p2.OBJECT_ID
WHEN 3 THEN p1.OBJECT_ID
END,
index_id =
CASE au.TYPE
WHEN 1 THEN p1.index_id
WHEN 2 THEN p2.index_id
WHEN 3 THEN p1.index_id
END,
bd.FILE_ID,
bd.page_id,
bd.page_type,
bd.page_level
FROM sys.dm_os_buffer_descriptors bd
INNER JOIN sys.databases d
ON bd.database_id = d.database_id
INNER JOIN sys.allocation_units au
ON bd.allocation_unit_id = au.allocation_unit_id
LEFT JOIN sys.partitions p1
ON au.container_id = p1.hobt_id
LEFT JOIN sys.partitions p2
ON au.container_id = p2.partition_id
LEFT JOIN sys.objects o1
ON p1.OBJECT_ID = o1.OBJECT_ID
LEFT JOIN sys.objects o2
ON p2.OBJECT_ID = o2.OBJECT_ID
WHERE is_modified = 1
AND d.name = 'DirtyPagesDB'
AND
(
o1.name = 't1'
OR o2.name = 't1'
);
GO

确认最后一个检查点的时间

SELECT  f1.[Checkpoint Begin], f2.[Checkpoint End]
FROM    fn_dblog(NULL, NULL) f1
        JOIN fn_dblog(NULL, NULL) f2
             On f1.[Current LSN] = f2.[Previous LSN]
WHERE   f2.Operation IN (N'LOP_BEGIN_CKPT', N'LOP_END_CKPT');

添加更多行

INSERT INTO t1 VALUES ('SQL'),('Authority')

使用上面的查询来确认有脏页

从任务管理器中终止 SQL Server 任务以模拟关机。

启动服务

重新运行上面的命令以获取最后一个检查点时间,它是相同的(IE 除了我们手动执行的检查点之外没有运行检查点)

从表 t1 中选择,所有四个记录都在那里

sql-server checkpoint
  • 1 个回答
  • 1312 Views
Martin Hope
RomanG
Asked: 2017-08-03 12:15:24 +0800 CST

WiredTiger Checkpoint写入过程中MongoDB响应缓慢

  • 3

我们将 3 个 MongoDB 实例3.2.12配置为副本集。启用日记功能,存储引擎为 WiredTiger。

大多数时候,我们的应用程序在数据库服务器上产生非常低的负载并且运行良好,但我们很少启动导致 x10...x100 负载增加的后台维护,主要是由于insert操作:~10000 次插入/秒。

今天在维护期间,我们注意到我们的应用程序的响应时间在短时间内每 1 分钟增加一次。 应用响应时间指标

我们怀疑它与 MongoDB 服务器有关,并发现以下事实:

mongostat输出示例:


insert query update delete getmore command % dirty % used flushes vsize   res qr|qw ar|aw netIn netOut conn set repl           time
   891   936    235     14     388  2620|0     4.6   80.0       0 33.8G 26.7G   0|0   1|0 2.02m  2.38m  208 rs0  PRI 14:55:49+03:00
  1098   861      3     12     107   452|0     4.6   80.0       0 33.8G 26.7G   0|0   1|1 1.07m  5.39m  208 rs0  PRI 14:55:50+03:00
 14602   725     11     14     259   727|0     4.7   80.0       0 33.8G 26.7G   0|0   0|0 7.57m  8.44m  208 rs0  PRI 14:55:51+03:00
     4   527    260      1      23   100|0     4.7   80.0       0 33.8G 26.7G   0|0   0|0  383k  3.60m  208 rs0  PRI 14:55:52+03:00
  8698   121    671     11     186   585|0     4.8   80.0       0 33.8G 26.7G   0|0   2|0 5.61m  6.30m  208 rs0  PRI 14:55:53+03:00
  5539   645     21      9     199   623|0     4.9   80.0       0 33.8G 26.7G   0|0   1|0 5.19m  5.77m  208 rs0  PRI 14:55:54+03:00
  2599   602     14      9      99   370|0     4.9   80.0       0 33.8G 26.7G   0|0   1|0 1.48m  2.37m  208 rs0  PRI 14:55:55+03:00
  3507   485     22      3     139   415|0     4.9   80.0       0 33.8G 26.7G   0|0   0|0 4.90m  5.33m  208 rs0  PRI 14:55:56+03:00

  3627   369   4019      9     133   415|0     4.3   80.0       1 33.8G 26.7G   0|0   4|3 4.59m  4.18m  208 rs0  PRI 14:55:57+03:00

     3    17     20      1      11    63|0     2.9   80.0       0 33.8G 26.7G   0|0 13|12 29.8k  56.3k  208 rs0  PRI 14:55:58+03:00
     5    24      4      1      18    88|0     2.1   80.0       0 33.8G 26.7G   0|0 18|16 39.1k   270k  208 rs0  PRI 14:55:59+03:00
     2     9      2      3       9    54|0     0.5   80.0       0 33.8G 26.7G   0|0 22|20 20.2k  88.9k  208 rs0  PRI 14:56:00+03:00
     2    47     *0      3       2    21|0     0.3   80.0       0 33.8G 26.7G   0|0 24|23 18.0k  39.6k  208 rs0  PRI 14:56:01+03:00
 26635   991   5475     35     410  1189|0     0.8   80.0       0 33.8G 26.7G   0|1   2|0 16.4m  21.0m  207 rs0  PRI 14:56:02+03:00

  • 应用程序缓慢的时刻与mongstat报告的时刻完美匹配flushes = 1。

  • 在此事件后的接下来 4 秒内,MongoDB 处理的请求数量非常少。

  • transaction checkpoint most recent time (msecs)来自 的值也serverStatus等于 ~4000 毫秒。

我们启动iostat -x -d 1并发现了以下模式:


Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda              36.00   311.00   33.00   61.00   276.00  1384.00    35.32     0.04    0.39    0.36    0.41   0.34   3.20
sdb              60.00   311.00   21.00   61.00   324.00  1384.00    41.66     0.03    0.38    0.38    0.38   0.34   2.80
sdc              36.00   311.00   33.00   63.00   276.00  1392.00    34.75     0.04    0.43    0.33    0.48   0.38   3.60
sdd              57.00   311.00   20.00   63.00   308.00  1392.00    40.96     0.04    0.46    0.30    0.51   0.42   3.50
md126             0.00     0.00  296.00  695.00  1184.00  2776.00     7.99     0.00    0.00    0.00    0.00   0.00   0.00

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     0.00    7.00   21.00    28.00    36.00     4.57     0.01    0.43    0.29    0.48   0.32   0.90
sdb               0.00     0.00    4.00   21.00    16.00    36.00     4.16     0.01    0.40    0.25    0.43   0.28   0.70
sdc               0.00     0.00    6.00   21.00    24.00    36.00     4.44     0.01    0.26    0.33    0.24   0.19   0.50
sdd               0.00     0.00    4.00   21.00    16.00    36.00     4.16     0.01    0.24    0.25    0.24   0.16   0.40
md126             0.00     0.00   21.00   21.00    84.00    72.00     7.43     0.00    0.00    0.00    0.00   0.00   0.00

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     0.00    0.00    4.00     0.00     8.00     4.00     0.00    0.50    0.00    0.50   0.50   0.20
sdb               0.00     0.00    0.00    4.00     0.00     8.00     4.00     0.00    0.50    0.00    0.50   0.50   0.20
sdc               0.00     0.00    0.00    2.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
sdd               0.00     0.00    0.00    2.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
md126             0.00     0.00    0.00    4.00     0.00     8.00     4.00     0.00    0.00    0.00    0.00   0.00   0.00

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00 17275.00    1.00 2824.00     4.00 79688.00    56.42    10.25    3.63    0.00    3.63   0.14  39.40
sdb               0.00 17275.00    1.00 2824.00     4.00 79688.00    56.42    10.65    3.77    0.00    3.77   0.14  39.60
sdc               0.00 17284.00    1.00 2799.00     4.00 79624.00    56.88    10.70    3.82    0.00    3.82   0.14  39.20
sdd               0.00 17284.00    1.00 2799.00     4.00 79624.00    56.88    11.40    4.07    0.00    4.07   0.15  40.70
md126             0.00     0.00    4.00 39867.00    16.00 159316.00     7.99     0.00    0.00    0.00    0.00   0.00   0.00

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda              53.00 19426.00   64.00 4645.00   468.00 95132.00    40.60    18.43    3.91    0.31    3.96   0.11  52.80
sdb              28.00 19426.00   29.00 4645.00   228.00 95132.00    40.80    18.68    4.00    0.97    4.02   0.12  56.80
sdc              62.00 19463.00   61.00 4660.00   492.00 95340.00    40.60    24.42    5.17    1.00    5.23   0.12  57.00
sdd              18.00 19463.00   39.00 4660.00   228.00 95340.00    40.68    19.39    4.13    0.15    4.16   0.11  53.70
md126             0.00     0.00  357.00 47782.00  1428.00 190468.00     7.97     0.00    0.00    0.00    0.00   0.00   0.00

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda              24.00  1261.00  275.00  127.00  1196.00  5348.00    32.56     0.10    0.26    0.11    0.59   0.24   9.80
sdb              55.00  1261.00   33.00  127.00   352.00  5348.00    71.25     0.09    0.54    0.30    0.61   0.52   8.30
sdc              61.00  1261.00  281.00  128.00  1368.00  5352.00    32.86     0.13    0.31    0.14    0.68   0.28  11.50
sdd              11.00  1261.00   38.00  128.00   196.00  5352.00    66.84     0.09    0.54    0.16    0.66   0.53   8.80
md126             0.00     0.00  775.00 2675.00  3100.00 10700.00     8.00     0.00    0.00    0.00    0.00   0.00   0.00

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda              75.00  1161.00   59.00  165.00   536.00  5040.00    49.79     0.11    0.51    0.29    0.59   0.48  10.70
sdb               4.00  1161.00   37.00  165.00   164.00  5040.00    51.52     0.11    0.52    0.14    0.61   0.52  10.60
sdc              58.00  1151.00   58.00  165.00   464.00  5000.00    49.00     0.12    0.54    0.31    0.62   0.50  11.20
sdd              23.00  1151.00   33.00  165.00   224.00  5000.00    52.77     0.10    0.50    0.18    0.56   0.50   9.90
md126             0.00     0.00  347.00 2510.00  1388.00 10040.00     8.00     0.00    0.00    0.00    0.00   0.00   0.00

首先,所有 IO 活动指标都降为零(我根本无法解释),然后我们看到一堆写入增加到avgqu-sz20,然后所有指标都恢复到典型值。

因此,我猜我们遇到的性能下降与每 1 分钟发生一次的 WiredTiger 检查点写入过程有关 ( docs )。

看起来写这么多数据花费的时间是合理的,但是为什么MongoDB在这个过程中不处理请求呢?我认为它应该在后台发生并且不应该影响当前正在执行的操作。

mongodb checkpoint
  • 1 个回答
  • 1158 Views
Martin Hope
James Jenkins
Asked: 2017-03-07 07:18:33 +0800 CST

不写检查点记录会损坏任何东西吗?

  • 3

我收到了警报

事件 ID:3619。无法在数据库“ID ####”中写入检查点记录,因为日志空间不足

我知道它为什么会发生,我已经解决了这个问题,备份了 t-logs,缩小了过度增长的日志,并且尽我所能确保它不会再次发生。导致日志填满的问题是索引重建。

除了检查点没有被写入和特定的索引重建没有完成之外,我没有看到任何其他问题。

失败的检查点写入(本身)是否会导致我可能需要解决的任何损坏?

参考检查点 (Transact-SQL)

sql-server checkpoint
  • 2 个回答
  • 1778 Views
Martin Hope
Dave Stibrany
Asked: 2016-05-21 07:52:56 +0800 CST

Checkpoint 如何知道从 PostgreSQL 中的哪个点恢复?

  • 1

我试图更好地理解检查点内部结构,特别是在 PostgreSQL 中。

我目前的理解是,崩溃恢复将始终从检查点启动时标记的最新 REDO 位置开始。REDO 位置之前的所有 WAL 记录中的数据保证在磁盘上(在数据文件中),并且不再需要那些 WAL 记录。

我很难理解以下内容:

1)REDO位置是如何准确确定的。当一个 Checkpoint 启动时,它是否字面意思是“REDO location is the current WAL record + 1”?

2)当我们确定REDO位置时,如何保证在此之前的所有WAL记录都不再需要了?

具体来说,下面的场景是如何处理的:

  • 检查点 1 运行并将脏页 A 写出到磁盘。
  • 脏页 A 然后插入了新行
  • 检查点 1 完成
  • 检查点 2 启动并确定 REDO 位置。

如果页面在检查点 1 刷新后可能变脏,检查点 2 如何确保所有以前的数据都写入磁盘,这是问题的要点。

postgresql checkpoint
  • 1 个回答
  • 935 Views
Martin Hope
Amer Sawan
Asked: 2013-12-30 07:01:55 +0800 CST

LDF 文件中的日志是否在检查点后被删除?

  • 1

使用fn_dblog我可以获得我的数据库的联机事务日志的活动部分。

但是在每个检查点之后我只能看到 2 个条目显示检查点的开始和检查点LOP_BEGIN_CKPT的结束LOP_END_CKPT。

我想知道以前的日志是否在每个检查点之后都被删除,或者它们只是被忽略,因为dbi_checkptLSN位于引导页面中的值指示最新的 LSN?

如果是dbi_checkptLSN我能够移动该指标的结果,如果是,如何移动?

如果没有,并且日志没有被删除,我该如何访问以前的日志?

sql-server checkpoint
  • 2 个回答
  • 956 Views
Martin Hope
Stefan de Bruijn
Asked: 2013-01-09 02:13:17 +0800 CST

Sql Server 回滚到某个时间点

  • 1

这似乎是一个相当普遍的情况,但我不知道如何做到这一点。

我有一个非常大的数据库(想想很多 TB),因此无法创建完整备份。在某个时候,我想在数据库上运行一个更新脚本,它可以进行一些架构修改、更改一些数据等。

为了在安全站点上,如果出现问题,我希望能够撤消这些操作。如果在更新过程中没有人可以访问数据库,那也没关系。

为了让它更复杂一点,我不想破坏日常维护/备份过程。

我一直在考虑将数据库置于单服务器模式,然后在指定的时间段内回滚事务日志,但我不确定如何执行此操作(而且时间感觉不太可靠)。我查看了“检查点”功能,但不确定如何使用它。任何人?

sql-server checkpoint
  • 1 个回答
  • 1690 Views
Martin Hope
Majid Azimi
Asked: 2012-05-29 23:44:53 +0800 CST

达到 checkpoint_segments 时会发生什么?

  • 3

我对 PostgreSQL 文档中的 checkpoint_segments 定义有点困惑。达到 checkpoint_segments 时会发生什么?

  1. shared_buffers 中的脏页写入 WAL。那么background writer有什么用呢?
  2. WAL 被合并到实际的数据文件中。
postgresql checkpoint
  • 1 个回答
  • 1063 Views
Martin Hope
Just a learner
Asked: 2011-12-20 05:58:11 +0800 CST

“线程”在“线程检查点”上下文中是什么意思?

  • 3

以下摘自Oracle 概念。也许这是一个愚蠢的问题,但我真的需要你的帮助来理解它。

我的问题是:

  • 上下文线程检查点中的线程是什么意思?
  • 这是否意味着重做日志线程(属于特定实例的所有重做日志文件)?
  • 某个目标是什么意思?

谢谢大家!英语不是我的母语,我觉得有点难以完全理解这一点。

When Oracle Database Initiates Checkpoints 

The checkpoint process (CKPT) is responsible for writing checkpoints to the data file  
headers and control file. Checkpoints occur in a variety of situations. For example,  
Oracle Database uses the following types of checkpoints: 

■   Thread checkpoints 
    ^^^^^^
    The database writes to disk all buffers modified by redo in a specific thread before  
                                                             ^^^^^^^^^^^^^^^^^^^^
    a certain target. The set of thread checkpoints on all instances in a database is 
    ^^^^^^^^^^^^^^^^^
    a database checkpoint. Thread checkpoints occur in the following situations: 

    – Consistent database shutdown 

    – ALTER SYSTEM CHECKPOINT statement 

    – Online redo log switch 

    – ALTER DATABASE BEGIN BACKUP statement 

■   Tablespace and data file checkpoints 

    The database writes to disk all buffers modified by redo before a specific target. A  
    tablespace checkpoint is a set of data file checkpoints, one for each data file in the  
    tablespace. These checkpoints occur in a variety of situations, including making a  
    tablespace read-only or taking it offline normal, shrinking a data file, or executing  
    ALTER TABLESPACE BEGIN BACKUP. 

■   Incremental checkpoints 

    An incremental checkpoint is a type of thread checkpoint partly intended to avoid  
    writing large numbers of blocks at online redo log switches. DBWn checks at least  
    every three seconds to determine whether it has work to do. When DBWn writes  
    dirty buffers, it advances the checkpoint position, causing CKPT to write the  
    checkpoint position to the control file, but not to the data file headers. 

Other types of checkpoints include instance and media recovery checkpoints and  
checkpoints when schema objects are dropped or truncated.
oracle checkpoint
  • 3 个回答
  • 1440 Views

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